From ed47885b35983b8dce723218adb37e08c8e9253f Mon Sep 17 00:00:00 2001 From: Werner <1331699+Arrow768@users.noreply.github.com> Date: Wed, 15 Nov 2023 20:59:28 +0100 Subject: [PATCH 01/32] Update tgs dmapi (#17789) * Update tgs dmapi * Add basic tgs event handler * Update to_world_count --------- Co-authored-by: Werner --- .github/CODEOWNERS | 2 +- .github/workflows/byond.yml | 2 +- aurorastation.dme | 4 +- code/__defines/_world.dm | 3 + code/__defines/tgs.dm | 260 ++++++++++++++++------ code/datums/tgs_event_handler.dm | 41 ++++ code/{ => game}/world.dm | 6 +- code/modules/tgs/LICENSE | 2 +- code/modules/tgs/README.md | 2 +- code/modules/tgs/core/README.md | 3 +- code/modules/tgs/core/_definitions.dm | 8 + code/modules/tgs/core/core.dm | 7 +- code/modules/tgs/core/datum.dm | 14 ++ code/modules/tgs/includes.dm | 4 + code/modules/tgs/v3210/api.dm | 48 ++-- code/modules/tgs/v3210/commands.dm | 12 +- code/modules/tgs/v4/api.dm | 41 ++-- code/modules/tgs/v4/commands.dm | 11 +- code/modules/tgs/v5/README.md | 5 + code/modules/tgs/v5/__interop_version.dm | 1 + code/modules/tgs/v5/_defines.dm | 21 +- code/modules/tgs/v5/api.dm | 247 ++++++--------------- code/modules/tgs/v5/bridge.dm | 99 +++++++++ code/modules/tgs/v5/chunking.dm | 43 ++++ code/modules/tgs/v5/commands.dm | 38 +++- code/modules/tgs/v5/serializers.dm | 59 +++++ code/modules/tgs/v5/topic.dm | 270 +++++++++++++++++++++++ code/modules/tgs/v5/undefs.dm | 19 +- 28 files changed, 969 insertions(+), 303 deletions(-) create mode 100644 code/__defines/_world.dm create mode 100644 code/datums/tgs_event_handler.dm rename code/{ => game}/world.dm (99%) create mode 100644 code/modules/tgs/v5/__interop_version.dm create mode 100644 code/modules/tgs/v5/bridge.dm create mode 100644 code/modules/tgs/v5/chunking.dm create mode 100644 code/modules/tgs/v5/serializers.dm create mode 100644 code/modules/tgs/v5/topic.dm diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 03d7cbd3fc6..57d9a3a2905 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -11,7 +11,7 @@ /code/__defines/master_controller.dm @Arrow768 /code/controllers/master @Arrow768 /code/controllers/subsystems/fail2topic.dm @Arrow768 -/code/world.dm @Arrow768 +/code/game/world.dm @Arrow768 /code/modules/admin/ @Arrow768 /code/modules/web_interface/ @Arrow768 /code/modules/world_api/ @Arrow768 diff --git a/.github/workflows/byond.yml b/.github/workflows/byond.yml index d4744593ad1..323bbef4440 100644 --- a/.github/workflows/byond.yml +++ b/.github/workflows/byond.yml @@ -15,7 +15,7 @@ on: env: MACRO_COUNT: 0 GENDER_COUNT: 6 - TO_WORLD_COUNT: 186 + TO_WORLD_COUNT: 187 #These variables are filled from dependencies.sh inside the steps, DO NOT SET THEM HERE BYOND_MAJOR: "" diff --git a/aurorastation.dme b/aurorastation.dme index 116c3671338..ee972decbff 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -16,7 +16,6 @@ #include "code\hub.dm" #include "code\names.dm" #include "code\stylesheet.dm" -#include "code\world.dm" #include "code\__datastructures\stack.dm" #include "code\__defines\_click.dm" #include "code\__defines\_common.dm" @@ -24,6 +23,7 @@ #include "code\__defines\_layers.dm" #include "code\__defines\_macros.dm" #include "code\__defines\_unit_tests.dm" +#include "code\__defines\_world.dm" #include "code\__defines\accessories.dm" #include "code\__defines\admin.dm" #include "code\__defines\antagonist.dm" @@ -350,6 +350,7 @@ #include "code\datums\ruins.dm" #include "code\datums\sound_player.dm" #include "code\datums\statistic.dm" +#include "code\datums\tgs_event_handler.dm" #include "code\datums\tgui_module.dm" #include "code\datums\weakref.dm" #include "code\datums\components\_component.dm" @@ -498,6 +499,7 @@ #include "code\game\shuttle_engines.dm" #include "code\game\sound.dm" #include "code\game\supplyshuttle.dm" +#include "code\game\world.dm" #include "code\game\antagonist\_antagonist_setup.dm" #include "code\game\antagonist\antagonist.dm" #include "code\game\antagonist\antagonist_add.dm" diff --git a/code/__defines/_world.dm b/code/__defines/_world.dm new file mode 100644 index 00000000000..faab1b10332 --- /dev/null +++ b/code/__defines/_world.dm @@ -0,0 +1,3 @@ +#define WORLD_ICON_SIZE 32 +#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 +#define WORLD_MIN_SIZE 32 diff --git a/code/__defines/tgs.dm b/code/__defines/tgs.dm index 3cdb22834ab..e1f89bb1317 100644 --- a/code/__defines/tgs.dm +++ b/code/__defines/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "6.0.2" +#define TGS_DMAPI_VERSION "6.6.2" // All functions and datums outside this document are subject to change with any version and should not be relied on. @@ -12,20 +12,20 @@ // 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()() +// 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) var/global/_tgs_##Name = ##Value +#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) var/global/##Name = ##Value /// Read the value in the global variable `Name`. -#define TGS_READ_GLOBAL(Name) global._tgs_##Name +#define TGS_READ_GLOBAL(Name) global.##Name /// Set the value in the global variable `Name` to `Value`. -#define TGS_WRITE_GLOBAL(Name, Value) global._tgs_##Name = ##Value +#define TGS_WRITE_GLOBAL(Name, Value) 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) @@ -52,44 +52,46 @@ // EVENT CODES -/// Before a reboot mode change, extras parameters are the current and new reboot mode enums +/// 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 +/// 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 +/// 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 +/// 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 +/// 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 +/// 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 +/// 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 +/// 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 +/// Before the repository makes a sychronize operation. Parameters: Absolute repostiory path. #define TGS_EVENT_REPO_PRE_SYNCHRONIZE 4 -/// Before a BYOND install operation begins. Parameters: [/datum/tgs_version] of the installing BYOND +/// Before a BYOND install operation begins. Parameters: [/datum/tgs_version] of the installing BYOND. #define TGS_EVENT_BYOND_INSTALL_START 5 /// When a BYOND install operation fails. Parameters: Error message #define TGS_EVENT_BYOND_INSTALL_FAIL 6 -/// When the active BYOND version changes. Parameters: (Nullable) [/datum/tgs_version] of the current BYOND, [/datum/tgs_version] of the new BYOND +/// When the active BYOND version changes. Parameters: (Nullable) [/datum/tgs_version] of the current BYOND, [/datum/tgs_version] of the new BYOND. #define TGS_EVENT_BYOND_ACTIVE_VERSION_CHANGE 7 -/// When the compiler starts running. Parameters: Game directory path, origin commit SHA +/// 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 +/// 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 +/// 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 +/// 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 +/// 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 +/// 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 +/// 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 @@ -102,6 +104,14 @@ // #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, byond version. +#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 @@ -119,6 +129,13 @@ /// 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 + //REQUIRED HOOKS /** @@ -135,7 +152,6 @@ * * 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 - * Before this point, note that any static files or directories may be in use by another server. Your code should account for this. * This function should not be called before ..() in [/world/proc/New]. */ /world/proc/TgsInitializationComplete() @@ -145,12 +161,11 @@ #define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return /** - * Call this at the beginning of [world/proc/Reboot]. + * 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 @@ -158,31 +173,30 @@ /datum/tgs_revision_information /// Full SHA of the commit. var/commit - /// ISO 8601 timestamp of when the commit was created + /// 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 + /// 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 + // 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 + /// The patch version number. null for wildcards. var/patch - /// Legacy version number. Generally null + /// Legacy version number. Generally null. var/deprecated_patch - /// Unparsed string value + /// Unparsed string value. var/raw_parameter - /// String value minus prefix + /// String value minus prefix. var/deprefixed_parameter - /** * Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] contains wildcards. */ @@ -226,40 +240,49 @@ 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 + /// 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. + /// The user's display name. var/friendly_name - // The string to use to ping this user in a message. + /// The string to use to ping this user in a message. var/mention - /// The [/datum/tgs_chat_channel] the user was from + /// 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 + * 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 +/// 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 ...` + /// 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 + /// The help text displayed for this command. var/help_text = "" - /// If this command should be available to game administrators only + /// 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 string to respond to the issuer with. + * 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]. @@ -267,6 +290,107 @@ /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. @@ -286,75 +410,77 @@ // 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. + * 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 + * 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. + * Send a message to connected chats. This function may sleep! * - * message - The string to send. + * 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(message, admin_only = FALSE) +/world/proc/TgsTargetedChatBroadcast(datum/tgs_message_content/message, admin_only = FALSE) return /** - * Send a private message to a specific user. + * Send a private message to a specific user. This function may sleep! * - * message - The string to send. + * message - The [/datum/tgs_message_content] to send. * user: The [/datum/tgs_chat_user] to PM. */ -/world/proc/TgsChatPrivateMessage(message, datum/tgs_chat_user/user) +/world/proc/TgsChatPrivateMessage(datum/tgs_message_content/message, datum/tgs_chat_user/user) return -// The following functions will sleep if a call to TgsNew() is sleeping - /** - * Send a message to connected chats that are flagged as game-related in TGS. + * Send a message to connected chats that are flagged as game-related in TGS. This function may sleep! * - * message - The string to send. + * 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(message, list/channels = null) +/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. +/// 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 current [/datum/tgs_version] of the DMAPI being used if it was activated, null otherwise. +/// 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. +/// 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. +/// 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. +/// 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 a list of active [/datum/tgs_revision_information/test_merge]s if TGS is present, null otherwise. +/// 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. +/// 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 Jordan Brown +Copyright (c) 2017-2023 Jordan Brown Permission is hereby granted, free of charge, to any person obtaining a copy of this software and diff --git a/code/datums/tgs_event_handler.dm b/code/datums/tgs_event_handler.dm new file mode 100644 index 00000000000..9af3d85d61c --- /dev/null +++ b/code/datums/tgs_event_handler.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(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/world.dm b/code/game/world.dm similarity index 99% rename from code/world.dm rename to code/game/world.dm index dcf18686b3d..0fb1a2a1286 100644 --- a/code/world.dm +++ b/code/game/world.dm @@ -1,7 +1,3 @@ -#define WORLD_ICON_SIZE 32 -#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 -#define WORLD_MIN_SIZE 32 - /* The initialization of the game happens roughly like this: @@ -76,7 +72,7 @@ var/global/datum/global_init/init = new () if(byond_version < RECOMMENDED_VERSION) log_world("ERROR: Your server's byond version does not meet the recommended requirements for this server. Please update BYOND to [RECOMMENDED_VERSION].") - world.TgsNew() + TgsNew(new /datum/tgs_event_handler/impl, TGS_SECURITY_TRUSTED) config.post_load() diff --git a/code/modules/tgs/LICENSE b/code/modules/tgs/LICENSE index 221f9e1deb2..2bedf9a63aa 100644 --- a/code/modules/tgs/LICENSE +++ b/code/modules/tgs/LICENSE @@ -1,6 +1,6 @@ The MIT License -Copyright (c) 2017 Jordan Brown +Copyright (c) 2017-2023 Jordan Brown Permission is hereby granted, free of charge, to any person obtaining a copy of this software and diff --git a/code/modules/tgs/README.md b/code/modules/tgs/README.md index 445cee41f57..6319028d810 100644 --- a/code/modules/tgs/README.md +++ b/code/modules/tgs/README.md @@ -7,7 +7,7 @@ This folder should be placed on it's own inside a codebase that wishes to use th - The other versioned folders contain code for the different DMAPI versions. - [v3210](./v3210) contains the final TGS3 API. - [v4](./v4) is the legacy DMAPI 4 (Used in TGS 4.0.X versions). - - [v5](./v5) is the current DMAPI version used by TGS4 >=4.1. + - [v5](./v5) is the current DMAPI version used by TGS >=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/code/modules/tgs/core/README.md b/code/modules/tgs/core/README.md index aa3c7a9c9db..b82d8f49e29 100644 --- a/code/modules/tgs/core/README.md +++ b/code/modules/tgs/core/README.md @@ -5,4 +5,5 @@ 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 \ No newline at end of file +- [tgs_version.dm](./tgs_version.dm) contains the `/datum/tgs_version` definition +- diff --git a/code/modules/tgs/core/_definitions.dm b/code/modules/tgs/core/_definitions.dm index ebf6d17c2a0..fd98034eb71 100644 --- a/code/modules/tgs/core/_definitions.dm +++ b/code/modules/tgs/core/_definitions.dm @@ -1,2 +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/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm index 41a04733945..b9a9f27a28a 100644 --- a/code/modules/tgs/core/core.dm +++ b/code/modules/tgs/core/core.dm @@ -153,4 +153,9 @@ /world/TgsSecurityLevel() var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) if(api) - api.SecurityLevel() + return api.SecurityLevel() + +/world/TgsVisibility() + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + return api.Visibility() diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm index 4d37ed662d1..07ce3b68458 100644 --- a/code/modules/tgs/core/datum.dm +++ b/code/modules/tgs/core/datum.dm @@ -4,11 +4,22 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) 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 @@ -55,3 +66,6 @@ TGS_PROTECT_DATUM(/datum/tgs_api) /datum/tgs_api/proc/SecurityLevel() return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/Visibility() + return TGS_UNIMPLEMENTED diff --git a/code/modules/tgs/includes.dm b/code/modules/tgs/includes.dm index 4018074f4e3..23b714f9d06 100644 --- a/code/modules/tgs/includes.dm +++ b/code/modules/tgs/includes.dm @@ -13,5 +13,9 @@ #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/code/modules/tgs/v3210/api.dm b/code/modules/tgs/v3210/api.dm index 245381b93ea..666201a3225 100644 --- a/code/modules/tgs/v3210/api.dm +++ b/code/modules/tgs/v3210/api.dm @@ -28,6 +28,8 @@ #define SERVICE_RETURN_SUCCESS "SUCCESS" +#define TGS_FILE2LIST(filename) (splittext(trim_left(trim_right(file2text(filename))), "\n")) + /datum/tgs_api/v3210 var/reboot_mode = REBOOT_MODE_NORMAL var/comms_key @@ -53,24 +55,29 @@ return copytext(text, 1, i + 1) return "" -/datum/tgs_api/v3210/proc/file2list(filename) - return splittext(trim_left(trim_right(file2text(filename))), "\n") - /datum/tgs_api/v3210/OnWorldNew(minimum_required_security_level) . = FALSE comms_key = world.params[SERVICE_WORLD_PARAM] instance_name = world.params[SERVICE_INSTANCE_PARAM] if(!instance_name) - instance_name = "TG Station Server" //maybe just upgraded + instance_name = "TG Station Server" //maybe just upgraded - var/list/logs = file2list(".git/logs/HEAD") + var/list/logs = TGS_FILE2LIST(".git/logs/HEAD") if(logs.len) - logs = splittext(logs[logs.len - 1], " ") - commit = logs[2] - logs = file2list(".git/logs/refs/remotes/origin/master") + logs = splittext(logs[logs.len], " ") + if (logs.len >= 2) + commit = logs[2] + else + TGS_ERROR_LOG("Error parsing commit logs") + + logs = TGS_FILE2LIST(".git/logs/refs/remotes/origin/master") if(logs.len) - originmastercommit = splittext(logs[logs.len - 1], " ")[2] + logs = splittext(logs[logs.len], " ") + if (logs.len >= 2) + originmastercommit = logs[2] + else + TGS_ERROR_LOG("Error parsing origin commmit logs") if(world.system_type != MS_WINDOWS) TGS_ERROR_LOG("This API version is only supported on Windows. Not running on Windows. Aborting initialization!") @@ -92,14 +99,18 @@ if(skip_compat_check && !fexists(SERVICE_INTERFACE_DLL)) TGS_ERROR_LOG("Service parameter present but no interface DLL detected. This is symptomatic of running a service less than version 3.1! Please upgrade.") return - call(SERVICE_INTERFACE_DLL, SERVICE_INTERFACE_FUNCTION)(instance_name, command) //trust no retval + #if DM_VERSION >= 515 + call_ext(SERVICE_INTERFACE_DLL, SERVICE_INTERFACE_FUNCTION)(instance_name, command) //trust no retval + #else + call(SERVICE_INTERFACE_DLL, SERVICE_INTERFACE_FUNCTION)(instance_name, command) //trust no retval + #endif return TRUE /datum/tgs_api/v3210/OnTopic(T) var/list/params = params2list(T) var/their_sCK = params[SERVICE_CMD_PARAM_KEY] if(!their_sCK) - return FALSE //continue world/Topic + return FALSE //continue world/Topic if(their_sCK != comms_key) return "Invalid comms key!"; @@ -168,7 +179,7 @@ /datum/tgs_api/v3210/Revision() if(!warned_revison) var/datum/tgs_version/api_version = ApiVersion() - TGS_ERROR_LOG("Use of TgsRevision on [api_version.deprefixed_parameter] origin_commit only points to master!") + TGS_WARNING_LOG("Use of TgsRevision on [api_version.deprefixed_parameter] origin_commit only points to master!") warned_revison = TRUE var/datum/tgs_revision_information/ri = new ri.commit = commit @@ -176,22 +187,25 @@ return ri /datum/tgs_api/v3210/EndProcess() - sleep(world.tick_lag) //flush the buffers + sleep(world.tick_lag) //flush the buffers ExportService(SERVICE_REQUEST_KILL_PROCESS) /datum/tgs_api/v3210/ChatChannelInfo() return list() // :omegalul: -/datum/tgs_api/v3210/ChatBroadcast(message, list/channels) +/datum/tgs_api/v3210/ChatBroadcast(datum/tgs_message_content/message, list/channels) if(channels) return TGS_UNIMPLEMENTED + message = UpgradeDeprecatedChatMessage(message) ChatTargetedBroadcast(message, TRUE) ChatTargetedBroadcast(message, FALSE) -/datum/tgs_api/v3210/ChatTargetedBroadcast(message, admin_only) - ExportService("[admin_only ? SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE : SERVICE_REQUEST_IRC_BROADCAST] [message]") +/datum/tgs_api/v3210/ChatTargetedBroadcast(datum/tgs_message_content/message, admin_only) + message = UpgradeDeprecatedChatMessage(message) + ExportService("[admin_only ? SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE : SERVICE_REQUEST_IRC_BROADCAST] [message.text]") /datum/tgs_api/v3210/ChatPrivateMessage(message, datum/tgs_chat_user/user) + UpgradeDeprecatedChatMessage(message) return TGS_UNIMPLEMENTED /datum/tgs_api/v3210/SecurityLevel() @@ -226,3 +240,5 @@ #undef SERVICE_REQUEST_API_VERSION #undef SERVICE_RETURN_SUCCESS + +#undef TGS_FILE2LIST diff --git a/code/modules/tgs/v3210/commands.dm b/code/modules/tgs/v3210/commands.dm index 4ccfc1a8a60..e65c816320d 100644 --- a/code/modules/tgs/v3210/commands.dm +++ b/code/modules/tgs/v3210/commands.dm @@ -10,9 +10,12 @@ var/warned_about_the_dangers_of_robutussin = !warnings_only for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) if(!warned_about_the_dangers_of_robutussin) - TGS_ERROR_LOG("Custom chat commands in [ApiVersion()] lacks the /datum/tgs_chat_user/sender.channel field!") + TGS_WARNING_LOG("Custom chat commands in [ApiVersion()] lacks the /datum/tgs_chat_user/sender.channel field!") warned_about_the_dangers_of_robutussin = TRUE var/datum/tgs_chat_command/stc = I + if(stc.ignore_type == I) + continue + var/command_name = initial(stc.name) if(!command_name || findtext(command_name, " ") || findtext(command_name, "'") || findtext(command_name, "\"")) if(warnings_only && !warned_command_names[command_name]) @@ -44,9 +47,12 @@ user.friendly_name = sender // Discord hack, fix the mention if it's only numbers (fuck you IRC trolls) - var/regex/discord_id_regex = regex(@"^[0-9]+$") + var/regex/discord_id_regex = regex("^\[0-9\]+$") if(findtext(sender, discord_id_regex)) sender = "<@[sender]>" user.mention = sender - return stc.Run(user, params) || TRUE + var/datum/tgs_message_content/result = stc.Run(user, params) + result = UpgradeDeprecatedCommandResponse(result, command) + + return result ? result.text : TRUE diff --git a/code/modules/tgs/v4/api.dm b/code/modules/tgs/v4/api.dm index 4eb8e67d928..945e2e41176 100644 --- a/code/modules/tgs/v4/api.dm +++ b/code/modules/tgs/v4/api.dm @@ -73,7 +73,7 @@ if(cached_json["apiValidateOnly"]) TGS_INFO_LOG("Validating API and exiting...") Export(TGS4_COMM_VALIDATE, list(TGS4_PARAMETER_DATA = "[minimum_required_security_level]")) - del(world) + TerminateWorld() security_level = cached_json["securityLevel"] chat_channels_json_path = cached_json["chatChannelsJson"] @@ -118,7 +118,7 @@ var/list/params = params2list(T) var/their_sCK = params[TGS4_INTEROP_ACCESS_IDENTIFIER] if(!their_sCK) - return FALSE //continue world/Topic + return FALSE //continue world/Topic if(their_sCK != access_identifier) return "Invalid comms key!"; @@ -188,24 +188,24 @@ requesting_new_port = TRUE if(!world.OpenPort(0)) //open any port TGS_ERROR_LOG("Unable to open random port to retrieve new port![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) + TerminateWorld() //request a new port export_lock = FALSE - var/list/new_port_json = Export(TGS4_COMM_NEW_PORT, list(TGS4_PARAMETER_DATA = "[world.port]"), TRUE) //stringify this on purpose + var/list/new_port_json = Export(TGS4_COMM_NEW_PORT, list(TGS4_PARAMETER_DATA = "[world.port]"), TRUE) //stringify this on purpose if(!new_port_json) TGS_ERROR_LOG("No new port response from server![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) + TerminateWorld() var/new_port = new_port_json[TGS4_PARAMETER_DATA] if(!isnum(new_port) || new_port <= 0) TGS_ERROR_LOG("Malformed new port json ([json_encode(new_port_json)])![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) + TerminateWorld() if(new_port != world.port && !world.OpenPort(new_port)) TGS_ERROR_LOG("Unable to open port [new_port]![TGS4_PORT_CRITFAIL_MESSAGE]") - del(world) + TerminateWorld() requesting_new_port = FALSE while(export_lock) @@ -235,7 +235,7 @@ var/port = result[TGS4_PARAMETER_DATA] if(!isnum(port)) - return //this is valid, server may just want use to reboot + 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 @@ -256,33 +256,46 @@ /datum/tgs_api/v4/Revision() return cached_revision -/datum/tgs_api/v4/ChatBroadcast(message, list/channels) +/datum/tgs_api/v4/ChatBroadcast(datum/tgs_message_content/message, list/channels) var/list/ids if(length(channels)) ids = list() for(var/I in channels) var/datum/tgs_chat_channel/channel = I ids += channel.id - message = list("message" = message, "channelIds" = ids) + + message = UpgradeDeprecatedChatMessage(message) + + if (!length(channels)) + return + + message = list("message" = message.text, "channelIds" = ids) if(intercepted_message_queue) intercepted_message_queue += list(message) else Export(TGS4_COMM_CHAT, message) -/datum/tgs_api/v4/ChatTargetedBroadcast(message, admin_only) +/datum/tgs_api/v4/ChatTargetedBroadcast(datum/tgs_message_content/message, 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 - message = list("message" = message, "channelIds" = channels) + + message = UpgradeDeprecatedChatMessage(message) + + if (!length(channels)) + return + + message = list("message" = message.text, "channelIds" = channels) if(intercepted_message_queue) intercepted_message_queue += list(message) else Export(TGS4_COMM_CHAT, message) -/datum/tgs_api/v4/ChatPrivateMessage(message, datum/tgs_chat_user/user) - message = list("message" = message, "channelIds" = list(user.channel.id)) +/datum/tgs_api/v4/ChatPrivateMessage(datum/tgs_message_content/message, datum/tgs_chat_user/user) + message = UpgradeDeprecatedChatMessage(message) + message = list("message" = message.text, "channelIds" = list(user.channel.id)) if(intercepted_message_queue) intercepted_message_queue += list(message) else diff --git a/code/modules/tgs/v4/commands.dm b/code/modules/tgs/v4/commands.dm index 4ca1500167b..25dd6740e3a 100644 --- a/code/modules/tgs/v4/commands.dm +++ b/code/modules/tgs/v4/commands.dm @@ -3,6 +3,9 @@ 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!") @@ -34,8 +37,8 @@ var/datum/tgs_chat_command/sc = custom_commands[command] if(sc) - var/result = sc.Run(u, params) - if(result == null) - result = "" - return result + var/datum/tgs_message_content/result = sc.Run(u, params) + result = UpgradeDeprecatedCommandResponse(result, command) + + return result ? result.text : TRUE return "Unknown command: [command]!" diff --git a/code/modules/tgs/v5/README.md b/code/modules/tgs/v5/README.md index 5b48d57a1f0..a8a0c748e7b 100644 --- a/code/modules/tgs/v5/README.md +++ b/code/modules/tgs/v5/README.md @@ -2,7 +2,12 @@ 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/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm new file mode 100644 index 00000000000..1b52b31d6a7 --- /dev/null +++ b/code/modules/tgs/v5/__interop_version.dm @@ -0,0 +1 @@ +"5.6.2" diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm index 10bc4cbe406..bdcd4e4dd58 100644 --- a/code/modules/tgs/v5/_defines.dm +++ b/code/modules/tgs/v5/_defines.dm @@ -4,16 +4,29 @@ #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_PORT_UPDATE 0 #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_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" @@ -25,7 +38,6 @@ #define DMAPI5_BRIDGE_RESPONSE_NEW_PORT "newPort" #define DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION "runtimeInformation" -#define DMAPI5_CHAT_MESSAGE_TEXT "text" #define DMAPI5_CHAT_MESSAGE_CHANNEL_IDS "channelIds" #define DMAPI5_RUNTIME_INFORMATION_ACCESS_IDENTIFIER "accessIdentifier" @@ -36,6 +48,7 @@ #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" @@ -63,8 +76,10 @@ #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_HEARTBEAT 7 +#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_PARAMETER_COMMAND_TYPE "commandType" #define DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND "chatCommand" @@ -75,6 +90,7 @@ #define DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE "chatUpdate" #define DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION "newServerVersion" +#define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE "commandResponse" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE "commandResponseMessage" #define DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES "chatResponses" @@ -93,6 +109,7 @@ #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" diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 6735ed5dec5..7226f29bba6 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -4,6 +4,7 @@ var/instance_name var/security_level + var/visibility var/reboot_mode = TGS_REBOOT_MODE_NORMAL @@ -17,12 +18,22 @@ var/initialized = FALSE + var/chunked_requests = 0 + var/list/chunked_topics = list() + + var/detached = FALSE + +/datum/tgs_api/v5/New() + . = ..() + TGS_DEBUG_LOG("V5 API created") + /datum/tgs_api/v5/ApiVersion() return new /datum/tgs_version( - #include "interop_version.dm" + #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] @@ -40,10 +51,11 @@ if(runtime_information[DMAPI5_RUNTIME_INFORMATION_API_VALIDATE_ONLY]) TGS_INFO_LOG("DMAPI validation, exiting...") - del(world) + TerminateWorld() version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) 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] @@ -91,189 +103,46 @@ return TRUE /datum/tgs_api/v5/proc/RequireInitialBridgeResponse() + TGS_DEBUG_LOG("RequireInitialBridgeResponse()") + var/logged = FALSE while(!version) + 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/proc/TopicResponse(error_message = null) - var/list/response = list() - response[DMAPI5_RESPONSE_ERROR_MESSAGE] = error_message - - return json_encode(response) - /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 - var/list/topic_parameters = json_decode(json) - if(!topic_parameters) - return TopicResponse("Invalid topic parameters json!"); - if(!initialized) - TGS_WARNING_LOG("Missed topic due to not being initialized: [T]") - return TRUE // too early to handle, but it's still our responsibility - - var/their_sCK = topic_parameters[DMAPI5_PARAMETER_ACCESS_IDENTIFIER] - if(their_sCK != access_identifier) - return TopicResponse("Failed to decode [DMAPI5_PARAMETER_ACCESS_IDENTIFIER] from: [json]!"); - - var/command = topic_parameters[DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE] - if(!isnum(command)) - return TopicResponse("Failed to decode [DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE] from: [json]!") - - switch(command) - if(DMAPI5_TOPIC_COMMAND_CHAT_COMMAND) - var/result = HandleCustomCommand(topic_parameters[DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND]) - if(!result) - result = TopicResponse("Error running chat command!") - return result - if(DMAPI5_TOPIC_COMMAND_EVENT_NOTIFICATION) - intercepted_message_queue = list() - 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)) - return TopicResponse("Invalid or missing [DMAPI5_EVENT_NOTIFICATION_PARAMETERS]!") - - var/list/event_call = list(event_type) - if(event_parameters) - event_call += event_parameters - - if(event_handler != null) - event_handler.HandleEvent(arglist(event_call)) - - var/list/response = list() - response[DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES] = intercepted_message_queue - intercepted_message_queue = null - return json_encode(response) - 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) - var/list/chat_update_json = topic_parameters[DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE] - if(!istype(chat_update_json)) - 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_HEARTBEAT) - return TopicResponse() - if(DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH) - 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 - - return json_encode(list(DMAPI5_RESPONSE_ERROR_MESSAGE = error_message, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands())) - - return TopicResponse("Unknown command: [command]") - -/datum/tgs_api/v5/proc/Bridge(command, list/data) - if(!data) - data = list() + TGS_WARNING_LOG("Missed topic due to not being initialized: [json]") + return TRUE // too early to handle, but it's still our responsibility - data[DMAPI5_BRIDGE_PARAMETER_COMMAND_TYPE] = command - data[DMAPI5_PARAMETER_ACCESS_IDENTIFIER] = access_identifier - - var/json = json_encode(data) - var/encoded_json = url_encode(json) - - // This is an infinite sleep until we get a response - var/export_response = world.Export("http://127.0.0.1:[server_port]/Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]") - if(!export_response) - TGS_ERROR_LOG("Failed export request: [json]") - return - - var/response_json = file2text(export_response["CONTENT"]) - if(!response_json) - TGS_ERROR_LOG("Failed export request, missing content!") - return - - var/list/bridge_response = json_decode(response_json) - if(!bridge_response) - TGS_ERROR_LOG("Failed export request, bad json: [response_json]") - return - - var/error = bridge_response[DMAPI5_RESPONSE_ERROR_MESSAGE] - if(error) - TGS_ERROR_LOG("Failed export request, bad request: [error]") - return - - return bridge_response + return ProcessTopicJson(json, TRUE) /datum/tgs_api/v5/OnReboot() var/list/result = Bridge(DMAPI5_BRIDGE_COMMAND_REBOOT) if(!result) return - //okay so the standard TGS4 proceedure is: right before rebooting change the port to whatever was sent to us in the above json's data parameter + //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 + 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 @@ -297,7 +166,15 @@ RequireInitialBridgeResponse() return revision -/datum/tgs_api/v5/ChatBroadcast(message, list/channels) +// 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() @@ -306,36 +183,53 @@ var/datum/tgs_chat_channel/channel = I ids += channel.id - message = list(DMAPI5_CHAT_MESSAGE_TEXT = message, DMAPI5_CHAT_MESSAGE_CHANNEL_IDS = ids) + message2 = UpgradeDeprecatedChatMessage(message2) + + if (!length(channels)) + return + + var/list/data = message2._interop_serialize() + data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = ids if(intercepted_message_queue) - intercepted_message_queue += list(message) + intercepted_message_queue += list(data) else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = message)) + Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) -/datum/tgs_api/v5/ChatTargetedBroadcast(message, admin_only) +/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 - message = list(DMAPI5_CHAT_MESSAGE_TEXT = message, DMAPI5_CHAT_MESSAGE_CHANNEL_IDS = channels) + + message2 = UpgradeDeprecatedChatMessage(message2) + + if (!length(channels)) + return + + var/list/data = message2._interop_serialize() + data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channels if(intercepted_message_queue) - intercepted_message_queue += list(message) + intercepted_message_queue += list(data) else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = message)) + Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) -/datum/tgs_api/v5/ChatPrivateMessage(message, datum/tgs_chat_user/user) - message = list(DMAPI5_CHAT_MESSAGE_TEXT = message, DMAPI5_CHAT_MESSAGE_CHANNEL_IDS = list(user.channel.id)) +/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user) + message2 = UpgradeDeprecatedChatMessage(message2) + var/list/data = message2._interop_serialize() + data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = list(user.channel.id) if(intercepted_message_queue) - intercepted_message_queue += list(message) + intercepted_message_queue += list(data) else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = message)) + 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() @@ -354,8 +248,13 @@ 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/code/modules/tgs/v5/bridge.dm b/code/modules/tgs/v5/bridge.dm new file mode 100644 index 00000000000..37f58bcdf63 --- /dev/null +++ b/code/modules/tgs/v5/bridge.dm @@ -0,0 +1,99 @@ +/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/url = "http://127.0.0.1:[server_port]/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/response_json = file2text(export_response["CONTENT"]) + if(!response_json) + TGS_ERROR_LOG("Failed bridge request, missing 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/code/modules/tgs/v5/chunking.dm b/code/modules/tgs/v5/chunking.dm new file mode 100644 index 00000000000..cd5944d34fb --- /dev/null +++ b/code/modules/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/code/modules/tgs/v5/commands.dm b/code/modules/tgs/v5/commands.dm index 6d31dd3422d..9557f8a08ed 100644 --- a/code/modules/tgs/v5/commands.dm +++ b/code/modules/tgs/v5/commands.dm @@ -3,14 +3,17 @@ 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_WARNING_LOG("Custom command [command_name] ([I]) can't be used as it is empty or contains illegal characters!") + 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_WARNING_LOG("Custom commands [other.type] and [I] have the same name (\"[command_name]\"), only [other.type] will be available!") + 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 @@ -30,11 +33,28 @@ var/datum/tgs_chat_command/sc = custom_commands[command] if(sc) - var/text_response = sc.Run(u, params) - var/list/topic_response = list() - if(!istext(text_response)) - TGS_ERROR_LOG("Custom command [command] should return a string! Got: \"[text_response]\"") - text_response = null - topic_response[DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE] = text_response - return json_encode(topic_response) + 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/code/modules/tgs/v5/serializers.dm b/code/modules/tgs/v5/serializers.dm new file mode 100644 index 00000000000..3a32848ad51 --- /dev/null +++ b/code/modules/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/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm new file mode 100644 index 00000000000..d7d47121381 --- /dev/null +++ b/code/modules/tgs/v5/topic.dm @@ -0,0 +1,270 @@ +/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() + 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 + + return TopicResponse("Unknown command: [command]") diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm index 5885a60e75c..f163adaaafe 100644 --- a/code/modules/tgs/v5/undefs.dm +++ b/code/modules/tgs/v5/undefs.dm @@ -4,16 +4,29 @@ #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_PORT_UPDATE #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_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 @@ -25,7 +38,6 @@ #undef DMAPI5_BRIDGE_RESPONSE_NEW_PORT #undef DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION -#undef DMAPI5_CHAT_MESSAGE_TEXT #undef DMAPI5_CHAT_MESSAGE_CHANNEL_IDS #undef DMAPI5_RUNTIME_INFORMATION_ACCESS_IDENTIFIER @@ -36,6 +48,7 @@ #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 @@ -63,7 +76,7 @@ #undef DMAPI5_TOPIC_COMMAND_INSTANCE_RENAMED #undef DMAPI5_TOPIC_COMMAND_CHAT_CHANNELS_UPDATE #undef DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE -#undef DMAPI5_TOPIC_COMMAND_HEARTBEAT +#undef DMAPI5_TOPIC_COMMAND_HEALTHCHECK #undef DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH #undef DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE @@ -75,6 +88,7 @@ #undef DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE #undef DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION +#undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE #undef DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES @@ -93,6 +107,7 @@ #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 From 635c3d43983bb9493b2c5cf3021f927c1f825d11 Mon Sep 17 00:00:00 2001 From: AuroraBuildBot Date: Mon, 20 Nov 2023 18:21:17 +0000 Subject: [PATCH 02/32] Automatic Changelog compile [ci skip] --- html/changelog.html | 37 +++++++++++++++ html/changelogs/.all_changelog.yml | 28 ++++++++++++ .../DreamySkrell-xenobot-maint-door.yml | 41 ----------------- .../GeneralCamo - Xanan Shotgun.yml | 41 ----------------- ...Lavillastrangiato - mictlan origin fix.yml | 41 ----------------- html/changelogs/SleepyGemmy-badges.yml | 6 --- .../SleepyGemmy-xb_visual_polishing.yml | 6 --- .../fluffyghost-fixantagannouncements.yml | 45 ------------------- html/changelogs/geeves-salt_pr.yml | 8 ---- html/changelogs/lunanflag.yml | 6 --- 10 files changed, 65 insertions(+), 194 deletions(-) delete mode 100644 html/changelogs/DreamySkrell-xenobot-maint-door.yml delete mode 100644 html/changelogs/GeneralCamo - Xanan Shotgun.yml delete mode 100644 html/changelogs/Lavillastrangiato - mictlan origin fix.yml delete mode 100644 html/changelogs/SleepyGemmy-badges.yml delete mode 100644 html/changelogs/SleepyGemmy-xb_visual_polishing.yml delete mode 100644 html/changelogs/fluffyghost-fixantagannouncements.yml delete mode 100644 html/changelogs/geeves-salt_pr.yml delete mode 100644 html/changelogs/lunanflag.yml diff --git a/html/changelog.html b/html/changelog.html index c6b5252da1f..298088ef170 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -35,6 +35,43 @@ -->
+

20 November 2023

+

DreamySkrell updated:

+
    +
  • Xenobotany maint door.
  • +
+

FluffyGhost updated:

+
    +
  • Added text manipulation macros from TG, and a new one to have newlines working.
  • +
  • Moved around some macros in the appropriate files.
  • +
  • Antag uplink announcements now shows apostrophes correctly, and can have newlines in them.
  • +
  • Antag uplink announcements now uses tgui inputs.
  • +
  • PDA STT now respects the apostrophes and other characters too.
  • +
+

Geeves updated:

+
    +
  • Lings gain a new free ability called Emergency Transform, where their heads detach from their bodies. They can grow back to normal after 10 minutes has passed.
  • +
  • Lings can no longer use regenerative stasis while dead. If they die while regenerating, it will fail.
  • +
  • Regenerative stasis can now only be used once.
  • +
+

GeneralCamo, NobleRow updated:

+
    +
  • Added the dNAC-12 combat shotgun.
  • +
+

Lavillastrangiato updated:

+
    +
  • Specifies characters from Mictlan must originate from Mexico as well as Central- or South America.
  • +
+

Pirouette, StevIII updated:

+
    +
  • Added a Lunan banner, flag, and flagpatch to loadout.
  • +
+

SleepyGemmy updated:

+
    +
  • Fixed some security badges not being named after the actual roles.
  • +
  • Polished and tweaked xenobiology.
  • +
+

13 November 2023

CampinKiller24 updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 00305b3a1ec..f62ea2eed70 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -32166,3 +32166,31 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: Added a selection of new food including white chocolate, shakshouka, v'krexi wraps, a Europan deep dive dish, and a Biesellite blue moon dish. Sprited by TomixComics. +2023-11-20: + DreamySkrell: + - maptweak: Xenobotany maint door. + FluffyGhost: + - rscadd: Added text manipulation macros from TG, and a new one to have newlines + working. + - refactor: Moved around some macros in the appropriate files. + - bugfix: Antag uplink announcements now shows apostrophes correctly, and can have + newlines in them. + - refactor: Antag uplink announcements now uses tgui inputs. + - bugfix: PDA STT now respects the apostrophes and other characters too. + Geeves: + - rscadd: Lings gain a new free ability called Emergency Transform, where their + heads detach from their bodies. They can grow back to normal after 10 minutes + has passed. + - tweak: Lings can no longer use regenerative stasis while dead. If they die while + regenerating, it will fail. + - tweak: Regenerative stasis can now only be used once. + GeneralCamo, NobleRow: + - rscadd: Added the dNAC-12 combat shotgun. + Lavillastrangiato: + - spellcheck: Specifies characters from Mictlan must originate from Mexico as well + as Central- or South America. + Pirouette, StevIII: + - imageadd: Added a Lunan banner, flag, and flagpatch to loadout. + SleepyGemmy: + - bugfix: Fixed some security badges not being named after the actual roles. + - maptweak: Polished and tweaked xenobiology. diff --git a/html/changelogs/DreamySkrell-xenobot-maint-door.yml b/html/changelogs/DreamySkrell-xenobot-maint-door.yml deleted file mode 100644 index eb4cbe54049..00000000000 --- a/html/changelogs/DreamySkrell-xenobot-maint-door.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: DreamySkrell - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - maptweak: "Xenobotany maint door." diff --git a/html/changelogs/GeneralCamo - Xanan Shotgun.yml b/html/changelogs/GeneralCamo - Xanan Shotgun.yml deleted file mode 100644 index e400a9b725c..00000000000 --- a/html/changelogs/GeneralCamo - Xanan Shotgun.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: GeneralCamo, NobleRow - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - rscadd: "Added the dNAC-12 combat shotgun." diff --git a/html/changelogs/Lavillastrangiato - mictlan origin fix.yml b/html/changelogs/Lavillastrangiato - mictlan origin fix.yml deleted file mode 100644 index 199c0625398..00000000000 --- a/html/changelogs/Lavillastrangiato - mictlan origin fix.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: Lavillastrangiato - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - spellcheck: "Specifies characters from Mictlan must originate from Mexico as well as Central- or South America." diff --git a/html/changelogs/SleepyGemmy-badges.yml b/html/changelogs/SleepyGemmy-badges.yml deleted file mode 100644 index 0d08b8d5dff..00000000000 --- a/html/changelogs/SleepyGemmy-badges.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: SleepyGemmy - -delete-after: True - -changes: - - bugfix: "Fixed some security badges not being named after the actual roles." diff --git a/html/changelogs/SleepyGemmy-xb_visual_polishing.yml b/html/changelogs/SleepyGemmy-xb_visual_polishing.yml deleted file mode 100644 index c3e28cc4574..00000000000 --- a/html/changelogs/SleepyGemmy-xb_visual_polishing.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: SleepyGemmy - -delete-after: True - -changes: - - maptweak: "Polished and tweaked xenobiology." diff --git a/html/changelogs/fluffyghost-fixantagannouncements.yml b/html/changelogs/fluffyghost-fixantagannouncements.yml deleted file mode 100644 index f95873d4b82..00000000000 --- a/html/changelogs/fluffyghost-fixantagannouncements.yml +++ /dev/null @@ -1,45 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: FluffyGhost - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - rscadd: "Added text manipulation macros from TG, and a new one to have newlines working." - - refactor: "Moved around some macros in the appropriate files." - - bugfix: "Antag uplink announcements now shows apostrophes correctly, and can have newlines in them." - - refactor: "Antag uplink announcements now uses tgui inputs." - - bugfix: "PDA STT now respects the apostrophes and other characters too." diff --git a/html/changelogs/geeves-salt_pr.yml b/html/changelogs/geeves-salt_pr.yml deleted file mode 100644 index 1ba7c7e5089..00000000000 --- a/html/changelogs/geeves-salt_pr.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: Geeves - -delete-after: True - -changes: - - rscadd: "Lings gain a new free ability called Emergency Transform, where their heads detach from their bodies. They can grow back to normal after 10 minutes has passed." - - tweak: "Lings can no longer use regenerative stasis while dead. If they die while regenerating, it will fail." - - tweak: "Regenerative stasis can now only be used once." \ No newline at end of file diff --git a/html/changelogs/lunanflag.yml b/html/changelogs/lunanflag.yml deleted file mode 100644 index 396a5ce99d3..00000000000 --- a/html/changelogs/lunanflag.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Pirouette, StevIII - -delete-after: True - -changes: - - imageadd: "Added a Lunan banner, flag, and flagpatch to loadout." From c25c8b6a370a8dadf66e80e5471cfa54ce1ba46d Mon Sep 17 00:00:00 2001 From: Fluffy <65877598+FluffyGhoster@users.noreply.github.com> Date: Mon, 20 Nov 2023 19:22:42 +0100 Subject: [PATCH 03/32] Last editorconfig fixup (#17782) * one * two * three * fsdsdf --- code/game/ambience.dm | 10 ++--- code/game/objects/items/trash.dm | 2 +- code/modules/background/accent/misc.dm | 2 +- code/modules/background/accent/silicon.dm | 2 +- code/modules/background/citizenship/tajara.dm | 2 +- .../origins/origins/diona/biesel.dm | 2 +- .../origins/origins/diona/coalition.dm | 2 +- .../origins/origins/diona/deep_space.dm | 2 +- .../background/origins/origins/diona/eum.dm | 2 +- .../origins/origins/diona/moghes.dm | 2 +- .../origins/origins/diona/narrows.dm | 2 +- .../origins/origins/diona/nralakk.dm | 2 +- .../background/origins/origins/diona/sol.dm | 2 +- .../origins/origins/diona/voidtamer.dm | 2 +- .../background/origins/origins/diona/xrim.dm | 2 +- .../background/origins/origins/ipc/elyra.dm | 2 +- .../origins/origins/ipc/golden_deep.dm | 2 +- .../origins/origins/ipc/megacorporate.dm | 2 +- .../origins/origins/ipc/scrapper.dm | 2 +- .../origins/origins/unknown/unknown.dm | 2 +- code/modules/background/religion/human.dm | 2 +- code/modules/background/religion/religion.dm | 2 +- code/modules/background/religion/skrell.dm | 2 +- code/modules/background/religion/tajara.dm | 2 +- .../space_sectors/generic_sectors.dm | 2 +- code/modules/battlemonsters/datum_elements.dm | 2 +- code/modules/battlemonsters/datum_traps.dm | 2 +- .../cargo/bounties/weapon_prototype.dm | 2 +- code/modules/cargo/exports/parts.dm | 2 +- code/modules/cargo/exports/tools.dm | 2 +- code/modules/cargo/random_stock/~undefs.dm | 2 +- code/modules/cciaa/cciaa_datums.dm | 2 +- code/modules/client/client_color.dm | 2 +- .../client/preference_setup/_defines.dm | 2 +- .../preference_setup/general/02_language.dm | 2 +- .../preference_setup/general/05_background.dm | 2 +- code/modules/client/preferences_toggles.dm | 2 +- code/modules/clothing/ears/earrings.dm | 2 +- code/modules/clothing/ears/xeno/tajara.dm | 2 +- code/modules/clothing/factions/goldendeep.dm | 2 +- code/modules/clothing/factions/idris.dm | 2 +- code/modules/clothing/factions/trinary.dm | 2 +- code/modules/clothing/gloves/attackby.dm | 2 +- code/modules/clothing/gloves/xeno/unathi.dm | 2 +- code/modules/clothing/head/xenos/tajara.dm | 2 +- code/modules/clothing/masks/xeno/tajara.dm | 2 +- code/modules/clothing/masks/xeno/unathi.dm | 2 +- code/modules/clothing/rings/material.dm | 2 +- code/modules/clothing/rings/xeno/tajara.dm | 2 +- code/modules/clothing/sets/acting_captain.dm | 2 +- code/modules/clothing/sets/infiltrator.dm | 2 +- .../clothing/spacesuits/rig/_defines.dm | 2 +- .../clothing/spacesuits/rig/modules/ninja.dm | 2 +- .../clothing/spacesuits/rig/modules/vision.dm | 2 +- .../clothing/spacesuits/void/alien/skrell.dm | 2 +- .../clothing/spacesuits/void/alien/tajara.dm | 2 +- code/modules/clothing/suits/hoodies.dm | 2 +- code/modules/clothing/suits/overlay.dm | 2 +- code/modules/clothing/suits/wiz_robe.dm | 2 +- code/modules/clothing/suits/xeno/unathi.dm | 2 +- .../clothing/under/accessories/necklace.dm | 2 +- .../clothing/under/accessories/shirts.dm | 2 +- .../clothing/under/accessories/xeno/tajara.dm | 2 +- .../clothing/under/accessories/xeno/vaurca.dm | 2 +- code/modules/clothing/under/xenos/vaurca.dm | 2 +- code/modules/clothing/wrists/xeno/tajara.dm | 2 +- code/modules/compass/compass_waypoint.dm | 2 +- code/modules/compass/~compass.dm | 2 +- code/modules/cooking/plasticbag.dm | 2 +- .../recipes/cultural/recipes_dionae.dm | 2 +- .../cooking/recipes/cultural/recipes_human.dm | 2 +- .../recipes/cultural/recipes_vaurca.dm | 2 +- code/modules/cooking/recipes/recipes_eggs.dm | 2 +- code/modules/cooking/recipes/recipes_fish.dm | 2 +- code/modules/cooking/recipes/recipes_grill.dm | 2 +- .../cooking/recipes/recipes_ingredients.dm | 2 +- .../cooking/recipes/recipes_noodles.dm | 2 +- code/modules/custom_ka/upgrade_chips.dm | 2 +- code/modules/effects/ion_trail_follow.dm | 2 +- .../effects/map_effects/door_helper.dm | 2 +- .../effects/map_effects/effect_emitter.dm | 2 +- .../effects/map_effects/perma_light.dm | 2 +- .../effects/map_effects/screen_shaker.dm | 2 +- .../effects/map_effects/sound_emitter.dm | 2 +- .../helper_modules/entry_exit.dm | 2 +- .../loot_modules/trash_module.dm | 2 +- .../maze_generation/maze_helper_atoms.dm | 2 +- code/modules/emotes/definitions/visible.dm | 2 +- code/modules/events/carp_migration.dm | 2 +- code/modules/events/false_alarm.dm | 2 +- code/modules/events/grid_check.dm | 2 +- code/modules/events/radiation_storm.dm | 2 +- .../events/spontaneous_appendicitis.dm | 2 +- code/modules/games/cardemon.dm | 2 +- .../ghostroles/spawner/atom/combat_robot.dm | 2 +- .../ghostroles/spawner/atom/cult_construct.dm | 2 +- .../ghostroles/spawner/atom/diona_nymph.dm | 2 +- .../ghostroles/spawner/atom/living_plant.dm | 2 +- .../ghostroles/spawner/atom/posibrain.dm | 2 +- code/modules/ghostroles/spawner/atom/shade.dm | 2 +- .../spawner/atom/technomancer_apprentice.dm | 2 +- .../spawner/human/responseteams/mercenary.dm | 2 +- .../spawner/human/responseteams/nt_ert.dm | 2 +- .../human/responseteams/response_team.dm | 2 +- .../spawner/human/responseteams/tcfl.dm | 2 +- .../spawner/simplemob/reboot_maintdrone.dm | 2 +- .../spawner/simplemob/spider_queen.dm | 2 +- code/modules/heavy_vehicle/_mech_setup.dm | 2 +- .../modules/heavy_vehicle/components/armor.dm | 2 +- code/modules/heavy_vehicle/components/arms.dm | 2 +- code/modules/heavy_vehicle/components/head.dm | 2 +- code/modules/heavy_vehicle/components/legs.dm | 2 +- .../heavy_vehicle/components/software.dm | 2 +- .../heavy_vehicle/equipment/_equipment.dm | 2 +- code/modules/heavy_vehicle/equipment/cult.dm | 2 +- code/modules/heavy_vehicle/mech_helpers.dm | 2 +- code/modules/heavy_vehicle/premade/combat.dm | 2 +- code/modules/heavy_vehicle/premade/light.dm | 2 +- .../modules/heavy_vehicle/premade/military.dm | 2 +- code/modules/heavy_vehicle/premade/misc.dm | 2 +- code/modules/heavy_vehicle/premade/pra.dm | 2 +- code/modules/holidays/halloween/props.dm | 2 +- .../hydroponics/beekeeping/bee_pack.dm | 2 +- .../hydroponics/beekeeping/honey_frame.dm | 2 +- code/modules/hydroponics/beekeeping/wax.dm | 2 +- code/modules/hydroponics/grown_inedible.dm | 2 +- .../hydroponics/seed_datums/aquaculture.dm | 2 +- .../modules/hydroponics/seed_datums/fruits.dm | 2 +- .../modules/hydroponics/seed_datums/unathi.dm | 2 +- code/modules/hydroponics/seed_mobs.dm | 2 +- .../core/special_pins/ref_pin.dm | 2 +- .../subtypes/arithmetic.dm | 2 +- .../subtypes/built_in.dm | 2 +- .../~defines/~defines.dm | 2 +- code/modules/item_worth/Value_procs/atoms.dm | 2 +- code/modules/item_worth/Value_procs/mob.dm | 2 +- code/modules/item_worth/Value_procs/obj.dm | 2 +- .../item_worth/Value_procs/obj/machinery.dm | 2 +- .../item_worth/Value_procs/obj/structures.dm | 2 +- code/modules/item_worth/_helpers.dm | 2 +- code/modules/item_worth/item_worth.dm | 2 +- code/modules/item_worth/material_weapons.dm | 2 +- code/modules/law/law.dm | 2 +- code/modules/law/laws/high_severity.dm | 2 +- code/modules/law/laws/low_severity.dm | 2 +- code/modules/maps/helper_landmarks.dm | 2 +- .../modules/maps/planet_types/lore/burzsia.dm | 2 +- code/modules/martial_arts/gunkata.dm | 2 +- code/modules/martial_arts/plasma_fist.dm | 2 +- code/modules/martial_arts/revenant.dm | 2 +- code/modules/martial_arts/tajara.dm | 2 +- code/modules/martial_arts/unathi.dm | 2 +- code/modules/materials/_material_def.dm | 2 +- code/modules/materials/~material_def.dm | 2 +- code/modules/merchant/merchant_machinery.dm | 2 +- .../mining/machine_input_output_plates.dm | 2 +- code/modules/mining/ore_datum.dm | 2 +- .../mob/abstract/freelook/ai/cameranet.dm | 2 +- .../mob/abstract/freelook/visualnet.dm | 2 +- code/modules/mob/gender.dm | 2 +- code/modules/mob/living/carbon/alien/death.dm | 2 +- .../carbon/alien/diona/diona_attacks.dm | 2 +- .../living/carbon/alien/diona/update_icons.dm | 2 +- .../mob/living/carbon/brain/brain_item.dm | 2 +- code/modules/mob/living/carbon/brain/death.dm | 2 +- code/modules/mob/living/carbon/brain/robot.dm | 2 +- .../human/species/station/tajara/tajara.dm | 2 +- .../human/species/station/unathi/unathi.dm | 16 ++++---- .../carbon/human/virtual_reality_mob.dm | 2 +- code/modules/mob/living/carbon/slime/_mood.dm | 2 +- code/modules/mob/living/carbon/slime/emote.dm | 2 +- .../mob/living/carbon/slime/helpers.dm | 2 +- code/modules/mob/living/carbon/slime/hud.dm | 2 +- .../mob/living/carbon/slime/subtypes.dm | 2 +- code/modules/mob/living/silicon/ai/death.dm | 2 +- code/modules/mob/living/silicon/pai/death.dm | 2 +- .../mob/living/silicon/robot/component.dm | 2 +- .../silicon/robot/drone/drone_abilities.dm | 2 +- .../silicon/robot/drone/drone_damage.dm | 2 +- .../modules/mob/living/silicon/robot/emote.dm | 2 +- .../living/silicon/robot/items/_helpers.dm | 2 +- .../silicon/robot/items/electric_arm.dm | 2 +- .../silicon/robot/items/form_printer.dm | 2 +- .../robot/items/guns/ballistic_cannon.dm | 2 +- .../silicon/robot/items/modules/sight.dm | 2 +- .../living/silicon/robot/items/overdrive.dm | 2 +- .../living/silicon/robot/items/robot_id.dm | 2 +- .../living/silicon/robot/items/robot_pen.dm | 2 +- .../living/silicon/robot/items/robot_tools.dm | 2 +- .../living/silicon/robot/items/robot_tray.dm | 2 +- .../robot/items/upgrades/robot_upgrades.dm | 2 +- .../mob/living/silicon/robot/photos.dm | 2 +- .../simple_animal/friendly/cosmozoan.dm | 2 +- .../mob/living/simple_animal/friendly/crab.dm | 2 +- .../living/simple_animal/friendly/tomato.dm | 2 +- .../simple_animal/hostile/cavern_geist.dm | 2 +- .../hostile/commanded/_command_defines.dm | 2 +- .../hostile/commanded/guard_dog.dm | 2 +- .../hivebots/hivebot_beacon_projectiles.dm | 2 +- .../hivebots/hivebot_harvester_projectiles.dm | 2 +- .../hostile/hivebots/hivebot_projectiles.dm | 2 +- .../mob/living/simple_animal/hostile/pra.dm | 2 +- .../living/simple_animal/hostile/russian.dm | 2 +- .../simple_animal/hostile/spider_queen.dm | 2 +- .../living/simple_animal/hostile/syndicate.dm | 2 +- .../mob/living/simple_animal/hostile/tree.dm | 2 +- .../simple_animal/mechanical/mechanical.dm | 2 +- .../modules/modular_computers/_description.dm | 2 +- .../computers/subtypes/dev_pda.dm | 2 +- .../subtypes/dev_silicon_subtypes.dm | 2 +- .../file_system/computer_file.dm | 2 +- .../modular_computers/file_system/data.dm | 2 +- .../file_system/news_article.dm | 2 +- .../file_system/programs/pai/access_lock.dm | 2 +- .../modular_computers/file_system/script.dm | 2 +- .../modular_computers/hardware/ai_slot.dm | 2 +- .../hardware/battery_module.dm | 2 +- .../modular_computers/hardware/hardware.dm | 2 +- .../hardware/nano_printer.dm | 2 +- .../hardware/network_card.dm | 2 +- .../hardware/portable_hard_drive.dm | 2 +- .../hardware/portable_hard_drive_presets.dm | 2 +- .../hardware/processor_unit.dm | 2 +- code/modules/ntsl2/guide.dm | 2 +- code/modules/organs/internal/species/diona.dm | 2 +- .../modules/organs/internal/species/unathi.dm | 2 +- code/modules/organs/robolimbs.dm | 2 +- code/modules/organs/subtypes/tajara.dm | 2 +- code/modules/organs/subtypes/techno_golem.dm | 2 +- code/modules/organs/subtypes/unbreakable.dm | 2 +- .../overmap/exoplanets/decor/objs/monolith.dm | 2 +- .../overmap/ship_weaponry/weaponry/blaster.dm | 2 +- .../overmap/ship_weaponry/weaponry/longbow.dm | 2 +- code/modules/paperwork/folders.dm | 2 +- code/modules/power/profiling.dm | 2 +- code/modules/power/tesla/coil.dm | 2 +- .../projectiles/guns/energy/freezeray.dm | 2 +- code/modules/projectiles/guns/energy/magic.dm | 2 +- .../projectiles/guns/energy/temperature.dm | 2 +- .../modules/projectiles/projectile/special.dm | 2 +- .../projectiles/targeting/targeting_client.dm | 2 +- .../projectiles/targeting/targeting_gun.dm | 2 +- .../psionics/equipment/psipower_tinker.dm | 2 +- code/modules/random_map/building/building.dm | 2 +- code/modules/random_map/mazes/maze_cell.dm | 2 +- .../Chemistry-Reagents-Core.dm | 2 +- .../reagents/dispenser/cartridge_spawn.dm | 2 +- .../modules/reagents/dispenser/coffeebeans.dm | 2 +- .../food/snacks/cultural/human.dm | 2 +- .../food/snacks/cultural/vaurca.dm | 2 +- .../reagent_containers/food/snacks/eggs.dm | 2 +- .../reagent_containers/food/snacks/noodles.dm | 2 +- .../research/designs/circuit/AI_law_boards.dm | 2 +- .../designs/circuit/hardsuit_circuits.dm | 2 +- .../designs/circuit/mecha_upgrades.dm | 2 +- .../designs/circuit/mining_circuits.dm | 2 +- .../designs/circuit/misc_electronics.dm | 2 +- .../designs/circuit/shield_designs.dm | 2 +- code/modules/research/designs/designs.dm | 2 +- .../research/designs/mechfab/hardsuit/rigs.dm | 2 +- .../designs/mechfab/prosthetics/internal.dm | 2 +- .../research/designs/mechfab/robot/robot.dm | 2 +- .../designs/mechfab/robot/robot_upgrades.dm | 2 +- .../designs/protolathe/deployable_kits.dm | 2 +- .../designs/protolathe/disk_designs.dm | 2 +- .../integrated_electronics_designs.dm | 2 +- .../designs/protolathe/mining_designs.dm | 2 +- .../designs/protolathe/modular_gun_designs.dm | 2 +- .../designs/protolathe/stock_parts_designs.dm | 2 +- code/modules/research/rd-readme.dm | 2 +- .../research/xenoarchaeology/readme.dm | 2 +- code/modules/shareddream/area.dm | 2 +- code/modules/shuttles/city.dm | 2 +- .../artifacts/armor/bone_armor.dm | 2 +- .../artifacts/items/bone_spear.dm | 2 +- .../spells/spell_list/aoe_turf.dm | 2 +- .../spells/spell_list/dumbfire.dm | 2 +- .../spell_system/spells/spell_list/equip.dm | 2 +- .../spells/spell_list/others/area/torment.dm | 2 +- .../spell_list/others/equip/party_hardy.dm | 2 +- .../spell_list/others/generic/heal_target.dm | 2 +- .../others/generic/heal_target_area.dm | 2 +- .../others/generic/heal_target_major.dm | 2 +- .../spell_list/others/generic/life_steal.dm | 2 +- .../spells/spell_list/others/generic/swap.dm | 2 +- .../spells/spell_list/projectile.dm | 2 +- .../construct_spells/construct_shell.dm | 2 +- .../conjure/construct_spells/create_altar.dm | 2 +- .../conjure/construct_spells/create_floor.dm | 2 +- .../construct_spells/create_forcewall.dm | 2 +- .../conjure/construct_spells/create_forge.dm | 2 +- .../conjure/construct_spells/create_wall.dm | 2 +- .../conjure/construct_spells/summon_pylon.dm | 2 +- .../construct_spells/summon_soulstone.dm | 2 +- .../spell_list/self/conjure/druidic_spells.dm | 2 +- .../self/conjure/morph_spells/create_nest.dm | 2 +- .../self/conjure/morph_spells/create_node.dm | 2 +- .../spell_list/self/conjure/radiant_aura.dm | 2 +- .../spells/spell_list/self/generic/mutate.dm | 2 +- .../spell_list/self/generic/shadow_shroud.dm | 2 +- .../spells/spell_list/self/generic/shift.dm | 2 +- .../spells/spell_list/shapeshift.dm | 2 +- .../spell_system/spells/spell_projectile.dm | 2 +- code/modules/submaps/submap_landmark.dm | 2 +- code/modules/surgery/_defines.dm | 2 +- code/modules/surgery/~defines.dm | 2 +- .../synthesized_instruments/echo_editor.dm | 2 +- .../synthesized_instruments/env_editor.dm | 2 +- .../synthesized_instruments/globals.dm | 2 +- .../instrument_data/fun.dm | 2 +- .../instrument_data/impossible_instruments.dm | 2 +- .../instrument_data/obsolete.dm | 2 +- .../synthesized_instruments/instruments.dm | 2 +- .../real_instruments.dm | 2 +- .../real_instruments/Guitar/guitar.dm | 2 +- .../real_instruments/Piano/piano.dm | 2 +- .../real_instruments/Trumpet/trumpet.dm | 2 +- .../real_instruments/Violin/violin.dm | 2 +- .../synthesized_instruments/song_editor.dm | 2 +- .../synthesized_instruments/usage_info.dm | 2 +- code/modules/tables/update_triggers.dm | 2 +- code/modules/tooltip/tooltip.dm | 2 +- code/modules/vehicles/animal.dm | 2 +- code/modules/vehicles/wasp_torpedo.dm | 2 +- code/modules/ventcrawl/ventcrawl_verb.dm | 2 +- .../fluffyghost-lasteditorconfigfixup.yml | 41 +++++++++++++++++++ maps/_common/areas/station/engineering.dm | 2 +- maps/_common/areas/station/hallways.dm | 2 +- .../tajara/scrapper/scrapper_areas.dm | 2 +- .../tarwa/unathi_pirate_tarwa_areas.dm | 2 +- maps/away/away_sites.dm | 2 +- maps/away/ships/casino/casino_areas.dm | 2 +- .../ships/dpra/hailstorm/hailstorm_areas.dm | 2 +- .../hegemony_corvette_areas.dm | 2 +- .../merchant_freighter_areas.dm | 2 +- .../miners_guild/miners_guild_areas.dm | 2 +- .../heph/cyclops/cyclops_mining_areas.dm | 2 +- .../nka/nka_merchant/nka_merchant_areas.dm | 2 +- .../database_freighter_areas.dm | 2 +- .../ships/pra/headmaster/headmaster_areas.dm | 2 +- .../tajara/circus/adhomian_circus_areas.dm | 2 +- maps/event/code/event.dm | 2 +- .../generic_dock/code/generic_dock_areas.dm | 2 +- maps/event/idris_cruise/code/idris_cruise.dm | 2 +- .../idris_cruise/code/idris_cruise_areas.dm | 2 +- .../asteroid/coalition_base/coalition_base.dm | 24 +++++------ 346 files changed, 408 insertions(+), 367 deletions(-) create mode 100644 html/changelogs/fluffyghost-lasteditorconfigfixup.yml diff --git a/code/game/ambience.dm b/code/game/ambience.dm index f1dda2fa713..ee309953fe1 100644 --- a/code/game/ambience.dm +++ b/code/game/ambience.dm @@ -157,11 +157,11 @@ //Defines Tension Ambience #define AMBIENCE_TENSION list(\ - 'sound/ambience/tension/tension.ogg',\ - 'sound/ambience/tension/argitoth.ogg',\ - 'sound/ambience/tension/horror.ogg',\ - 'sound/ambience/tension/burning_terror.ogg'\ - ) + 'sound/ambience/tension/tension.ogg',\ + 'sound/ambience/tension/argitoth.ogg',\ + 'sound/ambience/tension/horror.ogg',\ + 'sound/ambience/tension/burning_terror.ogg'\ + ) //CHOMP Edit Sounds for Substation rooms. Just electrical sounds, really. #define AMBIENCE_SUBSTATION list(\ 'sound/ambience/substation/substation1.ogg',\ diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index a478cd1e455..800aa818e8d 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -278,4 +278,4 @@ /obj/item/trash/shakshouka name = "empty shakshouka pan" - icon_state = "shakshouka" \ No newline at end of file + icon_state = "shakshouka" diff --git a/code/modules/background/accent/misc.dm b/code/modules/background/accent/misc.dm index 6c73284335e..a027995aa84 100644 --- a/code/modules/background/accent/misc.dm +++ b/code/modules/background/accent/misc.dm @@ -2,4 +2,4 @@ name = ACCENT_BLUESPACE description = "A peculiar accent. It seems familiar and unknown at the same time. It provokes the same feeling as having a word at the tip of your tongue." tag_icon = "bluespace" - text_tag = "BLS" \ No newline at end of file + text_tag = "BLS" diff --git a/code/modules/background/accent/silicon.dm b/code/modules/background/accent/silicon.dm index 894f7c0d4d2..5b5c0d3d0f4 100644 --- a/code/modules/background/accent/silicon.dm +++ b/code/modules/background/accent/silicon.dm @@ -2,4 +2,4 @@ name = ACCENT_TTS description = "A barebones text-to-speech accent. This is usually used to de-humanize or to cut speech synthesizer costs in silicon based machines." tag_icon = "tts" - text_tag = "TTS" \ No newline at end of file + text_tag = "TTS" diff --git a/code/modules/background/citizenship/tajara.dm b/code/modules/background/citizenship/tajara.dm index 112382a07f0..024556cff3a 100644 --- a/code/modules/background/citizenship/tajara.dm +++ b/code/modules/background/citizenship/tajara.dm @@ -175,4 +175,4 @@ job_species_blacklist = list( "Consular Officer" = ALL_SPECIES - ) \ No newline at end of file + ) diff --git a/code/modules/background/origins/origins/diona/biesel.dm b/code/modules/background/origins/origins/diona/biesel.dm index 0c22d5c71a9..fff1d3785db 100644 --- a/code/modules/background/origins/origins/diona/biesel.dm +++ b/code/modules/background/origins/origins/diona/biesel.dm @@ -38,4 +38,4 @@ important_information = "While Dionae do still face some discrimination in the Republic, Dionae can expect to live a fairly comfortable life. The Republic itself does not apply any sort of \"debt\" to Dionae they uplift, however, a megacorp may rope them into a contract to work for them if they played any part in uplifting them." possible_accents = list(ACCENT_ROOTSONG, ACCENT_VOIDSONG, ACCENT_IRONSONG) possible_citizenships = list(CITIZENSHIP_BIESEL, CITIZENSHIP_NRALAKK, CITIZENSHIP_EUM, CITIZENSHIP_COALITION) - possible_religions = list(RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_ETERNAL_IRON, RELIGION_OTHER, RELIGION_NONE) \ No newline at end of file + possible_religions = list(RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_ETERNAL_IRON, RELIGION_OTHER, RELIGION_NONE) diff --git a/code/modules/background/origins/origins/diona/coalition.dm b/code/modules/background/origins/origins/diona/coalition.dm index 337b5fe548c..1284b0459ea 100644 --- a/code/modules/background/origins/origins/diona/coalition.dm +++ b/code/modules/background/origins/origins/diona/coalition.dm @@ -19,4 +19,4 @@ important_information = "Wild Dionae tend to have a much harder time within CoC borders as they're generally hunted for minerals stored within them, although in more recent decades this practice has begun to die down, with more and more wild Dionae being integrated into the CoC. Policies on uplifting and integrating Dionae within the CoC vary greatly from system to system as there are no set federal laws detailing how to handle them." possible_accents = list(ACCENT_ROOTSONG, ACCENT_VOIDSONG, ACCENT_IRONSONG, ACCENT_CRIMSONSONG) possible_citizenships = list(CITIZENSHIP_COALITION, CITIZENSHIP_NRALAKK, CITIZENSHIP_EUM, CITIZENSHIP_BIESEL) - possible_religions = list(RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_ETERNAL_IRON, RELIGION_OTHER, RELIGION_NONE) \ No newline at end of file + possible_religions = list(RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_ETERNAL_IRON, RELIGION_OTHER, RELIGION_NONE) diff --git a/code/modules/background/origins/origins/diona/deep_space.dm b/code/modules/background/origins/origins/diona/deep_space.dm index 8e7e9df32a8..3dee5333312 100644 --- a/code/modules/background/origins/origins/diona/deep_space.dm +++ b/code/modules/background/origins/origins/diona/deep_space.dm @@ -10,4 +10,4 @@ desc = "Dionae who were originally considered wild Dionae before being uplifted and integrated somewhere in Deep Space, outside the borders of any major nations." possible_accents = list(ACCENT_ROOTSONG, ACCENT_VOIDSONG, ACCENT_IRONSONG, ACCENT_CRIMSONSONG) possible_citizenships = list(CITIZENSHIP_BIESEL, CITIZENSHIP_NRALAKK, CITIZENSHIP_EUM, CITIZENSHIP_COALITION) - possible_religions = list(RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_ETERNAL_IRON, RELIGION_OTHER, RELIGION_NONE) \ No newline at end of file + possible_religions = list(RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_ETERNAL_IRON, RELIGION_OTHER, RELIGION_NONE) diff --git a/code/modules/background/origins/origins/diona/eum.dm b/code/modules/background/origins/origins/diona/eum.dm index ab4c6db71d1..f55f56dea32 100644 --- a/code/modules/background/origins/origins/diona/eum.dm +++ b/code/modules/background/origins/origins/diona/eum.dm @@ -53,4 +53,4 @@ name = "Minor City State" desc = "From a minor city-state under the CT-EUM. " important_information = "This is for player-created citystates in the CT-EUM, just keep it reasponable." - possible_accents = list(ACCENT_ANCIENTSONG, ACCENT_WAVESONG, ACCENT_SUNKENSONG, ACCENT_STARSONG) \ No newline at end of file + possible_accents = list(ACCENT_ANCIENTSONG, ACCENT_WAVESONG, ACCENT_SUNKENSONG, ACCENT_STARSONG) diff --git a/code/modules/background/origins/origins/diona/moghes.dm b/code/modules/background/origins/origins/diona/moghes.dm index 022bc8b512c..0f599a24b64 100644 --- a/code/modules/background/origins/origins/diona/moghes.dm +++ b/code/modules/background/origins/origins/diona/moghes.dm @@ -11,4 +11,4 @@ important_information = "This option is for both Dionae who were originally grown in the Wastes and Wild Dionae who somehow managed to find their way to Moghes and the Wastes." possible_accents = list(ACCENT_IRONSONG, ACCENT_CRIMSONSONG, ACCENT_SANDSONG, ACCENT_WASTESONG) possible_citizenships = list(CITIZENSHIP_IZWESKI, CITIZENSHIP_BIESEL, CITIZENSHIP_COALITION) - possible_religions = list(RELIGION_THAKH, RELIGION_SKAKH, RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_ETERNAL_IRON, RELIGION_OTHER) \ No newline at end of file + possible_religions = list(RELIGION_THAKH, RELIGION_SKAKH, RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_ETERNAL_IRON, RELIGION_OTHER) diff --git a/code/modules/background/origins/origins/diona/narrows.dm b/code/modules/background/origins/origins/diona/narrows.dm index 9822345e53a..3c6cc5656a2 100644 --- a/code/modules/background/origins/origins/diona/narrows.dm +++ b/code/modules/background/origins/origins/diona/narrows.dm @@ -29,4 +29,4 @@ important_information = "The level of training members of the C-Block have in their positions can vary from Dionae to Dionae, with some being only partially trained while others have had plenty of training and experience from their time aboard the ship. While most Dionae who leave the ship will oftentimes be employed by Hephaestus due to agreements between the megacorp and the ship, some do find employment elsewhere in the other megacorps." possible_accents = list(ACCENT_ROOTSONG, ACCENT_VOIDSONG, ACCENT_IRONSONG) possible_citizenships = list(CITIZENSHIP_NRALAKK, CITIZENSHIP_EUM, CITIZENSHIP_BIESEL, CITIZENSHIP_COALITION) - possible_religions = list(RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_ETERNAL_IRON, RELIGION_OTHER, RELIGION_NONE) \ No newline at end of file + possible_religions = list(RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_ETERNAL_IRON, RELIGION_OTHER, RELIGION_NONE) diff --git a/code/modules/background/origins/origins/diona/nralakk.dm b/code/modules/background/origins/origins/diona/nralakk.dm index 1a9973002b2..a33796068d3 100644 --- a/code/modules/background/origins/origins/diona/nralakk.dm +++ b/code/modules/background/origins/origins/diona/nralakk.dm @@ -20,4 +20,4 @@ important_information = "The Nralakk Federation actively attempts to uplift and integrate all Dionae they find within their borders, thus resulting in a fairly large population of formerly wild Dionae within the Federation. It is important to note that this option does not include Dionae who originally were from EUM or Xrim before they were discovered." possible_accents = list(ACCENT_ROOTSONG, ACCENT_VOIDSONG, ACCENT_IRONSONG, ACCENT_SUNKENSONG, ACCENT_STARSONG) possible_citizenships = list(CITIZENSHIP_NRALAKK, CITIZENSHIP_EUM, CITIZENSHIP_BIESEL, CITIZENSHIP_COALITION) - possible_religions = list(RELIGION_QEBLAK, RELIGION_WEISHII, RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_ETERNAL_IRON, RELIGION_OTHER, RELIGION_NONE) \ No newline at end of file + possible_religions = list(RELIGION_QEBLAK, RELIGION_WEISHII, RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_ETERNAL_IRON, RELIGION_OTHER, RELIGION_NONE) diff --git a/code/modules/background/origins/origins/diona/sol.dm b/code/modules/background/origins/origins/diona/sol.dm index fe6bc5f46eb..0fb6468619f 100644 --- a/code/modules/background/origins/origins/diona/sol.dm +++ b/code/modules/background/origins/origins/diona/sol.dm @@ -28,4 +28,4 @@ desc = "Largerly hailing from the city of Fallowed Meadows, The Primitive Sirens are a group of Dionae who, upon the completion of their Solarian debt, settled on Mictlan, managing to assimilate into Mictlan society." possible_accents = list(ACCENT_MEADOWSONG) possible_citizenships = list(CITIZENSHIP_SOL, CITIZENSHIP_BIESEL, CITIZENSHIP_NRALAKK, CITIZENSHIP_EUM, CITIZENSHIP_COALITION) - possible_religions = list(RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_OTHER, RELIGION_NONE) \ No newline at end of file + possible_religions = list(RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_OTHER, RELIGION_NONE) diff --git a/code/modules/background/origins/origins/diona/voidtamer.dm b/code/modules/background/origins/origins/diona/voidtamer.dm index ff1da9cbb99..2f690f47c32 100644 --- a/code/modules/background/origins/origins/diona/voidtamer.dm +++ b/code/modules/background/origins/origins/diona/voidtamer.dm @@ -36,4 +36,4 @@ desc = "One of two competing voidtamer clans found operating near Moghes. Due to their history interacting Unathi, both clans tend to be fairly influenced by Unathi culture and religion, although do still a distinct identity from one another." possible_accents = list(ACCENT_ROOTSONG, ACCENT_VOIDSONG, ACCENT_IRONSONG, ACCENT_CRIMSONSONG, ACCENT_SANDSONG, ACCENT_WASTESONG) possible_citizenships = list(CITIZENSHIP_IZWESKI, CITIZENSHIP_BIESEL, CITIZENSHIP_COALITION) - possible_religions = list(RELIGION_THAKH, RELIGION_SKAKH, RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_ETERNAL_IRON, RELIGION_OTHER) \ No newline at end of file + possible_religions = list(RELIGION_THAKH, RELIGION_SKAKH, RELIGION_ETERNAL, RELIGION_ETERNAL_ICHOR, RELIGION_ETERNAL_IRON, RELIGION_OTHER) diff --git a/code/modules/background/origins/origins/diona/xrim.dm b/code/modules/background/origins/origins/diona/xrim.dm index 14ff10b6ab8..e3fb1120564 100644 --- a/code/modules/background/origins/origins/diona/xrim.dm +++ b/code/modules/background/origins/origins/diona/xrim.dm @@ -30,4 +30,4 @@ important_information = "While most megacorporations may hire the Scorned, they are restricted from holding positions in Command, as well as Machinist, due to concerns they may attempt to subvert, illegally free or create more synthetics. Zeng-Hu is the only megacorporation that does not wish to see the Scorned within its personnel ranks due to its close ties with the Nralakk Federation. Though it is possible to lie about one's true allegiances, there are consequences should it be discovered." possible_accents = list(ACCENT_XRIMSONG) possible_citizenships = list(CITIZENSHIP_EUM, CITIZENSHIP_BIESEL, CITIZENSHIP_COALITION) - possible_religions = list(RELIGION_ETERNAL_IRON) \ No newline at end of file + possible_religions = list(RELIGION_ETERNAL_IRON) diff --git a/code/modules/background/origins/origins/ipc/elyra.dm b/code/modules/background/origins/origins/ipc/elyra.dm index af84116be85..fec3c2e6c35 100644 --- a/code/modules/background/origins/origins/ipc/elyra.dm +++ b/code/modules/background/origins/origins/ipc/elyra.dm @@ -11,4 +11,4 @@ important_information = "All IPC in Elyra are produced within the Republic, foreign IPC being mistrusted and oftentimes prohibited from entry, let alone citizenship and residency. All Elyran manufactured IPC are expected to have at least a basic knowledge of the cultural norms of Elyra and tenets of Islam." possible_accents = list(ACCENT_ELYRA, ACCENT_AEMAQ, ACCENT_MEDINA, ACCENT_DAMASCUS, ACCENT_NEWSUEZ, ACCENT_PERSEPOLIS, ACCENT_TTS) possible_citizenships = list(CITIZENSHIP_ELYRA, CITIZENSHIP_BIESEL, CITIZENSHIP_COALITION, CITIZENSHIP_NONE) - possible_religions = list(RELIGION_ISLAM, RELIGION_TRINARY, RELIGION_NONE) \ No newline at end of file + possible_religions = list(RELIGION_ISLAM, RELIGION_TRINARY, RELIGION_NONE) diff --git a/code/modules/background/origins/origins/ipc/golden_deep.dm b/code/modules/background/origins/origins/ipc/golden_deep.dm index eafe4c2e0d0..b338a8fff4b 100644 --- a/code/modules/background/origins/origins/ipc/golden_deep.dm +++ b/code/modules/background/origins/origins/ipc/golden_deep.dm @@ -11,4 +11,4 @@ important_information = "Golden Deep citizenship exists to denote an IPC as a member of the organisation, but it can still be noted in records that the IPC holds a normal citizenship (for instance, an IPC may be a citizen of Biesel and a member of Golden Deep.)" possible_accents = ACCENTS_ALL_IPC possible_citizenships = list(CITIZENSHIP_GOLDEN) - possible_religions = list(RELIGION_NONE) \ No newline at end of file + possible_religions = list(RELIGION_NONE) diff --git a/code/modules/background/origins/origins/ipc/megacorporate.dm b/code/modules/background/origins/origins/ipc/megacorporate.dm index 8241054db09..0f666b28949 100644 --- a/code/modules/background/origins/origins/ipc/megacorporate.dm +++ b/code/modules/background/origins/origins/ipc/megacorporate.dm @@ -45,4 +45,4 @@ desc = "Nanotrasen, in keeping close ties with the Biesellite government, quietly and eagerly accepted IPCs into its workforce while carefully manipulating the books to ensure that very few would ever attain freedom. IPCs are a common but not ubiquitous sight on NanoTrasen installations and can be found working any number of roles. Although the company's treatment of IPCs is styled after Biesel's own attitude towards synthetics, it can vary wildly depending on where a positronic works and who exactly it works under." possible_accents = list(ACCENT_CETI, ACCENT_XANU, ACCENT_COC, ACCENT_ERIDANI, ACCENT_SOL, ACCENT_SCARAB, ACCENT_SILVERSUN_EXPATRIATE, ACCENT_SILVERSUN_ORIGINAL, ACCENT_PHONG, ACCENT_MARTIAN, ACCENT_KONYAN, ACCENT_LUNA, ACCENT_GIBSON_OVAN, ACCENT_GIBSON_UNDIR, ACCENT_VYSOKA, ACCENT_VENUS, ACCENT_VENUSJIN, ACCENT_JUPITER, ACCENT_CALLISTO, ACCENT_EUROPA, ACCENT_EARTH, ACCENT_NCF, ACCENT_VISEGRAD, ACCENT_VALKYRIE, ACCENT_MICTLAN, ACCENT_ANTILLIA, ACCENT_TTS) possible_citizenships = list(CITIZENSHIP_NONE) - possible_religions = list(RELIGION_NONE) \ No newline at end of file + possible_religions = list(RELIGION_NONE) diff --git a/code/modules/background/origins/origins/ipc/scrapper.dm b/code/modules/background/origins/origins/ipc/scrapper.dm index 18205c6bf57..fb9090009cb 100644 --- a/code/modules/background/origins/origins/ipc/scrapper.dm +++ b/code/modules/background/origins/origins/ipc/scrapper.dm @@ -11,4 +11,4 @@ important_information = "Scrapper IPC tend to have a mix of different brand limbs." possible_accents = ACCENTS_ALL_IPC possible_citizenships = list(CITIZENSHIP_BIESEL, CITIZENSHIP_COALITION, CITIZENSHIP_NONE) - possible_religions = RELIGIONS_ALL_IPC \ No newline at end of file + possible_religions = RELIGIONS_ALL_IPC diff --git a/code/modules/background/origins/origins/unknown/unknown.dm b/code/modules/background/origins/origins/unknown/unknown.dm index 2cb125e2d96..a0a941ebc8f 100644 --- a/code/modules/background/origins/origins/unknown/unknown.dm +++ b/code/modules/background/origins/origins/unknown/unknown.dm @@ -24,4 +24,4 @@ desc = "You're a Golem." possible_accents = list(ACCENT_BLUESPACE) possible_citizenships = list(CITIZENSHIP_NONE) - possible_religions = list(RELIGION_NONE) \ No newline at end of file + possible_religions = list(RELIGION_NONE) diff --git a/code/modules/background/religion/human.dm b/code/modules/background/religion/human.dm index 669c8ab714f..1b6d9ef19bb 100644 --- a/code/modules/background/religion/human.dm +++ b/code/modules/background/religion/human.dm @@ -93,4 +93,4 @@ description = "Vysokan shamanism, or Stolitism, originated from the diverse series of beliefs and traditions of Vysoka’s original colonists. Because of this, \ Stolitism is closely tied with local folklore and the planet as a whole - the majority of Vysokans are believers, but it has spread little elsewhere.\ Vysokan shamanism revolves around both the worship of one’s ancestors, who are believed to have all descended from a “Progenitor Spirit” that became \ - the first man. After dying, the Progenitor’s soul, or Arihuin, was “sown” and split into new souls." \ No newline at end of file + the first man. After dying, the Progenitor’s soul, or Arihuin, was “sown” and split into new souls." diff --git a/code/modules/background/religion/religion.dm b/code/modules/background/religion/religion.dm index 2fe60040863..ab3cfb98b70 100644 --- a/code/modules/background/religion/religion.dm +++ b/code/modules/background/religion/religion.dm @@ -5,4 +5,4 @@ var/book_sprite = "holybook" /datum/religion/proc/get_records_name() - return name \ No newline at end of file + return name diff --git a/code/modules/background/religion/skrell.dm b/code/modules/background/religion/skrell.dm index 94fca5b3a58..908e69985ca 100644 --- a/code/modules/background/religion/skrell.dm +++ b/code/modules/background/religion/skrell.dm @@ -34,4 +34,4 @@ After the fall of Glorsh-Omega, this belief has seen significant traction amongst both foreign Skrell and domestic, as many Skrell are now wary about the threat of a collective \ entity, whether that be artificial or biological. This belief system enforces the Ya'Qu, or 'the right to live', a saying that is similar to the human 'live in the moment'. As \ such, the Skrell following the Kir'gul belief system often are explorers, artists, or other such creators, and reject authority in favor of individuality." - book_name = "book of Ya'Qu" \ No newline at end of file + book_name = "book of Ya'Qu" diff --git a/code/modules/background/religion/tajara.dm b/code/modules/background/religion/tajara.dm index 8db83b28a2a..1f8454322b4 100644 --- a/code/modules/background/religion/tajara.dm +++ b/code/modules/background/religion/tajara.dm @@ -23,4 +23,4 @@ book_name = "ma'ta'ke legends" /datum/religion/raskara/get_records_name() - return RELIGION_MATAKE \ No newline at end of file + return RELIGION_MATAKE diff --git a/code/modules/background/space_sectors/generic_sectors.dm b/code/modules/background/space_sectors/generic_sectors.dm index 707fcb5e923..89f220352dc 100644 --- a/code/modules/background/space_sectors/generic_sectors.dm +++ b/code/modules/background/space_sectors/generic_sectors.dm @@ -11,4 +11,4 @@ description = "A corporate-owned open space star nursery. The stellar climate here is unbelievably chaotic, leading to some of the most fabulous views one can see in all the galaxy. \ The study of these cosmic fields is a lucrative one, as one can see the very moments stars and their systems are born and die here. The wonders outside each viewport are truly humbling." skybox_icon = "star_nursery" - starlight_color = COLOR_WHITE \ No newline at end of file + starlight_color = COLOR_WHITE diff --git a/code/modules/battlemonsters/datum_elements.dm b/code/modules/battlemonsters/datum_elements.dm index b281a78a8a5..ee7af142bce 100644 --- a/code/modules/battlemonsters/datum_elements.dm +++ b/code/modules/battlemonsters/datum_elements.dm @@ -489,4 +489,4 @@ special_effects = "Holy Barrier: As long as %NAME is in play, all monsters and players are immune to dark element spells, traps, and special effects." rarity = BATTLE_MONSTERS_RARITY_RARE rarity_score = 1 - power_add = BATTLE_MONSTERS_POWER_UPGRADE * 2 \ No newline at end of file + power_add = BATTLE_MONSTERS_POWER_UPGRADE * 2 diff --git a/code/modules/battlemonsters/datum_traps.dm b/code/modules/battlemonsters/datum_traps.dm index 29108c2dd53..887b5eeec1a 100644 --- a/code/modules/battlemonsters/datum_traps.dm +++ b/code/modules/battlemonsters/datum_traps.dm @@ -59,4 +59,4 @@ rarity = 1 description = "a banana peel, and an unsuspecting foot about to step on it." special_effects = "TRIGGER: When revealed. Single use.
    EFFECT: If the opponent draws a card, it is sent to the graveyard." - rarity_score = 1 \ No newline at end of file + rarity_score = 1 diff --git a/code/modules/cargo/bounties/weapon_prototype.dm b/code/modules/cargo/bounties/weapon_prototype.dm index dc3f087cf8d..b4da4c08478 100644 --- a/code/modules/cargo/bounties/weapon_prototype.dm +++ b/code/modules/cargo/bounties/weapon_prototype.dm @@ -71,4 +71,4 @@ stat_comparison = "greater than" /datum/bounty/weapon_prototype/reliability/accepts_weapon(var/obj/item/gun/energy/laser/prototype/P) - return P.accuracy > stat_value \ No newline at end of file + return P.accuracy > stat_value diff --git a/code/modules/cargo/exports/parts.dm b/code/modules/cargo/exports/parts.dm index a312450f658..2418a6ecc17 100644 --- a/code/modules/cargo/exports/parts.dm +++ b/code/modules/cargo/exports/parts.dm @@ -20,4 +20,4 @@ cost = 2000 unit_name = "deactivated alien deconstruction drone" export_types = list(/obj/item/deactivated_swarmer) -*/ \ No newline at end of file +*/ diff --git a/code/modules/cargo/exports/tools.dm b/code/modules/cargo/exports/tools.dm index 704253b10f4..63426a59b81 100644 --- a/code/modules/cargo/exports/tools.dm +++ b/code/modules/cargo/exports/tools.dm @@ -98,4 +98,4 @@ /datum/export/rfd_ammo cost = 60 unit_name = "compressed matter cartridge" - export_types = list(/obj/item/rfd_ammo) \ No newline at end of file + export_types = list(/obj/item/rfd_ammo) diff --git a/code/modules/cargo/random_stock/~undefs.dm b/code/modules/cargo/random_stock/~undefs.dm index 6c81c7c7555..3f3c8d4578e 100644 --- a/code/modules/cargo/random_stock/~undefs.dm +++ b/code/modules/cargo/random_stock/~undefs.dm @@ -1,4 +1,4 @@ #undef STOCK_ITEM_COMMON #undef STOCK_ITEM_UNCOMMON #undef STOCK_ITEM_RARE -#undef STOCK_ITEM_LARGE \ No newline at end of file +#undef STOCK_ITEM_LARGE diff --git a/code/modules/cciaa/cciaa_datums.dm b/code/modules/cciaa/cciaa_datums.dm index b4a33249994..bfdafadb068 100644 --- a/code/modules/cciaa/cciaa_datums.dm +++ b/code/modules/cciaa/cciaa_datums.dm @@ -14,4 +14,4 @@ src.public_topic = public_topic src.internal_topic = internal_topic src.game_id = game_id - src.status = status \ No newline at end of file + src.status = status diff --git a/code/modules/client/client_color.dm b/code/modules/client/client_color.dm index 1c992de6760..0d077ecd623 100644 --- a/code/modules/client/client_color.dm +++ b/code/modules/client/client_color.dm @@ -117,4 +117,4 @@ override = TRUE //Because multiplying this will inevitably fail /datum/client_color/oversaturated/New() - client_color = color_saturation(40) \ No newline at end of file + client_color = color_saturation(40) diff --git a/code/modules/client/preference_setup/_defines.dm b/code/modules/client/preference_setup/_defines.dm index 424aa1dacb8..0c4dbb60042 100644 --- a/code/modules/client/preference_setup/_defines.dm +++ b/code/modules/client/preference_setup/_defines.dm @@ -1,3 +1,3 @@ #define EQUIP_PREVIEW_LOADOUT 1 #define EQUIP_PREVIEW_JOB 2 -#define EQUIP_PREVIEW_ALL (EQUIP_PREVIEW_LOADOUT|EQUIP_PREVIEW_JOB) \ No newline at end of file +#define EQUIP_PREVIEW_ALL (EQUIP_PREVIEW_LOADOUT|EQUIP_PREVIEW_JOB) diff --git a/code/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm index 62e13114add..d71dab4f377 100644 --- a/code/modules/client/preference_setup/general/02_language.dm +++ b/code/modules/client/preference_setup/general/02_language.dm @@ -143,4 +143,4 @@ if(isnull(pref.autohiss_setting)) pref.autohiss_setting = AUTOHISS_OFF return TOPIC_REFRESH - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/client/preference_setup/general/05_background.dm b/code/modules/client/preference_setup/general/05_background.dm index 8335b3d08d7..2f18a92bdc7 100644 --- a/code/modules/client/preference_setup/general/05_background.dm +++ b/code/modules/client/preference_setup/general/05_background.dm @@ -97,4 +97,4 @@ return TOPIC_REFRESH - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index da319f6172e..23d9bdf7d1c 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -163,4 +163,4 @@ prefs.toggles_secondary ^= FLOATING_MESSAGES prefs.save_preferences() - to_chat(src, SPAN_NOTICE("Floating messages are now [prefs.toggles_secondary & FLOATING_MESSAGES ? "enabled" : "disabled"].")) \ No newline at end of file + to_chat(src, SPAN_NOTICE("Floating messages are now [prefs.toggles_secondary & FLOATING_MESSAGES ? "enabled" : "disabled"].")) diff --git a/code/modules/clothing/ears/earrings.dm b/code/modules/clothing/ears/earrings.dm index a242a5a57dc..aac81775e0a 100644 --- a/code/modules/clothing/ears/earrings.dm +++ b/code/modules/clothing/ears/earrings.dm @@ -28,4 +28,4 @@ name = "overweight earrings" desc = "A pair of dazzling, painfully large earrings." icon_state = "heavy" - item_state = "heavy" \ No newline at end of file + item_state = "heavy" diff --git a/code/modules/clothing/ears/xeno/tajara.dm b/code/modules/clothing/ears/xeno/tajara.dm index 4354f410f0f..44062da3702 100644 --- a/code/modules/clothing/ears/xeno/tajara.dm +++ b/code/modules/clothing/ears/xeno/tajara.dm @@ -10,4 +10,4 @@ name = "adhomian golden earrings" desc = "A pair of adhomian golden earrings." icon_state = "ring_gold" - item_state = "ring_gold" \ No newline at end of file + item_state = "ring_gold" diff --git a/code/modules/clothing/factions/goldendeep.dm b/code/modules/clothing/factions/goldendeep.dm index 99be36c4ad2..aa08b5cd955 100644 --- a/code/modules/clothing/factions/goldendeep.dm +++ b/code/modules/clothing/factions/goldendeep.dm @@ -54,4 +54,4 @@ icon_state = "goldendeep_skirtsuit" item_state = "goldendeep_skirtsuit" icon = 'icons/clothing/under/uniforms/goldendeep_skirtsuit.dmi' - contained_sprite = TRUE \ No newline at end of file + contained_sprite = TRUE diff --git a/code/modules/clothing/factions/idris.dm b/code/modules/clothing/factions/idris.dm index 9029ad5731e..44a47b8e085 100644 --- a/code/modules/clothing/factions/idris.dm +++ b/code/modules/clothing/factions/idris.dm @@ -97,4 +97,4 @@ icon = 'icons/clothing/suits/coats/idris_windbreaker.dmi' icon_state = "idris_windbreaker" item_state = "idris_windbreaker" - contained_sprite = TRUE \ No newline at end of file + contained_sprite = TRUE diff --git a/code/modules/clothing/factions/trinary.dm b/code/modules/clothing/factions/trinary.dm index 87eeef20193..2e95496ea5e 100644 --- a/code/modules/clothing/factions/trinary.dm +++ b/code/modules/clothing/factions/trinary.dm @@ -21,4 +21,4 @@ icon = 'icons/clothing/head/trinary_coif.dmi' icon_state = "trinary_coif" item_state = "trinary_coif" - contained_sprite = TRUE \ No newline at end of file + contained_sprite = TRUE diff --git a/code/modules/clothing/gloves/attackby.dm b/code/modules/clothing/gloves/attackby.dm index aefbb0475a2..214616bd581 100644 --- a/code/modules/clothing/gloves/attackby.dm +++ b/code/modules/clothing/gloves/attackby.dm @@ -3,4 +3,4 @@ var/siemens_percentage = 100 * siemens_coefficient to_chat(user, SPAN_NOTICE("You probe \the [src] with \the [W]. The gloves will let [siemens_percentage]% of an electric shock through.")) return - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/clothing/gloves/xeno/unathi.dm b/code/modules/clothing/gloves/xeno/unathi.dm index 73010559ca7..3c7ba7f2ce1 100644 --- a/code/modules/clothing/gloves/xeno/unathi.dm +++ b/code/modules/clothing/gloves/xeno/unathi.dm @@ -8,4 +8,4 @@ species_restricted = null slot_flags = SLOT_GLOVES|SLOT_WRISTS drop_sound = 'sound/items/drop/cloth.ogg' - pickup_sound = 'sound/items/pickup/cloth.ogg' \ No newline at end of file + pickup_sound = 'sound/items/pickup/cloth.ogg' diff --git a/code/modules/clothing/head/xenos/tajara.dm b/code/modules/clothing/head/xenos/tajara.dm index 46d6a6cb689..97217810d0a 100644 --- a/code/modules/clothing/head/xenos/tajara.dm +++ b/code/modules/clothing/head/xenos/tajara.dm @@ -245,4 +245,4 @@ quickly, usually through night raids and abductions conducted with aid of black unmarked cars. Tajara residing in other systems are not truly safe from the Intelligence Service, as they are \ known to deploy their agents against off-world targets. Republican spies, enforces and collaborators are present in Mendell City's district six, carrying out orders or watching their fellow Tajara." icon_state = "psis_hat" - item_state = "psis_hat" \ No newline at end of file + item_state = "psis_hat" diff --git a/code/modules/clothing/masks/xeno/tajara.dm b/code/modules/clothing/masks/xeno/tajara.dm index a5662104282..1f13c50e8e5 100644 --- a/code/modules/clothing/masks/xeno/tajara.dm +++ b/code/modules/clothing/masks/xeno/tajara.dm @@ -8,4 +8,4 @@ body_parts_covered = FACE item_flags = FLEXIBLEMATERIAL flags_inv = HIDEFACE - sprite_sheets = null \ No newline at end of file + sprite_sheets = null diff --git a/code/modules/clothing/masks/xeno/unathi.dm b/code/modules/clothing/masks/xeno/unathi.dm index 38f1d5c4f03..402917187ba 100644 --- a/code/modules/clothing/masks/xeno/unathi.dm +++ b/code/modules/clothing/masks/xeno/unathi.dm @@ -8,4 +8,4 @@ item_state = "thakh_mask" sprite_sheets = null species_restricted = list(BODYTYPE_UNATHI) - contained_sprite = TRUE \ No newline at end of file + contained_sprite = TRUE diff --git a/code/modules/clothing/rings/material.dm b/code/modules/clothing/rings/material.dm index 444bf9d6bdb..2903a159996 100644 --- a/code/modules/clothing/rings/material.dm +++ b/code/modules/clothing/rings/material.dm @@ -49,4 +49,4 @@ . = ..(mapload, MATERIAL_GLASS) /obj/item/clothing/ring/material/uranium/Initialize(var/mapload) - . = ..(mapload, MATERIAL_URANIUM) \ No newline at end of file + . = ..(mapload, MATERIAL_URANIUM) diff --git a/code/modules/clothing/rings/xeno/tajara.dm b/code/modules/clothing/rings/xeno/tajara.dm index 8d2bbb6a031..0d238ecc909 100644 --- a/code/modules/clothing/rings/xeno/tajara.dm +++ b/code/modules/clothing/rings/xeno/tajara.dm @@ -2,4 +2,4 @@ name = "adhomian costume ring" desc = "A cheap, popular metal ring commonly used by female Tajara." icon = 'icons/obj/tajara_items.dmi' - icon_state = "tajara_ring" \ No newline at end of file + icon_state = "tajara_ring" diff --git a/code/modules/clothing/sets/acting_captain.dm b/code/modules/clothing/sets/acting_captain.dm index d44bf0c0f9e..1228fdf8db7 100644 --- a/code/modules/clothing/sets/acting_captain.dm +++ b/code/modules/clothing/sets/acting_captain.dm @@ -31,4 +31,4 @@ /obj/item/clothing/suit/acapjacket = 1, /obj/item/clothing/accessory/armband/acap = 1, /obj/item/device/radio/headset/heads/captain = 1 - ) \ No newline at end of file + ) diff --git a/code/modules/clothing/sets/infiltrator.dm b/code/modules/clothing/sets/infiltrator.dm index 8a37caad2a5..632764cb9bd 100644 --- a/code/modules/clothing/sets/infiltrator.dm +++ b/code/modules/clothing/sets/infiltrator.dm @@ -72,4 +72,4 @@ /obj/item/clothing/under/infiltrator = 1, /obj/item/clothing/gloves/infiltrator = 1, /obj/item/clothing/shoes/infiltrator = 1 - ) \ No newline at end of file + ) diff --git a/code/modules/clothing/spacesuits/rig/_defines.dm b/code/modules/clothing/spacesuits/rig/_defines.dm index e164269267f..e197f715a51 100644 --- a/code/modules/clothing/spacesuits/rig/_defines.dm +++ b/code/modules/clothing/spacesuits/rig/_defines.dm @@ -4,4 +4,4 @@ #define MODULE_UTILITY 8 #define MODULE_MEDICAL 16 #define MODULE_SPECIAL 32 -#define MODULE_VAURCA 64 \ No newline at end of file +#define MODULE_VAURCA 64 diff --git a/code/modules/clothing/spacesuits/rig/modules/ninja.dm b/code/modules/clothing/spacesuits/rig/modules/ninja.dm index 30768b4f4b7..24a93d91aeb 100644 --- a/code/modules/clothing/spacesuits/rig/modules/ninja.dm +++ b/code/modules/clothing/spacesuits/rig/modules/ninja.dm @@ -381,4 +381,4 @@ return for(var/obj/item/device/multitool/hacktool/rig/hacktool in M.contents) - qdel(hacktool) \ No newline at end of file + qdel(hacktool) diff --git a/code/modules/clothing/spacesuits/rig/modules/vision.dm b/code/modules/clothing/spacesuits/rig/modules/vision.dm index 92b07751a3e..018428d6f60 100644 --- a/code/modules/clothing/spacesuits/rig/modules/vision.dm +++ b/code/modules/clothing/spacesuits/rig/modules/vision.dm @@ -215,4 +215,4 @@ if(!vision) vision = vision_datum processed_vision += vision_datum - vision_modes = processed_vision \ No newline at end of file + vision_modes = processed_vision diff --git a/code/modules/clothing/spacesuits/void/alien/skrell.dm b/code/modules/clothing/spacesuits/void/alien/skrell.dm index fb0c59dc32e..37b523b0e0a 100644 --- a/code/modules/clothing/spacesuits/void/alien/skrell.dm +++ b/code/modules/clothing/spacesuits/void/alien/skrell.dm @@ -118,4 +118,4 @@ name = "qukala engineer voidsuit helmet" desc = "A sleek skrell voidsuit helmet that slightly shimmers as it moves. This one has a Nralakk Federation emblem on it. This one belongs to a Qukala engineer." icon_state = "kala_helm_eng" - item_state = "kala_helm_eng" \ No newline at end of file + item_state = "kala_helm_eng" diff --git a/code/modules/clothing/spacesuits/void/alien/tajara.dm b/code/modules/clothing/spacesuits/void/alien/tajara.dm index b160212a4d9..0c443fb1254 100644 --- a/code/modules/clothing/spacesuits/void/alien/tajara.dm +++ b/code/modules/clothing/spacesuits/void/alien/tajara.dm @@ -218,4 +218,4 @@ rad = ARMOR_RAD_RESISTANT ) species_restricted = list(BODYTYPE_TAJARA) - refittable = FALSE \ No newline at end of file + refittable = FALSE diff --git a/code/modules/clothing/suits/hoodies.dm b/code/modules/clothing/suits/hoodies.dm index 49d3d2bc754..c8efc364f8d 100644 --- a/code/modules/clothing/suits/hoodies.dm +++ b/code/modules/clothing/suits/hoodies.dm @@ -366,4 +366,4 @@ /obj/item/clothing/head/winterhood/colorable/ponczo name = "visegradi ponczo hood" - desc = "A hood for a Visegradi ponczo." \ No newline at end of file + desc = "A hood for a Visegradi ponczo." diff --git a/code/modules/clothing/suits/overlay.dm b/code/modules/clothing/suits/overlay.dm index 2f5b0c50412..cce8e003a7c 100644 --- a/code/modules/clothing/suits/overlay.dm +++ b/code/modules/clothing/suits/overlay.dm @@ -9,4 +9,4 @@ icon_state = "submariner_coat" item_state = "submariner_coat" build_from_parts = TRUE - worn_overlay = "collar" \ No newline at end of file + worn_overlay = "collar" diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 1a076f14dfe..cbfadf31cf7 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -263,4 +263,4 @@ icon = 'icons/obj/wizard_gear.dmi' icon_state = "sorceress_robes" item_state = "sorceress_robes" - contained_sprite = TRUE \ No newline at end of file + contained_sprite = TRUE diff --git a/code/modules/clothing/suits/xeno/unathi.dm b/code/modules/clothing/suits/xeno/unathi.dm index 116ce5365b8..6de727826bf 100644 --- a/code/modules/clothing/suits/xeno/unathi.dm +++ b/code/modules/clothing/suits/xeno/unathi.dm @@ -56,4 +56,4 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS flags_inv = HIDEJUMPSUIT|HIDETAIL species_restricted = list(BODYTYPE_UNATHI) - contained_sprite = TRUE \ No newline at end of file + contained_sprite = TRUE diff --git a/code/modules/clothing/under/accessories/necklace.dm b/code/modules/clothing/under/accessories/necklace.dm index f20e88f42cd..8c0d907cab9 100644 --- a/code/modules/clothing/under/accessories/necklace.dm +++ b/code/modules/clothing/under/accessories/necklace.dm @@ -74,4 +74,4 @@ /obj/item/clothing/accessory/necklace/colorable/twopiece/pendant/silver/fat icon_state = "large_pendant_silver" - item_state = "large_pendant_silver" \ No newline at end of file + item_state = "large_pendant_silver" diff --git a/code/modules/clothing/under/accessories/shirts.dm b/code/modules/clothing/under/accessories/shirts.dm index 1a97504d9fd..6bffacdbdf0 100644 --- a/code/modules/clothing/under/accessories/shirts.dm +++ b/code/modules/clothing/under/accessories/shirts.dm @@ -434,4 +434,4 @@ /obj/item/clothing/accessory/polo/polo_redstrip_fem desc = "A stylish polo shirt with a red strip around the collar and a waist fit." icon_state = "polo_nt_fem" - item_state = "polo_nt_fem" \ No newline at end of file + item_state = "polo_nt_fem" diff --git a/code/modules/clothing/under/accessories/xeno/tajara.dm b/code/modules/clothing/under/accessories/xeno/tajara.dm index 1d28dc58f50..9758ad217ff 100644 --- a/code/modules/clothing/under/accessories/xeno/tajara.dm +++ b/code/modules/clothing/under/accessories/xeno/tajara.dm @@ -723,4 +723,4 @@ icon = 'icons/obj/tajara_items.dmi' icon_state = "pearl_necklace" item_state = "pearl_necklace" - contained_sprite = TRUE \ No newline at end of file + contained_sprite = TRUE diff --git a/code/modules/clothing/under/accessories/xeno/vaurca.dm b/code/modules/clothing/under/accessories/xeno/vaurca.dm index bb59b4959c2..70fa70998f9 100644 --- a/code/modules/clothing/under/accessories/xeno/vaurca.dm +++ b/code/modules/clothing/under/accessories/xeno/vaurca.dm @@ -6,4 +6,4 @@ item_state = "vacmantle" contained_sprite = TRUE icon_override = null - body_parts_covered = UPPER_TORSO \ No newline at end of file + body_parts_covered = UPPER_TORSO diff --git a/code/modules/clothing/under/xenos/vaurca.dm b/code/modules/clothing/under/xenos/vaurca.dm index b6c6857ea2b..6813004345b 100644 --- a/code/modules/clothing/under/xenos/vaurca.dm +++ b/code/modules/clothing/under/xenos/vaurca.dm @@ -32,4 +32,4 @@ name = "vaurca harness" desc = "A tight-fitting gear harness designed for the Vaurcan form. Mass-produced from equally mass-produced materials." icon_state = "harness_col" - item_state = "harness_col" \ No newline at end of file + item_state = "harness_col" diff --git a/code/modules/clothing/wrists/xeno/tajara.dm b/code/modules/clothing/wrists/xeno/tajara.dm index b6b6a726d25..2b4a2b3f54d 100644 --- a/code/modules/clothing/wrists/xeno/tajara.dm +++ b/code/modules/clothing/wrists/xeno/tajara.dm @@ -10,4 +10,4 @@ name = "adhomian watch" desc = "An adhomian wrist watch made for female Tajara. Due to its use in the past wars, wrist watches are becoming more popular in Adhomai." icon_state = "watch_taj-female" - item_state = "watch_taj-female" \ No newline at end of file + item_state = "watch_taj-female" diff --git a/code/modules/compass/compass_waypoint.dm b/code/modules/compass/compass_waypoint.dm index be9f2f7b4f9..3b1fc6885ca 100644 --- a/code/modules/compass/compass_waypoint.dm +++ b/code/modules/compass/compass_waypoint.dm @@ -23,4 +23,4 @@ var/matrix/M = matrix() M.Translate(0, (name ? COMPASS_LABEL_OFFSET-4 : COMPASS_LABEL_OFFSET)) M.Turn(arctan(cy-y, cx-x)+180) - compass_overlay.transform = M \ No newline at end of file + compass_overlay.transform = M diff --git a/code/modules/compass/~compass.dm b/code/modules/compass/~compass.dm index 7546d7a1e69..99f82e244dc 100644 --- a/code/modules/compass/~compass.dm +++ b/code/modules/compass/~compass.dm @@ -1,3 +1,3 @@ #undef COMPASS_INTERVAL #undef COMPASS_PERIOD -#undef COMPASS_LABEL_OFFSET \ No newline at end of file +#undef COMPASS_LABEL_OFFSET diff --git a/code/modules/cooking/plasticbag.dm b/code/modules/cooking/plasticbag.dm index 64e011c153d..580d7751a7c 100644 --- a/code/modules/cooking/plasticbag.dm +++ b/code/modules/cooking/plasticbag.dm @@ -29,4 +29,4 @@ /obj/item/storage/box/plasticbag/fill() ..() for(var/i=0;i < storage_slots, i++) - new /obj/item/evidencebag/plasticbag(src) \ No newline at end of file + new /obj/item/evidencebag/plasticbag(src) diff --git a/code/modules/cooking/recipes/cultural/recipes_dionae.dm b/code/modules/cooking/recipes/cultural/recipes_dionae.dm index fbafa18f136..00ccf9bf5a7 100644 --- a/code/modules/cooking/recipes/cultural/recipes_dionae.dm +++ b/code/modules/cooking/recipes/cultural/recipes_dionae.dm @@ -23,4 +23,4 @@ fruit = list("apple" = 1) reagents = list(/singleton/reagent/spacespice = 2) items = list(/obj/item/reagent_containers/food/snacks/meat/dionanymph) - result = /obj/item/reagent_containers/food/snacks/sliceable/dionaroast \ No newline at end of file + result = /obj/item/reagent_containers/food/snacks/sliceable/dionaroast diff --git a/code/modules/cooking/recipes/cultural/recipes_human.dm b/code/modules/cooking/recipes/cultural/recipes_human.dm index 7d097bb2530..7a0a458158b 100644 --- a/code/modules/cooking/recipes/cultural/recipes_human.dm +++ b/code/modules/cooking/recipes/cultural/recipes_human.dm @@ -225,4 +225,4 @@ fruit = list ("blue raspberry" = 1) reagents = list(/singleton/reagent/drink/milk/cream = 5) items = list(/obj/item/reagent_containers/food/snacks/chocolatebar/white) - result = /obj/item/reagent_containers/food/snacks/bluemoon \ No newline at end of file + result = /obj/item/reagent_containers/food/snacks/bluemoon diff --git a/code/modules/cooking/recipes/cultural/recipes_vaurca.dm b/code/modules/cooking/recipes/cultural/recipes_vaurca.dm index 74c540abfd2..b6c25f5d9b2 100644 --- a/code/modules/cooking/recipes/cultural/recipes_vaurca.dm +++ b/code/modules/cooking/recipes/cultural/recipes_vaurca.dm @@ -51,4 +51,4 @@ items = list( /obj/item/reagent_containers/food/snacks/tortilla, ) - result = /obj/item/reagent_containers/food/snacks/vkrexiwrap/veggie \ No newline at end of file + result = /obj/item/reagent_containers/food/snacks/vkrexiwrap/veggie diff --git a/code/modules/cooking/recipes/recipes_eggs.dm b/code/modules/cooking/recipes/recipes_eggs.dm index 152d624bc1e..ceec06f5f98 100644 --- a/code/modules/cooking/recipes/recipes_eggs.dm +++ b/code/modules/cooking/recipes/recipes_eggs.dm @@ -69,4 +69,4 @@ appliance = SKILLET fruit = list("tomato" = 2) reagents = list(/singleton/reagent/spacespice = 2, /singleton/reagent/blackpepper = 1, /singleton/reagent/nutriment/protein/egg = 6) - result = /obj/item/reagent_containers/food/snacks/shakshouka \ No newline at end of file + result = /obj/item/reagent_containers/food/snacks/shakshouka diff --git a/code/modules/cooking/recipes/recipes_fish.dm b/code/modules/cooking/recipes/recipes_fish.dm index 425d3b03f9c..0cedeb49afb 100644 --- a/code/modules/cooking/recipes/recipes_fish.dm +++ b/code/modules/cooking/recipes/recipes_fish.dm @@ -3,4 +3,4 @@ items = list( /obj/item/reagent_containers/food/snacks/fish ) - result = /obj/item/reagent_containers/food/snacks/sashimi \ No newline at end of file + result = /obj/item/reagent_containers/food/snacks/sashimi diff --git a/code/modules/cooking/recipes/recipes_grill.dm b/code/modules/cooking/recipes/recipes_grill.dm index d4ff2351fd0..c6c36730c2c 100644 --- a/code/modules/cooking/recipes/recipes_grill.dm +++ b/code/modules/cooking/recipes/recipes_grill.dm @@ -26,4 +26,4 @@ var/list/results = . for(var/thing in results) var/obj/item/XMG = thing - XMG.reagents.del_reagent(/singleton/reagent/acid/polyacid) \ No newline at end of file + XMG.reagents.del_reagent(/singleton/reagent/acid/polyacid) diff --git a/code/modules/cooking/recipes/recipes_ingredients.dm b/code/modules/cooking/recipes/recipes_ingredients.dm index ca22a768579..7d7b35106e1 100644 --- a/code/modules/cooking/recipes/recipes_ingredients.dm +++ b/code/modules/cooking/recipes/recipes_ingredients.dm @@ -16,4 +16,4 @@ reagent_mix = RECIPE_REAGENT_REPLACE /singleton/recipe/whitechocolate/soy - reagents = list(/singleton/reagent/nutriment/vanilla = 2, /singleton/reagent/drink/milk/soymilk = 2, /singleton/reagent/sugar = 2) \ No newline at end of file + reagents = list(/singleton/reagent/nutriment/vanilla = 2, /singleton/reagent/drink/milk/soymilk = 2, /singleton/reagent/sugar = 2) diff --git a/code/modules/cooking/recipes/recipes_noodles.dm b/code/modules/cooking/recipes/recipes_noodles.dm index 48891806392..e95bc4b4b4b 100644 --- a/code/modules/cooking/recipes/recipes_noodles.dm +++ b/code/modules/cooking/recipes/recipes_noodles.dm @@ -64,4 +64,4 @@ /obj/item/reagent_containers/food/snacks/cheesewedge, /obj/item/reagent_containers/food/snacks/bacon ) - result = /obj/item/reagent_containers/food/snacks/macandcheese/bacon \ No newline at end of file + result = /obj/item/reagent_containers/food/snacks/macandcheese/bacon diff --git a/code/modules/custom_ka/upgrade_chips.dm b/code/modules/custom_ka/upgrade_chips.dm index b08ccf45d00..5af8aeeff7e 100644 --- a/code/modules/custom_ka/upgrade_chips.dm +++ b/code/modules/custom_ka/upgrade_chips.dm @@ -62,4 +62,4 @@ range_increase = 4 capacity_increase = 100 mod_limit_increase = 5 - origin_tech = list(TECH_POWER = 6,TECH_MAGNET = 6, TECH_DATA = 6, TECH_ILLEGAL = 4) \ No newline at end of file + origin_tech = list(TECH_POWER = 6,TECH_MAGNET = 6, TECH_DATA = 6, TECH_ILLEGAL = 4) diff --git a/code/modules/effects/ion_trail_follow.dm b/code/modules/effects/ion_trail_follow.dm index 0bc3f38eb1a..01005b09104 100644 --- a/code/modules/effects/ion_trail_follow.dm +++ b/code/modules/effects/ion_trail_follow.dm @@ -51,4 +51,4 @@ /obj/effect/effect/ion_trails/explosion name = "combustion trails" - icon_state = "explosion_particle" \ No newline at end of file + icon_state = "explosion_particle" diff --git a/code/modules/effects/map_effects/door_helper.dm b/code/modules/effects/map_effects/door_helper.dm index ddcfc2201cc..b886a5315d9 100644 --- a/code/modules/effects/map_effects/door_helper.dm +++ b/code/modules/effects/map_effects/door_helper.dm @@ -10,4 +10,4 @@ if(istype(D, /obj/machinery/door/blast) || istype(D, /obj/machinery/door/firedoor)) continue D.unres_dir ^= dir - return INITIALIZE_HINT_QDEL \ No newline at end of file + return INITIALIZE_HINT_QDEL diff --git a/code/modules/effects/map_effects/effect_emitter.dm b/code/modules/effects/map_effects/effect_emitter.dm index 11fe6d24eb7..e2c5c37ef3b 100644 --- a/code/modules/effects/map_effects/effect_emitter.dm +++ b/code/modules/effects/map_effects/effect_emitter.dm @@ -51,4 +51,4 @@ /obj/effect/map_effect/interval/effect_emitter/sparks/frequent effect_amount = 4 // Otherwise it caps out fast. interval_lower_bound = 1 - interval_upper_bound = 3 SECONDS \ No newline at end of file + interval_upper_bound = 3 SECONDS diff --git a/code/modules/effects/map_effects/perma_light.dm b/code/modules/effects/map_effects/perma_light.dm index 7c9344c090c..d7b5d6295f2 100644 --- a/code/modules/effects/map_effects/perma_light.dm +++ b/code/modules/effects/map_effects/perma_light.dm @@ -25,4 +25,4 @@ /obj/effect/map_effect/perma_light/concentrated/halogen name = "permanent light (concentrated halogen)" - light_color = LIGHT_COLOR_HALOGEN \ No newline at end of file + light_color = LIGHT_COLOR_HALOGEN diff --git a/code/modules/effects/map_effects/screen_shaker.dm b/code/modules/effects/map_effects/screen_shaker.dm index 960546c374a..ff9ac1a0e82 100644 --- a/code/modules/effects/map_effects/screen_shaker.dm +++ b/code/modules/effects/map_effects/screen_shaker.dm @@ -15,4 +15,4 @@ var/mob/M = A if(M.z == src.z && get_dist(src, M) <= shake_radius) shake_camera(M, shake_duration, shake_strength) - ..() \ No newline at end of file + ..() diff --git a/code/modules/effects/map_effects/sound_emitter.dm b/code/modules/effects/map_effects/sound_emitter.dm index d4373616b66..e589aa5690e 100644 --- a/code/modules/effects/map_effects/sound_emitter.dm +++ b/code/modules/effects/map_effects/sound_emitter.dm @@ -78,4 +78,4 @@ /obj/effect/map_effect/interval/sound_emitter/bikehorns sounds_to_play = list('sound/items/bikehorn.ogg') interval_lower_bound = 5 - interval_upper_bound = 1 SECOND \ No newline at end of file + interval_upper_bound = 1 SECOND diff --git a/code/modules/effects/maze_generation/helper_modules/entry_exit.dm b/code/modules/effects/maze_generation/helper_modules/entry_exit.dm index ba6f2563c5a..de85b80ceb2 100644 --- a/code/modules/effects/maze_generation/helper_modules/entry_exit.dm +++ b/code/modules/effects/maze_generation/helper_modules/entry_exit.dm @@ -9,4 +9,4 @@ T.ChangeTurf(BWG.floor_material) else for(var/obj/structure/window/reinforced/crescent/MG in get_turf(src)) - qdel(MG) \ No newline at end of file + qdel(MG) diff --git a/code/modules/effects/maze_generation/loot_modules/trash_module.dm b/code/modules/effects/maze_generation/loot_modules/trash_module.dm index 68b42bb0afe..9cbd07ffb98 100644 --- a/code/modules/effects/maze_generation/loot_modules/trash_module.dm +++ b/code/modules/effects/maze_generation/loot_modules/trash_module.dm @@ -3,4 +3,4 @@ spawn_probability = 80 /obj/effect/mazegen/module_loot/trash/spawn_loot(turf/T) - new /obj/random/junk(T) \ No newline at end of file + new /obj/random/junk(T) diff --git a/code/modules/effects/maze_generation/maze_helper_atoms.dm b/code/modules/effects/maze_generation/maze_helper_atoms.dm index 5d7469012fd..e2437ced64c 100644 --- a/code/modules/effects/maze_generation/maze_helper_atoms.dm +++ b/code/modules/effects/maze_generation/maze_helper_atoms.dm @@ -3,4 +3,4 @@ desc = "You should not be seeing this!" icon = 'icons/mob/screen/generic.dmi' icon_state = "x2" - color = "#00FF00" \ No newline at end of file + color = "#00FF00" diff --git a/code/modules/emotes/definitions/visible.dm b/code/modules/emotes/definitions/visible.dm index 45184cffbcc..3008655e6f8 100644 --- a/code/modules/emotes/definitions/visible.dm +++ b/code/modules/emotes/definitions/visible.dm @@ -335,4 +335,4 @@ /singleton/emote/visible/tflick key = "tflick" - emote_message_3p = "USER's tail flicks." \ No newline at end of file + emote_message_3p = "USER's tail flicks." diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index cdf95f993a1..df484aa220a 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -134,4 +134,4 @@ /datum/event/carp_migration/overmap/setup() announceWhen = 1 - despawn_turfs = typecacheof(despawn_turfs) \ No newline at end of file + despawn_turfs = typecacheof(despawn_turfs) diff --git a/code/modules/events/false_alarm.dm b/code/modules/events/false_alarm.dm index 20a81203d69..ed6e658e0bb 100644 --- a/code/modules/events/false_alarm.dm +++ b/code/modules/events/false_alarm.dm @@ -49,4 +49,4 @@ E.end(TRUE) E.kill() - E.announce() \ No newline at end of file + E.announce() diff --git a/code/modules/events/grid_check.dm b/code/modules/events/grid_check.dm index 8561c5b17a1..b8c8812b4de 100644 --- a/code/modules/events/grid_check.dm +++ b/code/modules/events/grid_check.dm @@ -6,4 +6,4 @@ power_failure(0, severity) /datum/event/grid_check/announce() - command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg', zlevels = affecting_z) \ No newline at end of file + command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg', zlevels = affecting_z) diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index 85e669a2331..f42b0fefc8c 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -64,4 +64,4 @@ A.radiation_active = TRUE else A.radiation_active = null - A.update_icon() \ No newline at end of file + A.update_icon() diff --git a/code/modules/events/spontaneous_appendicitis.dm b/code/modules/events/spontaneous_appendicitis.dm index e566b274130..7581cb335e9 100644 --- a/code/modules/events/spontaneous_appendicitis.dm +++ b/code/modules/events/spontaneous_appendicitis.dm @@ -9,4 +9,4 @@ continue A.inflamed = 1 A.update_icon() - break \ No newline at end of file + break diff --git a/code/modules/games/cardemon.dm b/code/modules/games/cardemon.dm index cc9cac32a8e..709c2f78504 100644 --- a/code/modules/games/cardemon.dm +++ b/code/modules/games/cardemon.dm @@ -27,4 +27,4 @@ P.name = "[rarity] [P.name]" P.card_icon += "_[rarity]" P.back_icon = "card_back_cardemon" - cards += P \ No newline at end of file + cards += P diff --git a/code/modules/ghostroles/spawner/atom/combat_robot.dm b/code/modules/ghostroles/spawner/atom/combat_robot.dm index 968ab68bb9b..162890df69a 100644 --- a/code/modules/ghostroles/spawner/atom/combat_robot.dm +++ b/code/modules/ghostroles/spawner/atom/combat_robot.dm @@ -9,4 +9,4 @@ loc_type = GS_LOC_ATOM atom_add_message = "A combat robot has started its boot process!" - spawn_mob = /mob/living/silicon/robot/combat \ No newline at end of file + spawn_mob = /mob/living/silicon/robot/combat diff --git a/code/modules/ghostroles/spawner/atom/cult_construct.dm b/code/modules/ghostroles/spawner/atom/cult_construct.dm index 54930bbf15a..743df1647fe 100644 --- a/code/modules/ghostroles/spawner/atom/cult_construct.dm +++ b/code/modules/ghostroles/spawner/atom/cult_construct.dm @@ -11,4 +11,4 @@ loc_type = GS_LOC_ATOM atom_add_message = "A cult construct has ghosted!" - spawn_mob = /mob/living/simple_animal/construct \ No newline at end of file + spawn_mob = /mob/living/simple_animal/construct diff --git a/code/modules/ghostroles/spawner/atom/diona_nymph.dm b/code/modules/ghostroles/spawner/atom/diona_nymph.dm index 25fa86fa305..30dd74b8238 100644 --- a/code/modules/ghostroles/spawner/atom/diona_nymph.dm +++ b/code/modules/ghostroles/spawner/atom/diona_nymph.dm @@ -7,4 +7,4 @@ loc_type = GS_LOC_ATOM atom_add_message = "A Diona Nymph has sprung up somewhere on the station!" - spawn_mob = /mob/living/carbon/alien/diona \ No newline at end of file + spawn_mob = /mob/living/carbon/alien/diona diff --git a/code/modules/ghostroles/spawner/atom/living_plant.dm b/code/modules/ghostroles/spawner/atom/living_plant.dm index f7b74f88203..072bbbea5b6 100644 --- a/code/modules/ghostroles/spawner/atom/living_plant.dm +++ b/code/modules/ghostroles/spawner/atom/living_plant.dm @@ -7,4 +7,4 @@ loc_type = GS_LOC_ATOM atom_add_message = "A Living Plant has sprung up somewhere on the station!" - spawn_mob = /mob/living \ No newline at end of file + spawn_mob = /mob/living diff --git a/code/modules/ghostroles/spawner/atom/posibrain.dm b/code/modules/ghostroles/spawner/atom/posibrain.dm index 8043a2f5a55..5dbcb58b3c0 100644 --- a/code/modules/ghostroles/spawner/atom/posibrain.dm +++ b/code/modules/ghostroles/spawner/atom/posibrain.dm @@ -10,4 +10,4 @@ loc_type = GS_LOC_ATOM atom_add_message = "A posibrain has started its boot process!" - spawn_mob = /mob/living/carbon/brain \ No newline at end of file + spawn_mob = /mob/living/carbon/brain diff --git a/code/modules/ghostroles/spawner/atom/shade.dm b/code/modules/ghostroles/spawner/atom/shade.dm index df3e42c96db..ea7584fc1c9 100644 --- a/code/modules/ghostroles/spawner/atom/shade.dm +++ b/code/modules/ghostroles/spawner/atom/shade.dm @@ -11,4 +11,4 @@ loc_type = GS_LOC_ATOM atom_add_message = "A cult shade has ghosted!" - spawn_mob = /mob/living/simple_animal/shade \ No newline at end of file + spawn_mob = /mob/living/simple_animal/shade diff --git a/code/modules/ghostroles/spawner/atom/technomancer_apprentice.dm b/code/modules/ghostroles/spawner/atom/technomancer_apprentice.dm index 014247d8d26..419dafb6dcf 100644 --- a/code/modules/ghostroles/spawner/atom/technomancer_apprentice.dm +++ b/code/modules/ghostroles/spawner/atom/technomancer_apprentice.dm @@ -18,4 +18,4 @@ loc_type = GS_LOC_ATOM atom_add_message = "A technomancer master has requested a loyal golem!" - spawn_mob = /mob/living/carbon/human/technomancer_golem \ No newline at end of file + spawn_mob = /mob/living/carbon/human/technomancer_golem diff --git a/code/modules/ghostroles/spawner/human/responseteams/mercenary.dm b/code/modules/ghostroles/spawner/human/responseteams/mercenary.dm index 727ce376c4e..4ec3e3068ee 100644 --- a/code/modules/ghostroles/spawner/human/responseteams/mercenary.dm +++ b/code/modules/ghostroles/spawner/human/responseteams/mercenary.dm @@ -26,4 +26,4 @@ short_name = "mercl" max_count = 1 desc = "The leader of the freelancer mercenary team." - outfit = /datum/outfit/admin/ert/mercenary/leader \ No newline at end of file + outfit = /datum/outfit/admin/ert/mercenary/leader diff --git a/code/modules/ghostroles/spawner/human/responseteams/nt_ert.dm b/code/modules/ghostroles/spawner/human/responseteams/nt_ert.dm index 3fe88d8ba2a..4c683506bcb 100644 --- a/code/modules/ghostroles/spawner/human/responseteams/nt_ert.dm +++ b/code/modules/ghostroles/spawner/human/responseteams/nt_ert.dm @@ -28,4 +28,4 @@ short_name = "ntlead" desc = "The leader of the NanoTrasen Phoenix ERT." max_count = 1 - mob_name_prefix = "L/Tpr. " \ No newline at end of file + mob_name_prefix = "L/Tpr. " diff --git a/code/modules/ghostroles/spawner/human/responseteams/response_team.dm b/code/modules/ghostroles/spawner/human/responseteams/response_team.dm index 8eaa8dcab80..ae3f965264b 100644 --- a/code/modules/ghostroles/spawner/human/responseteams/response_team.dm +++ b/code/modules/ghostroles/spawner/human/responseteams/response_team.dm @@ -22,4 +22,4 @@ /datum/ghostspawner/human/ert/post_spawn(mob/user) if(name) to_chat(user, "You are [max_count > 1 ? "a" : "the"] [name]!") - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/ghostroles/spawner/human/responseteams/tcfl.dm b/code/modules/ghostroles/spawner/human/responseteams/tcfl.dm index 0faff7069ae..0d8cc94d32a 100644 --- a/code/modules/ghostroles/spawner/human/responseteams/tcfl.dm +++ b/code/modules/ghostroles/spawner/human/responseteams/tcfl.dm @@ -34,4 +34,4 @@ welcome_message = "As a pilot of the Tau Ceti Foreign Legion, your job is to pilot your assigned dropship and keep it safe from any hostile forces. You may also have to assist the main task force in a supporting role if the need arises." outfit = /datum/outfit/admin/ert/legion/pilot mob_name_prefix = "PL. " - spawnpoints = list("TCFLERTSpawn - Pilot") \ No newline at end of file + spawnpoints = list("TCFLERTSpawn - Pilot") diff --git a/code/modules/ghostroles/spawner/simplemob/reboot_maintdrone.dm b/code/modules/ghostroles/spawner/simplemob/reboot_maintdrone.dm index 57512b27707..0bb70616806 100644 --- a/code/modules/ghostroles/spawner/simplemob/reboot_maintdrone.dm +++ b/code/modules/ghostroles/spawner/simplemob/reboot_maintdrone.dm @@ -7,4 +7,4 @@ loc_type = GS_LOC_ATOM atom_add_message = "A maintenance drone has started its rebooting procedure!" - spawn_mob = /mob/living/silicon/robot/drone \ No newline at end of file + spawn_mob = /mob/living/silicon/robot/drone diff --git a/code/modules/ghostroles/spawner/simplemob/spider_queen.dm b/code/modules/ghostroles/spawner/simplemob/spider_queen.dm index fe2d6702780..0683299f6a1 100644 --- a/code/modules/ghostroles/spawner/simplemob/spider_queen.dm +++ b/code/modules/ghostroles/spawner/simplemob/spider_queen.dm @@ -12,4 +12,4 @@ respawn_flag = null - spawn_mob = /mob/living/simple_animal/hostile/spider_queen \ No newline at end of file + spawn_mob = /mob/living/simple_animal/hostile/spider_queen diff --git a/code/modules/heavy_vehicle/_mech_setup.dm b/code/modules/heavy_vehicle/_mech_setup.dm index 2b1f8ade590..34605f825fe 100644 --- a/code/modules/heavy_vehicle/_mech_setup.dm +++ b/code/modules/heavy_vehicle/_mech_setup.dm @@ -40,4 +40,4 @@ var/global/list/mecha_damage_overlay_cache = list() //POWER! #define MECH_POWER_OFF 0 #define MECH_POWER_TRANSITION 1 -#define MECH_POWER_ON 2 \ No newline at end of file +#define MECH_POWER_ON 2 diff --git a/code/modules/heavy_vehicle/components/armor.dm b/code/modules/heavy_vehicle/components/armor.dm index 13fed50db5d..be5855ca886 100644 --- a/code/modules/heavy_vehicle/components/armor.dm +++ b/code/modules/heavy_vehicle/components/armor.dm @@ -61,4 +61,4 @@ bomb = ARMOR_BOMB_RESISTANT, bio = ARMOR_BIO_SHIELDED ) - origin_tech = list(TECH_MATERIAL = 5) \ No newline at end of file + origin_tech = list(TECH_MATERIAL = 5) diff --git a/code/modules/heavy_vehicle/components/arms.dm b/code/modules/heavy_vehicle/components/arms.dm index 4740efc24f2..0dc938cef3d 100644 --- a/code/modules/heavy_vehicle/components/arms.dm +++ b/code/modules/heavy_vehicle/components/arms.dm @@ -51,4 +51,4 @@ return ..() /obj/item/mech_component/manipulators/update_components() - motivator = locate() in src \ No newline at end of file + motivator = locate() in src diff --git a/code/modules/heavy_vehicle/components/head.dm b/code/modules/heavy_vehicle/components/head.dm index 2f998fe1fc2..dc8ba1a4748 100644 --- a/code/modules/heavy_vehicle/components/head.dm +++ b/code/modules/heavy_vehicle/components/head.dm @@ -145,4 +145,4 @@ /obj/item/mech_component/control_module/proc/update_software() installed_software = list() for(var/obj/item/circuitboard/exosystem/program in contents) - installed_software |= program.contains_software \ No newline at end of file + installed_software |= program.contains_software diff --git a/code/modules/heavy_vehicle/components/legs.dm b/code/modules/heavy_vehicle/components/legs.dm index 279ce38f92c..fc5d79ccc40 100644 --- a/code/modules/heavy_vehicle/components/legs.dm +++ b/code/modules/heavy_vehicle/components/legs.dm @@ -58,4 +58,4 @@ return 1 // Inside something, assume you can get out. if(!istype(target_loc)) return 0 // What are you even doing. - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/heavy_vehicle/components/software.dm b/code/modules/heavy_vehicle/components/software.dm index 56dd68a7d57..9e86531e15f 100644 --- a/code/modules/heavy_vehicle/components/software.dm +++ b/code/modules/heavy_vehicle/components/software.dm @@ -31,4 +31,4 @@ icon_state = "mainboard" origin_tech = list(TECH_DATA = 3, TECH_COMBAT = 3) -#undef T_BOARD_MECHA \ No newline at end of file +#undef T_BOARD_MECHA diff --git a/code/modules/heavy_vehicle/equipment/_equipment.dm b/code/modules/heavy_vehicle/equipment/_equipment.dm index d290a719eeb..099dd3ed73a 100644 --- a/code/modules/heavy_vehicle/equipment/_equipment.dm +++ b/code/modules/heavy_vehicle/equipment/_equipment.dm @@ -136,4 +136,4 @@ /obj/item/mecha_equipment/mounted_system/get_cell() if(owner && loc == owner) return owner.get_cell() - return null \ No newline at end of file + return null diff --git a/code/modules/heavy_vehicle/equipment/cult.dm b/code/modules/heavy_vehicle/equipment/cult.dm index 8ec00d777d2..1bca134589a 100644 --- a/code/modules/heavy_vehicle/equipment/cult.dm +++ b/code/modules/heavy_vehicle/equipment/cult.dm @@ -24,4 +24,4 @@ /obj/item/mecha_equipment/doomblade/attack(mob/living/M, mob/living/user) if(!owner) return - doomblade.attack(M, user, user.zone_sel.selecting) \ No newline at end of file + doomblade.attack(M, user, user.zone_sel.selecting) diff --git a/code/modules/heavy_vehicle/mech_helpers.dm b/code/modules/heavy_vehicle/mech_helpers.dm index a63a4a38f0d..78a624c1754 100644 --- a/code/modules/heavy_vehicle/mech_helpers.dm +++ b/code/modules/heavy_vehicle/mech_helpers.dm @@ -120,4 +120,4 @@ var/obj/item/mech_component/MC = zoneToComponent(def_zone) if(MC) return MC.name - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/heavy_vehicle/premade/combat.dm b/code/modules/heavy_vehicle/premade/combat.dm index 6c2a639d53d..feb10deb221 100644 --- a/code/modules/heavy_vehicle/premade/combat.dm +++ b/code/modules/heavy_vehicle/premade/combat.dm @@ -75,4 +75,4 @@ ) ) - . = ..() \ No newline at end of file + . = ..() diff --git a/code/modules/heavy_vehicle/premade/light.dm b/code/modules/heavy_vehicle/premade/light.dm index 1b973fc3f1b..1667239d4fc 100644 --- a/code/modules/heavy_vehicle/premade/light.dm +++ b/code/modules/heavy_vehicle/premade/light.dm @@ -126,4 +126,4 @@ h_back = /obj/item/mecha_equipment/quick_enter h_l_shoulder = /obj/item/mecha_equipment/mounted_system/flarelauncher - h_r_shoulder = /obj/item/mecha_equipment/mounted_system/combat/smg \ No newline at end of file + h_r_shoulder = /obj/item/mecha_equipment/mounted_system/combat/smg diff --git a/code/modules/heavy_vehicle/premade/military.dm b/code/modules/heavy_vehicle/premade/military.dm index 06bd8252448..cb9feda6fb8 100644 --- a/code/modules/heavy_vehicle/premade/military.dm +++ b/code/modules/heavy_vehicle/premade/military.dm @@ -62,4 +62,4 @@ e_color = COLOR_DARK_GUNMETAL h_r_shoulder = /obj/item/mecha_equipment/mounted_system/combat/pulse - h_l_shoulder = /obj/item/mecha_equipment/mounted_system/combat/pulse \ No newline at end of file + h_l_shoulder = /obj/item/mecha_equipment/mounted_system/combat/pulse diff --git a/code/modules/heavy_vehicle/premade/misc.dm b/code/modules/heavy_vehicle/premade/misc.dm index 7d5573656d5..f3e5500438f 100644 --- a/code/modules/heavy_vehicle/premade/misc.dm +++ b/code/modules/heavy_vehicle/premade/misc.dm @@ -31,4 +31,4 @@ power_use = 7500 color = COLOR_WHITE mech_step_sound = 'sound/mecha/tanktread.ogg' - trample_damage = 25 \ No newline at end of file + trample_damage = 25 diff --git a/code/modules/heavy_vehicle/premade/pra.dm b/code/modules/heavy_vehicle/premade/pra.dm index 825bd1b6561..960ba150e0f 100644 --- a/code/modules/heavy_vehicle/premade/pra.dm +++ b/code/modules/heavy_vehicle/premade/pra.dm @@ -96,4 +96,4 @@ /obj/item/mech_component/chassis/pra_egg/armored/prebuild() . = ..() - mech_armor = new /obj/item/robot_parts/robot_component/armor/mech/combat(src) \ No newline at end of file + mech_armor = new /obj/item/robot_parts/robot_component/armor/mech/combat(src) diff --git a/code/modules/holidays/halloween/props.dm b/code/modules/holidays/halloween/props.dm index 01730c7870f..82b589b6c42 100644 --- a/code/modules/holidays/halloween/props.dm +++ b/code/modules/holidays/halloween/props.dm @@ -27,4 +27,4 @@ icon_state = "halloween_l" /obj/structure/sign/flag/halloween/right - icon_state = "halloween_r" \ No newline at end of file + icon_state = "halloween_r" diff --git a/code/modules/hydroponics/beekeeping/bee_pack.dm b/code/modules/hydroponics/beekeeping/bee_pack.dm index ff8af00290a..51644c04921 100644 --- a/code/modules/hydroponics/beekeeping/bee_pack.dm +++ b/code/modules/hydroponics/beekeeping/bee_pack.dm @@ -23,4 +23,4 @@ name = initial(name) desc = initial(desc) full = TRUE - update_icon() \ No newline at end of file + update_icon() diff --git a/code/modules/hydroponics/beekeeping/honey_frame.dm b/code/modules/hydroponics/beekeeping/honey_frame.dm index de3ab26baae..dee7f8c9d41 100644 --- a/code/modules/hydroponics/beekeeping/honey_frame.dm +++ b/code/modules/hydroponics/beekeeping/honey_frame.dm @@ -13,4 +13,4 @@ /obj/item/honey_frame/filled/Initialize() . = ..() - add_overlay("honeycomb") \ No newline at end of file + add_overlay("honeycomb") diff --git a/code/modules/hydroponics/beekeeping/wax.dm b/code/modules/hydroponics/beekeeping/wax.dm index 54a06c72ce6..28abb07c8dc 100644 --- a/code/modules/hydroponics/beekeeping/wax.dm +++ b/code/modules/hydroponics/beekeeping/wax.dm @@ -12,4 +12,4 @@ var/global/list/datum/stack_recipe/wax_recipes = list( new /datum/stack_recipe("candle", /obj/item/flame/candle) -) \ No newline at end of file +) diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index ab1f453eb51..9c789fcefdd 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -76,4 +76,4 @@ if(H.shoes?.item_flags & LIGHTSTEP) return var/mob/living/M = AM - M.slip("the [src.name]",4) \ No newline at end of file + M.slip("the [src.name]",4) diff --git a/code/modules/hydroponics/seed_datums/aquaculture.dm b/code/modules/hydroponics/seed_datums/aquaculture.dm index eab68ff7147..30b1a166104 100644 --- a/code/modules/hydroponics/seed_datums/aquaculture.dm +++ b/code/modules/hydroponics/seed_datums/aquaculture.dm @@ -63,4 +63,4 @@ set_trait(TRAIT_PLANT_COLOUR, "#9aaca6") /obj/item/seeds/clam/rasval - seed_type = "rasval clam" \ No newline at end of file + seed_type = "rasval clam" diff --git a/code/modules/hydroponics/seed_datums/fruits.dm b/code/modules/hydroponics/seed_datums/fruits.dm index da527c13add..cf31286e2de 100644 --- a/code/modules/hydroponics/seed_datums/fruits.dm +++ b/code/modules/hydroponics/seed_datums/fruits.dm @@ -473,4 +473,4 @@ set_trait(TRAIT_IDEAL_LIGHT, 6) /obj/item/seeds/richcoffeeseed - seed_type = "richcoffee" \ No newline at end of file + seed_type = "richcoffee" diff --git a/code/modules/hydroponics/seed_datums/unathi.dm b/code/modules/hydroponics/seed_datums/unathi.dm index 37f0133085e..2cbef7c4b18 100644 --- a/code/modules/hydroponics/seed_datums/unathi.dm +++ b/code/modules/hydroponics/seed_datums/unathi.dm @@ -136,4 +136,4 @@ set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15) /obj/item/seeds/serkiflowerseed - seed_type = "S'erki flowers" \ No newline at end of file + seed_type = "S'erki flowers" diff --git a/code/modules/hydroponics/seed_mobs.dm b/code/modules/hydroponics/seed_mobs.dm index 03dc57a7120..d3752e6c770 100644 --- a/code/modules/hydroponics/seed_mobs.dm +++ b/code/modules/hydroponics/seed_mobs.dm @@ -22,4 +22,4 @@ for(var/j = 0;j<=total_yield;j++) var/obj/item/seeds/S = new(get_turf(host)) S.seed_type = name - S.update_seed() \ No newline at end of file + S.update_seed() diff --git a/code/modules/integrated_electronics/core/special_pins/ref_pin.dm b/code/modules/integrated_electronics/core/special_pins/ref_pin.dm index 461965f254b..90901357a23 100644 --- a/code/modules/integrated_electronics/core/special_pins/ref_pin.dm +++ b/code/modules/integrated_electronics/core/special_pins/ref_pin.dm @@ -11,4 +11,4 @@ holder.on_data_written() /datum/integrated_io/ref/display_pin_type() - return IC_FORMAT_REF \ No newline at end of file + return IC_FORMAT_REF diff --git a/code/modules/integrated_electronics/subtypes/arithmetic.dm b/code/modules/integrated_electronics/subtypes/arithmetic.dm index 7505ed867ea..ce7708c001e 100644 --- a/code/modules/integrated_electronics/subtypes/arithmetic.dm +++ b/code/modules/integrated_electronics/subtypes/arithmetic.dm @@ -350,4 +350,4 @@ set_pin_data(IC_OUTPUT, 1, max(values)) push_data() - activate_pin(2) \ No newline at end of file + activate_pin(2) diff --git a/code/modules/integrated_electronics/subtypes/built_in.dm b/code/modules/integrated_electronics/subtypes/built_in.dm index 23002aacd1e..aa49e08ef92 100644 --- a/code/modules/integrated_electronics/subtypes/built_in.dm +++ b/code/modules/integrated_electronics/subtypes/built_in.dm @@ -37,4 +37,4 @@ outputs = list("output" = IC_PINTYPE_ANY) /obj/item/integrated_circuit/built_in/action_button/do_work() - activate_pin(1) \ No newline at end of file + activate_pin(1) diff --git a/code/modules/integrated_electronics/~defines/~defines.dm b/code/modules/integrated_electronics/~defines/~defines.dm index 90aa05acf19..621967d81e7 100644 --- a/code/modules/integrated_electronics/~defines/~defines.dm +++ b/code/modules/integrated_electronics/~defines/~defines.dm @@ -33,4 +33,4 @@ #undef IC_PINTYPE_PULSE_IN #undef IC_PINTYPE_PULSE_OUT -#undef IC_MAX_LIST_LENGTH \ No newline at end of file +#undef IC_MAX_LIST_LENGTH diff --git a/code/modules/item_worth/Value_procs/atoms.dm b/code/modules/item_worth/Value_procs/atoms.dm index e88a886093d..6887b3b747e 100644 --- a/code/modules/item_worth/Value_procs/atoms.dm +++ b/code/modules/item_worth/Value_procs/atoms.dm @@ -1,2 +1,2 @@ /atom/proc/Value(var/base) - return base \ No newline at end of file + return base diff --git a/code/modules/item_worth/Value_procs/mob.dm b/code/modules/item_worth/Value_procs/mob.dm index 1c37bec0f33..d22e0658ee1 100644 --- a/code/modules/item_worth/Value_procs/mob.dm +++ b/code/modules/item_worth/Value_procs/mob.dm @@ -1,4 +1,4 @@ /mob/living/carbon/human/Value(var/base) . = ..() if(species) - . *= species.rarity_value \ No newline at end of file + . *= species.rarity_value diff --git a/code/modules/item_worth/Value_procs/obj.dm b/code/modules/item_worth/Value_procs/obj.dm index 0703330a8ee..d5482ddc89e 100644 --- a/code/modules/item_worth/Value_procs/obj.dm +++ b/code/modules/item_worth/Value_procs/obj.dm @@ -1,4 +1,4 @@ /obj/Value() . = ..() for(var/a in contents) - . += get_value(a) \ No newline at end of file + . += get_value(a) diff --git a/code/modules/item_worth/Value_procs/obj/machinery.dm b/code/modules/item_worth/Value_procs/obj/machinery.dm index 4301061c9a5..e258b2797e8 100644 --- a/code/modules/item_worth/Value_procs/obj/machinery.dm +++ b/code/modules/item_worth/Value_procs/obj/machinery.dm @@ -2,4 +2,4 @@ . = ..() if(stat & BROKEN) . *= 0.5 - . = round(.) \ No newline at end of file + . = round(.) diff --git a/code/modules/item_worth/Value_procs/obj/structures.dm b/code/modules/item_worth/Value_procs/obj/structures.dm index f2b48d9f4a4..402dec629b6 100644 --- a/code/modules/item_worth/Value_procs/obj/structures.dm +++ b/code/modules/item_worth/Value_procs/obj/structures.dm @@ -2,4 +2,4 @@ return material.value /obj/structure/bed/Value() - return ..() * material.value \ No newline at end of file + return ..() * material.value diff --git a/code/modules/item_worth/_helpers.dm b/code/modules/item_worth/_helpers.dm index 8841debc67a..c93239234f3 100644 --- a/code/modules/item_worth/_helpers.dm +++ b/code/modules/item_worth/_helpers.dm @@ -1,3 +1,3 @@ //Workaround by Ginja due to the fact initial(parent_type) does not work. -#define PARENT(x) text2path(replacetext("[x]", regex("/\[^/\]+$"), "")) \ No newline at end of file +#define PARENT(x) text2path(replacetext("[x]", regex("/\[^/\]+$"), "")) diff --git a/code/modules/item_worth/item_worth.dm b/code/modules/item_worth/item_worth.dm index 0b182021a18..f47a53a260d 100644 --- a/code/modules/item_worth/item_worth.dm +++ b/code/modules/item_worth/item_worth.dm @@ -10,4 +10,4 @@ else // Negative. If it's a path, use -x, otherwise call Value() on the instance if(ispath(A)) return -value - return A.Value(-value) \ No newline at end of file + return A.Value(-value) diff --git a/code/modules/item_worth/material_weapons.dm b/code/modules/item_worth/material_weapons.dm index c06d74f3b3f..e76b103e156 100644 --- a/code/modules/item_worth/material_weapons.dm +++ b/code/modules/item_worth/material_weapons.dm @@ -44,4 +44,4 @@ worth_multiplier = 10 /obj/item/material/twohanded/zweihander - worth_multiplier = 35 \ No newline at end of file + worth_multiplier = 35 diff --git a/code/modules/law/law.dm b/code/modules/law/law.dm index de2fb1732a9..f3b8c3a3411 100644 --- a/code/modules/law/law.dm +++ b/code/modules/law/law.dm @@ -48,4 +48,4 @@ $PRISONER_NAME was found guilty of $CRIME on $DATE. Their sentence was $SENTENCE if(max_brig_time >= PERMABRIG_SENTENCE) return "[min_brig_time] minutes - HuT" else - return "[min_brig_time] - [max_brig_time] minutes" \ No newline at end of file + return "[min_brig_time] - [max_brig_time] minutes" diff --git a/code/modules/law/laws/high_severity.dm b/code/modules/law/laws/high_severity.dm index 736e58a0284..d404ab16859 100644 --- a/code/modules/law/laws/high_severity.dm +++ b/code/modules/law/laws/high_severity.dm @@ -91,4 +91,4 @@ id = "i311" min_brig_time = 20 - max_brig_time = 90 \ No newline at end of file + max_brig_time = 90 diff --git a/code/modules/law/laws/low_severity.dm b/code/modules/law/laws/low_severity.dm index b215529fbf7..b477523d736 100644 --- a/code/modules/law/laws/low_severity.dm +++ b/code/modules/law/laws/low_severity.dm @@ -197,4 +197,4 @@ max_brig_time = 10 min_fine = 500 - max_fine = 750 \ No newline at end of file + max_fine = 750 diff --git a/code/modules/maps/helper_landmarks.dm b/code/modules/maps/helper_landmarks.dm index 2bec33a763e..2ba49eaa049 100644 --- a/code/modules/maps/helper_landmarks.dm +++ b/code/modules/maps/helper_landmarks.dm @@ -29,4 +29,4 @@ var/turf/simulated/T = get_turf(src) if(istype(T)) T.fire_act(temp) - . = ..() \ No newline at end of file + . = ..() diff --git a/code/modules/maps/planet_types/lore/burzsia.dm b/code/modules/maps/planet_types/lore/burzsia.dm index 8007d82e15a..4e16d496577 100644 --- a/code/modules/maps/planet_types/lore/burzsia.dm +++ b/code/modules/maps/planet_types/lore/burzsia.dm @@ -58,4 +58,4 @@ /obj/effect/overmap/visitable/sector/exoplanet/barren/asteroid/burzsia name = "Burzsia II" - generated_name = FALSE \ No newline at end of file + generated_name = FALSE diff --git a/code/modules/martial_arts/gunkata.dm b/code/modules/martial_arts/gunkata.dm index deb8783237c..663b262a2b1 100644 --- a/code/modules/martial_arts/gunkata.dm +++ b/code/modules/martial_arts/gunkata.dm @@ -7,4 +7,4 @@ desc = "A manual containing basic Gun-Kata instruction and techniques." icon_state = "rulebook" item_state = "rulebook" - martial_art = /datum/martial_art/gun_kata \ No newline at end of file + martial_art = /datum/martial_art/gun_kata diff --git a/code/modules/martial_arts/plasma_fist.dm b/code/modules/martial_arts/plasma_fist.dm index af6b91cce93..87c6e231465 100644 --- a/code/modules/martial_arts/plasma_fist.dm +++ b/code/modules/martial_arts/plasma_fist.dm @@ -116,4 +116,4 @@ #undef TORNADO_COMBO #undef THROWBACK_COMBO -#undef PLASMA_COMBO \ No newline at end of file +#undef PLASMA_COMBO diff --git a/code/modules/martial_arts/revenant.dm b/code/modules/martial_arts/revenant.dm index eb01f7c5f02..e00e6c79d2a 100644 --- a/code/modules/martial_arts/revenant.dm +++ b/code/modules/martial_arts/revenant.dm @@ -37,4 +37,4 @@ to_chat(usr, "You think of your former dimension...") to_chat(usr, "Bash Slash: Harm Harm Harm. Deliver a strong slashing strike against the enemy, pushing them away.") -#undef BASH_SLASH \ No newline at end of file +#undef BASH_SLASH diff --git a/code/modules/martial_arts/tajara.dm b/code/modules/martial_arts/tajara.dm index c2cff2a21ef..fa10d44e4b0 100644 --- a/code/modules/martial_arts/tajara.dm +++ b/code/modules/martial_arts/tajara.dm @@ -107,4 +107,4 @@ #undef EYE_RAKE #undef CLAW_PUNCH -#undef RRAKNARR_STAB \ No newline at end of file +#undef RRAKNARR_STAB diff --git a/code/modules/martial_arts/unathi.dm b/code/modules/martial_arts/unathi.dm index 3219ca52f28..3a02e10bed0 100644 --- a/code/modules/martial_arts/unathi.dm +++ b/code/modules/martial_arts/unathi.dm @@ -107,4 +107,4 @@ #undef TAIL_SWEEP #undef SWIFT_DISARM -#undef HAMMERING_STRIKE \ No newline at end of file +#undef HAMMERING_STRIKE diff --git a/code/modules/materials/_material_def.dm b/code/modules/materials/_material_def.dm index b0678001645..6dcd23e47a4 100644 --- a/code/modules/materials/_material_def.dm +++ b/code/modules/materials/_material_def.dm @@ -1 +1 @@ -#define BUILD_AMT "build_amt" // just a silly string intended to show that a structure recipe makes use of build_amt \ No newline at end of file +#define BUILD_AMT "build_amt" // just a silly string intended to show that a structure recipe makes use of build_amt diff --git a/code/modules/materials/~material_def.dm b/code/modules/materials/~material_def.dm index 2854525b101..5d5960ecf0c 100644 --- a/code/modules/materials/~material_def.dm +++ b/code/modules/materials/~material_def.dm @@ -1 +1 @@ -#undef BUILD_AMT \ No newline at end of file +#undef BUILD_AMT diff --git a/code/modules/merchant/merchant_machinery.dm b/code/modules/merchant/merchant_machinery.dm index 7c4fb06f912..c492f592ece 100644 --- a/code/modules/merchant/merchant_machinery.dm +++ b/code/modules/merchant/merchant_machinery.dm @@ -19,4 +19,4 @@ for(var/a in T) if(a == src || (!istype(a,/obj) && !istype(a,/mob/living)) || istype(a,/obj/effect)) continue - . += a \ No newline at end of file + . += a diff --git a/code/modules/mining/machine_input_output_plates.dm b/code/modules/mining/machine_input_output_plates.dm index f4f9184be33..8ae12d15258 100644 --- a/code/modules/mining/machine_input_output_plates.dm +++ b/code/modules/mining/machine_input_output_plates.dm @@ -22,4 +22,4 @@ /obj/machinery/mineral/output/Initialize() . = ..() - icon_state = "blank" \ No newline at end of file + icon_state = "blank" diff --git a/code/modules/mining/ore_datum.dm b/code/modules/mining/ore_datum.dm index 870f9834b7c..a08eaf272d6 100644 --- a/code/modules/mining/ore_datum.dm +++ b/code/modules/mining/ore_datum.dm @@ -141,4 +141,4 @@ var/global/list/ore_data = list() smelts_to = MATERIAL_TRITIUM compresses_to = MATERIAL_HYDROGEN_METALLIC scan_icon = "mineral_rare" - worth = 30 \ No newline at end of file + worth = 30 diff --git a/code/modules/mob/abstract/freelook/ai/cameranet.dm b/code/modules/mob/abstract/freelook/ai/cameranet.dm index 81e3df31ae3..28f17dad205 100644 --- a/code/modules/mob/abstract/freelook/ai/cameranet.dm +++ b/code/modules/mob/abstract/freelook/ai/cameranet.dm @@ -36,4 +36,4 @@ var/mob/living/silicon/AI = c return ..(AI, AI.stat != DEAD) else - ..() \ No newline at end of file + ..() diff --git a/code/modules/mob/abstract/freelook/visualnet.dm b/code/modules/mob/abstract/freelook/visualnet.dm index f85d54519f7..ccfe714ddde 100644 --- a/code/modules/mob/abstract/freelook/visualnet.dm +++ b/code/modules/mob/abstract/freelook/visualnet.dm @@ -182,4 +182,4 @@ if(cameranet.is_chunk_generated(x, y, z)) var/datum/chunk/chunk = cameranet.get_chunk(x, y, z) - chunk.visibility_changed(TRUE) \ No newline at end of file + chunk.visibility_changed(TRUE) diff --git a/code/modules/mob/gender.dm b/code/modules/mob/gender.dm index cd410ab8c93..ca42bf5f6d7 100644 --- a/code/modules/mob/gender.dm +++ b/code/modules/mob/gender.dm @@ -75,4 +75,4 @@ var/list/datum/gender/gender_datums = list() /atom/proc/get_pronoun(var/wordtype) var/gender_to_use = get_gender() - return gender_datums[gender_to_use][wordtype] \ No newline at end of file + return gender_datums[gender_to_use][wordtype] diff --git a/code/modules/mob/living/carbon/alien/death.dm b/code/modules/mob/living/carbon/alien/death.dm index 3efe277b01a..810aa61fce9 100644 --- a/code/modules/mob/living/carbon/alien/death.dm +++ b/code/modules/mob/living/carbon/alien/death.dm @@ -1,4 +1,4 @@ /mob/living/carbon/alien/death(gibbed) if(!gibbed && icon_dead) icon_state = icon_dead - return ..(gibbed,death_msg) \ No newline at end of file + return ..(gibbed,death_msg) diff --git a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm index 13f3b928535..19515e399eb 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm @@ -43,4 +43,4 @@ if(istype(W, /obj/item/material/knife) || istype(W, /obj/item/material/kitchen/utensil/knife)) harvest(user) return - ..(W, user) \ No newline at end of file + ..(W, user) diff --git a/code/modules/mob/living/carbon/alien/diona/update_icons.dm b/code/modules/mob/living/carbon/alien/diona/update_icons.dm index c77ac9b926c..30737ebe6f6 100644 --- a/code/modules/mob/living/carbon/alien/diona/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/diona/update_icons.dm @@ -16,4 +16,4 @@ add_overlay(flower_image) if(hat) - add_overlay(get_hat_icon(hat, 0, -8)) \ No newline at end of file + add_overlay(get_hat_icon(hat, 0, -8)) diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index b5f6520d817..f02862bb4c7 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -17,4 +17,4 @@ slot_l_hand_str = 'icons/mob/items/lefthand_books.dmi', slot_r_hand_str = 'icons/mob/items/righthand_books.dmi' ) - can_prepare = 0 \ No newline at end of file + can_prepare = 0 diff --git a/code/modules/mob/living/carbon/brain/death.dm b/code/modules/mob/living/carbon/brain/death.dm index b4e77b8ee0d..f431ee560c2 100644 --- a/code/modules/mob/living/carbon/brain/death.dm +++ b/code/modules/mob/living/carbon/brain/death.dm @@ -11,4 +11,4 @@ if(loc) if(istype(loc,/obj/item/organ/internal/brain)) qdel(loc)//Gets rid of the brain item - ..(null,1) \ No newline at end of file + ..(null,1) diff --git a/code/modules/mob/living/carbon/brain/robot.dm b/code/modules/mob/living/carbon/brain/robot.dm index 625f45754f6..2772155f90b 100644 --- a/code/modules/mob/living/carbon/brain/robot.dm +++ b/code/modules/mob/living/carbon/brain/robot.dm @@ -37,4 +37,4 @@ return /obj/item/device/mmi/digital/robot/attack_self(mob/user) - return \ No newline at end of file + return diff --git a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm index 8b6c8eb4039..8bef8c6adfd 100644 --- a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm +++ b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm @@ -138,4 +138,4 @@ H.equip_to_slot_or_del(S,slot_shoes) /datum/species/get_species_record_sex(var/mob/living/carbon/human/H) - return H.pronouns \ No newline at end of file + return H.pronouns diff --git a/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm b/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm index 944f2c606c8..9cdb61de980 100644 --- a/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm @@ -105,14 +105,14 @@ ) has_organ = list( - BP_BRAIN = /obj/item/organ/internal/brain/unathi, - BP_EYES = /obj/item/organ/internal/eyes/unathi, - BP_HEART = /obj/item/organ/internal/heart/unathi, - BP_LIVER = /obj/item/organ/internal/liver/unathi, - BP_LUNGS = /obj/item/organ/internal/lungs/unathi, - BP_KIDNEYS = /obj/item/organ/internal/kidneys/unathi, - BP_STOMACH = /obj/item/organ/internal/stomach/unathi - ) + BP_BRAIN = /obj/item/organ/internal/brain/unathi, + BP_EYES = /obj/item/organ/internal/eyes/unathi, + BP_HEART = /obj/item/organ/internal/heart/unathi, + BP_LIVER = /obj/item/organ/internal/liver/unathi, + BP_LUNGS = /obj/item/organ/internal/lungs/unathi, + BP_KIDNEYS = /obj/item/organ/internal/kidneys/unathi, + BP_STOMACH = /obj/item/organ/internal/stomach/unathi + ) alterable_internal_organs = list(BP_HEART, BP_EYES, BP_LUNGS, BP_LIVER, BP_KIDNEYS, BP_STOMACH) diff --git a/code/modules/mob/living/carbon/human/virtual_reality_mob.dm b/code/modules/mob/living/carbon/human/virtual_reality_mob.dm index 4813d814523..746bbb80e72 100644 --- a/code/modules/mob/living/carbon/human/virtual_reality_mob.dm +++ b/code/modules/mob/living/carbon/human/virtual_reality_mob.dm @@ -2,4 +2,4 @@ /mob/living/carbon/human/virtual_reality/death(gibbed)//the body is deleted when you die to simulate your virtual avatar being deleted ..() - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/modules/mob/living/carbon/slime/_mood.dm b/code/modules/mob/living/carbon/slime/_mood.dm index 4597597bcce..b4c330ab1ff 100644 --- a/code/modules/mob/living/carbon/slime/_mood.dm +++ b/code/modules/mob/living/carbon/slime/_mood.dm @@ -2,4 +2,4 @@ #define SAD "sad" #define ANGRY "angry" #define MISCHIEVOUS "mischevous" -#define HAPPY ":3" \ No newline at end of file +#define HAPPY ":3" diff --git a/code/modules/mob/living/carbon/slime/emote.dm b/code/modules/mob/living/carbon/slime/emote.dm index 699032f5a4e..eac3b6707c8 100644 --- a/code/modules/mob/living/carbon/slime/emote.dm +++ b/code/modules/mob/living/carbon/slime/emote.dm @@ -89,4 +89,4 @@ send_emote(message, m_type) if(updateicon) regenerate_icons() - return \ No newline at end of file + return diff --git a/code/modules/mob/living/carbon/slime/helpers.dm b/code/modules/mob/living/carbon/slime/helpers.dm index 8294bbc02fc..48f7797d278 100644 --- a/code/modules/mob/living/carbon/slime/helpers.dm +++ b/code/modules/mob/living/carbon/slime/helpers.dm @@ -20,4 +20,4 @@ if(victim && !rabid && !attacked && victim.LAssailant && victim.LAssailant != victim) var/real_assailant = victim.LAssailant.resolve() if(real_assailant) - increase_friendship(real_assailant) \ No newline at end of file + increase_friendship(real_assailant) diff --git a/code/modules/mob/living/carbon/slime/hud.dm b/code/modules/mob/living/carbon/slime/hud.dm index c093d61f8cf..bd655f66992 100644 --- a/code/modules/mob/living/carbon/slime/hud.dm +++ b/code/modules/mob/living/carbon/slime/hud.dm @@ -1,2 +1,2 @@ /mob/living/carbon/slime/handle_regular_hud_updates() - return \ No newline at end of file + return diff --git a/code/modules/mob/living/carbon/slime/subtypes.dm b/code/modules/mob/living/carbon/slime/subtypes.dm index 0f686964730..acba5afb5ba 100644 --- a/code/modules/mob/living/carbon/slime/subtypes.dm +++ b/code/modules/mob/living/carbon/slime/subtypes.dm @@ -76,4 +76,4 @@ slime_mutation[2] = colour slime_mutation[3] = colour slime_mutation[4] = colour - return(slime_mutation) \ No newline at end of file + return(slime_mutation) diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index 33905de2309..77d569bfe06 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -17,4 +17,4 @@ . = ..(gibbed,"gives one shrill beep before falling lifeless.") density = TRUE - ghostize(FALSE) \ No newline at end of file + ghostize(FALSE) diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm index c82bd85dbf7..38d0ebe853e 100644 --- a/code/modules/mob/living/silicon/pai/death.dm +++ b/code/modules/mob/living/silicon/pai/death.dm @@ -16,4 +16,4 @@ qdel(mind) ..(gibbed) ghostize() - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm index 4f9cd45991a..576ac71ff13 100644 --- a/code/modules/mob/living/silicon/robot/component.dm +++ b/code/modules/mob/living/silicon/robot/component.dm @@ -326,4 +326,4 @@ name = "radio" desc = "A modular, multi-frequency radio used by robots and exosuits to enable communication systems. Comes with built-in subspace receivers." icon_state = "radio" - icon_state_broken = "radio_broken" \ No newline at end of file + icon_state_broken = "radio_broken" diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm index baeb26dcf8e..18a72f1f047 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm @@ -35,4 +35,4 @@ QDEL_NULL(hat_overlay) update_icon() else - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/mob/living/silicon/robot/drone/drone_damage.dm b/code/modules/mob/living/silicon/robot/drone/drone_damage.dm index ad7c677f72b..2055e965f14 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_damage.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_damage.dm @@ -26,4 +26,4 @@ return fireloss /mob/living/silicon/robot/drone/getBruteLoss() - return bruteloss \ No newline at end of file + return bruteloss diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm index b58aacc4795..728303724c8 100644 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -7,4 +7,4 @@ visible_message(SPAN_WARNING("The power warning light on \the [src] flashes urgently.")) playsound(get_turf(src), 'sound/machines/buzz-two.ogg', 50, 0) else - to_chat(src, SPAN_WARNING("You can only use this emote when you're out of charge.")) \ No newline at end of file + to_chat(src, SPAN_WARNING("You can only use this emote when you're out of charge.")) diff --git a/code/modules/mob/living/silicon/robot/items/_helpers.dm b/code/modules/mob/living/silicon/robot/items/_helpers.dm index 4424bb60aa2..984afcc6e8e 100644 --- a/code/modules/mob/living/silicon/robot/items/_helpers.dm +++ b/code/modules/mob/living/silicon/robot/items/_helpers.dm @@ -8,4 +8,4 @@ return /obj/item/proc/on_module_deactivate(var/mob/living/silicon/robot/R) - return \ No newline at end of file + return diff --git a/code/modules/mob/living/silicon/robot/items/electric_arm.dm b/code/modules/mob/living/silicon/robot/items/electric_arm.dm index 2b21b7ba738..99a365519c4 100644 --- a/code/modules/mob/living/silicon/robot/items/electric_arm.dm +++ b/code/modules/mob/living/silicon/robot/items/electric_arm.dm @@ -17,4 +17,4 @@ M.apply_effect(5, STUTTER) M.stun_effect_act(0, 70, check_zone(hit_zone), src) - return FALSE \ No newline at end of file + return FALSE diff --git a/code/modules/mob/living/silicon/robot/items/form_printer.dm b/code/modules/mob/living/silicon/robot/items/form_printer.dm index 5e226da794f..8ecb455a45c 100644 --- a/code/modules/mob/living/silicon/robot/items/form_printer.dm +++ b/code/modules/mob/living/silicon/robot/items/form_printer.dm @@ -19,4 +19,4 @@ /obj/item/form_printer/proc/deploy_paper(var/turf/T, var/mob/user) T.visible_message(SPAN_NOTICE("\The [user] dispenses a sheet of crisp white paper.")) - new /obj/item/paper(T) \ No newline at end of file + new /obj/item/paper(T) diff --git a/code/modules/mob/living/silicon/robot/items/guns/ballistic_cannon.dm b/code/modules/mob/living/silicon/robot/items/guns/ballistic_cannon.dm index ba959e357f3..16b4deecd1f 100644 --- a/code/modules/mob/living/silicon/robot/items/guns/ballistic_cannon.dm +++ b/code/modules/mob/living/silicon/robot/items/guns/ballistic_cannon.dm @@ -12,4 +12,4 @@ self_recharge = TRUE use_external_power = TRUE recharge_time = 5 - needspin = FALSE \ No newline at end of file + needspin = FALSE diff --git a/code/modules/mob/living/silicon/robot/items/modules/sight.dm b/code/modules/mob/living/silicon/robot/items/modules/sight.dm index 967953f732f..612fbc97a9a 100644 --- a/code/modules/mob/living/silicon/robot/items/modules/sight.dm +++ b/code/modules/mob/living/silicon/robot/items/modules/sight.dm @@ -28,4 +28,4 @@ /obj/item/borg/sight/material name = "\proper material scanner vision" - sight_mode = BORGMATERIAL \ No newline at end of file + sight_mode = BORGMATERIAL diff --git a/code/modules/mob/living/silicon/robot/items/overdrive.dm b/code/modules/mob/living/silicon/robot/items/overdrive.dm index d9335ba01b9..853964922b6 100644 --- a/code/modules/mob/living/silicon/robot/items/overdrive.dm +++ b/code/modules/mob/living/silicon/robot/items/overdrive.dm @@ -1,4 +1,4 @@ /obj/item/borg/overdrive name = "overdrive" icon = 'icons/obj/decals.dmi' - icon_state = "shock" \ No newline at end of file + icon_state = "shock" diff --git a/code/modules/mob/living/silicon/robot/items/robot_id.dm b/code/modules/mob/living/silicon/robot/items/robot_id.dm index 29e78bac0be..f6a2f96e8dc 100644 --- a/code/modules/mob/living/silicon/robot/items/robot_id.dm +++ b/code/modules/mob/living/silicon/robot/items/robot_id.dm @@ -3,4 +3,4 @@ name = "access code transmission device" icon_state = "id-robot" desc = "A circuit grafted onto the bottom of an ID card. It is used to transmit access codes into other robot chassis, \ - allowing you to lock and unlock other robots' panels." \ No newline at end of file + allowing you to lock and unlock other robots' panels." diff --git a/code/modules/mob/living/silicon/robot/items/robot_pen.dm b/code/modules/mob/living/silicon/robot/items/robot_pen.dm index f472023112e..92cf03f39a5 100644 --- a/code/modules/mob/living/silicon/robot/items/robot_pen.dm +++ b/code/modules/mob/living/silicon/robot/items/robot_pen.dm @@ -36,4 +36,4 @@ add_fingerprint(user) #undef WRITE_PAPER -#undef RENAME_PAPER \ No newline at end of file +#undef RENAME_PAPER diff --git a/code/modules/mob/living/silicon/robot/items/robot_tools.dm b/code/modules/mob/living/silicon/robot/items/robot_tools.dm index 5b98876e99b..991ec09469c 100644 --- a/code/modules/mob/living/silicon/robot/items/robot_tools.dm +++ b/code/modules/mob/living/silicon/robot/items/robot_tools.dm @@ -24,4 +24,4 @@ /obj/item/soap/drone name = "integrated soap" desc = "An advanced bar of soap that connects to an internal reservoir of a custodial bot, allowing it to stay wet for longer periods of time." - capacity = 50 \ No newline at end of file + capacity = 50 diff --git a/code/modules/mob/living/silicon/robot/items/robot_tray.dm b/code/modules/mob/living/silicon/robot/items/robot_tray.dm index 9028aa0e8c4..58866896cdb 100644 --- a/code/modules/mob/living/silicon/robot/items/robot_tray.dm +++ b/code/modules/mob/living/silicon/robot/items/robot_tray.dm @@ -24,4 +24,4 @@ spill(user,dropspot) current_weight = 0 - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/mob/living/silicon/robot/items/upgrades/robot_upgrades.dm b/code/modules/mob/living/silicon/robot/items/upgrades/robot_upgrades.dm index b6f2838be31..ee857566e0b 100644 --- a/code/modules/mob/living/silicon/robot/items/upgrades/robot_upgrades.dm +++ b/code/modules/mob/living/silicon/robot/items/upgrades/robot_upgrades.dm @@ -146,4 +146,4 @@ return FALSE R.crisis_override = TRUE - return TRUE \ No newline at end of file + return TRUE diff --git a/code/modules/mob/living/silicon/robot/photos.dm b/code/modules/mob/living/silicon/robot/photos.dm index 345228e3da0..dcf3dc7c176 100644 --- a/code/modules/mob/living/silicon/robot/photos.dm +++ b/code/modules/mob/living/silicon/robot/photos.dm @@ -17,4 +17,4 @@ synced = TRUE if(synced) - to_chat(src, SPAN_NOTICE("Images synced with AI. Local images will be retained in the case of loss of connection with the AI.")) \ No newline at end of file + to_chat(src, SPAN_NOTICE("Images synced with AI. Local images will be retained in the case of loss of connection with the AI.")) diff --git a/code/modules/mob/living/simple_animal/friendly/cosmozoan.dm b/code/modules/mob/living/simple_animal/friendly/cosmozoan.dm index e4a9c803348..b9644c67e21 100644 --- a/code/modules/mob/living/simple_animal/friendly/cosmozoan.dm +++ b/code/modules/mob/living/simple_animal/friendly/cosmozoan.dm @@ -48,4 +48,4 @@ if(loc == target_turf) break step_to(src, target_turf) - sleep(6) \ No newline at end of file + sleep(6) diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index e17cdabe0aa..501e4e40448 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -33,4 +33,4 @@ if(turns_since_move >= turns_per_move) Move(get_step(src,pick(4,8))) turns_since_move = 0 - regenerate_icons() \ No newline at end of file + regenerate_icons() diff --git a/code/modules/mob/living/simple_animal/friendly/tomato.dm b/code/modules/mob/living/simple_animal/friendly/tomato.dm index 6cf7a8d5ba3..69a7c2bebfc 100644 --- a/code/modules/mob/living/simple_animal/friendly/tomato.dm +++ b/code/modules/mob/living/simple_animal/friendly/tomato.dm @@ -17,4 +17,4 @@ melee_damage_upper = 15 melee_damage_lower = 10 attacktext = "mauled" - mob_size = 2 \ No newline at end of file + mob_size = 2 diff --git a/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm b/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm index 9a40c34199c..dc39167b5d6 100644 --- a/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm +++ b/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm @@ -109,4 +109,4 @@ melee_damage_lower = 50 melee_damage_upper = 50 - armor_penetration = 40 \ No newline at end of file + armor_penetration = 40 diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/_command_defines.dm b/code/modules/mob/living/simple_animal/hostile/commanded/_command_defines.dm index 72ae6dc7ee7..3000499e896 100644 --- a/code/modules/mob/living/simple_animal/hostile/commanded/_command_defines.dm +++ b/code/modules/mob/living/simple_animal/hostile/commanded/_command_defines.dm @@ -1,3 +1,3 @@ #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. \ No newline at end of file +#define COMMANDED_MISC 8 //catch all state for misc commands that need one. diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm b/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm index fee752d5046..79b18fb7127 100644 --- a/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm +++ b/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm @@ -150,4 +150,4 @@ if(2) adjustFireLoss(rand(5, 10)) if(3) - adjustFireLoss(rand(3, 5)) \ No newline at end of file + adjustFireLoss(rand(3, 5)) diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon_projectiles.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon_projectiles.dm index 9c1561da7d4..045766b63fe 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon_projectiles.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_beacon_projectiles.dm @@ -22,4 +22,4 @@ incinerate = 5 muzzle_type = /obj/effect/projectile/muzzle/laser/blue tracer_type = /obj/effect/projectile/tracer/laser/blue - impact_type = /obj/effect/projectile/impact/laser/blue \ No newline at end of file + impact_type = /obj/effect/projectile/impact/laser/blue diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_harvester_projectiles.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_harvester_projectiles.dm index c3e9f726725..23f0f53221e 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_harvester_projectiles.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_harvester_projectiles.dm @@ -1,4 +1,4 @@ /obj/item/projectile/beam/hivebot/incendiary/heavy name = "archaic mining laser" damage = 25 - incinerate = 10 \ No newline at end of file + incinerate = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_projectiles.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_projectiles.dm index 0d37f9b2df7..f8e46f09f9e 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_projectiles.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot_projectiles.dm @@ -8,4 +8,4 @@ /obj/item/projectile/bullet/pistol/hivebotspike/needle name = "needle" damage = 5 - armor_penetration = 60 \ No newline at end of file + armor_penetration = 60 diff --git a/code/modules/mob/living/simple_animal/hostile/pra.dm b/code/modules/mob/living/simple_animal/hostile/pra.dm index 99f6498c2e2..298edd6903b 100644 --- a/code/modules/mob/living/simple_animal/hostile/pra.dm +++ b/code/modules/mob/living/simple_animal/hostile/pra.dm @@ -243,4 +243,4 @@ /mob/living/simple_animal/hostile/retaliate/pra_exploration_drone/LostTarget() say("Returning to data gathering.") - return \ No newline at end of file + return diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index a636590d297..597614e8425 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -56,4 +56,4 @@ if(weapon1) new weapon1 (src.loc) qdel(src) - return \ No newline at end of file + return diff --git a/code/modules/mob/living/simple_animal/hostile/spider_queen.dm b/code/modules/mob/living/simple_animal/hostile/spider_queen.dm index c8746256e8e..921ac9eca16 100644 --- a/code/modules/mob/living/simple_animal/hostile/spider_queen.dm +++ b/code/modules/mob/living/simple_animal/hostile/spider_queen.dm @@ -116,4 +116,4 @@ if(M != src) M.apply_damage(50, DAMAGE_BRUTE) M.apply_effect(6, STUN, blocked) - return TRUE \ No newline at end of file + return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 8fa350d7665..efd09155455 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -135,4 +135,4 @@ speed = 0 /mob/living/simple_animal/hostile/syndicate/ranged/space/Allow_Spacemove(var/check_drift = 0) - return \ No newline at end of file + return diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 293d280dee5..d75c43d55ee 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -57,4 +57,4 @@ /mob/living/simple_animal/hostile/tree/death() ..(null,"is hacked into pieces!") new /obj/item/stack/material/wood(loc) - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/modules/mob/living/simple_animal/mechanical/mechanical.dm b/code/modules/mob/living/simple_animal/mechanical/mechanical.dm index cbb61f6aa67..01dd6828c91 100644 --- a/code/modules/mob/living/simple_animal/mechanical/mechanical.dm +++ b/code/modules/mob/living/simple_animal/mechanical/mechanical.dm @@ -23,4 +23,4 @@ return FALSE /mob/living/simple_animal/mechanical/adjustOxyLoss(amount) - return FALSE \ No newline at end of file + return FALSE diff --git a/code/modules/modular_computers/_description.dm b/code/modules/modular_computers/_description.dm index a1557a4a9c5..7eefa135f34 100644 --- a/code/modules/modular_computers/_description.dm +++ b/code/modules/modular_computers/_description.dm @@ -128,4 +128,4 @@ With addition of various antag programs, IDS(Intrusion Detection System) will be If enabled, this system automatically detects any abnormality and triggers a warning that's visible on the NTNet status screen, as well as generating a security log. IDS can be disabled by simple on/off switch in the configuration. -*/ \ No newline at end of file +*/ diff --git a/code/modules/modular_computers/computers/subtypes/dev_pda.dm b/code/modules/modular_computers/computers/subtypes/dev_pda.dm index f92321059bb..b83d4e6da2c 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_pda.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_pda.dm @@ -30,4 +30,4 @@ icon = 'icons/obj/pda_slate.dmi' /obj/item/modular_computer/handheld/pda/smart - icon = 'icons/obj/pda_smart.dmi' \ No newline at end of file + icon = 'icons/obj/pda_smart.dmi' diff --git a/code/modules/modular_computers/computers/subtypes/dev_silicon_subtypes.dm b/code/modules/modular_computers/computers/subtypes/dev_silicon_subtypes.dm index 02c5f30486d..24552bf0cba 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_silicon_subtypes.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_silicon_subtypes.dm @@ -26,4 +26,4 @@ . = ..() hard_drive.store_file(new /datum/computer_file/program/pai_directives(src)) hard_drive.store_file(new /datum/computer_file/program/pai_radio(src)) - hard_drive.store_file(new /datum/computer_file/program/pai_flashlight(src)) \ No newline at end of file + hard_drive.store_file(new /datum/computer_file/program/pai_flashlight(src)) diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm index 4d1177b698f..af420b96d61 100644 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ b/code/modules/modular_computers/file_system/computer_file.dm @@ -50,4 +50,4 @@ var/global/file_uid = 0 if(input_password == password) return TRUE else - return FALSE \ No newline at end of file + return FALSE diff --git a/code/modules/modular_computers/file_system/data.dm b/code/modules/modular_computers/file_system/data.dm index 94905f1632c..121cd9ac3ef 100644 --- a/code/modules/modular_computers/file_system/data.dm +++ b/code/modules/modular_computers/file_system/data.dm @@ -16,4 +16,4 @@ size = max(1, round(length(stored_data) / block_size)) /datum/computer_file/data/logfile - filetype = "LOG" \ No newline at end of file + filetype = "LOG" diff --git a/code/modules/modular_computers/file_system/news_article.dm b/code/modules/modular_computers/file_system/news_article.dm index d04a90c0b63..7e41929b041 100644 --- a/code/modules/modular_computers/file_system/news_article.dm +++ b/code/modules/modular_computers/file_system/news_article.dm @@ -40,4 +40,4 @@ // /datum/computer_file/data/news_article/space/vol_five // filename = "SPACE Magazine vol. 5" // server_file_path = 'news_articles/space_magazine_5.html' -// archived = 0 \ No newline at end of file +// archived = 0 diff --git a/code/modules/modular_computers/file_system/programs/pai/access_lock.dm b/code/modules/modular_computers/file_system/programs/pai/access_lock.dm index 07c39de6238..948c88a2c03 100644 --- a/code/modules/modular_computers/file_system/programs/pai/access_lock.dm +++ b/code/modules/modular_computers/file_system/programs/pai/access_lock.dm @@ -25,4 +25,4 @@ /datum/computer_file/program/pai_access_lock/program_hidden() if(!computer.personal_ai) return TRUE - return FALSE \ No newline at end of file + return FALSE diff --git a/code/modules/modular_computers/file_system/script.dm b/code/modules/modular_computers/file_system/script.dm index 6e766bd2105..94f4db9f806 100644 --- a/code/modules/modular_computers/file_system/script.dm +++ b/code/modules/modular_computers/file_system/script.dm @@ -11,4 +11,4 @@ return temp /datum/computer_file/script/proc/calculate_size() - size = max(1, round(length(code) / block_size)) \ No newline at end of file + size = max(1, round(length(code) / block_size)) diff --git a/code/modules/modular_computers/hardware/ai_slot.dm b/code/modules/modular_computers/hardware/ai_slot.dm index f1f2c1e116d..063f9da5bd2 100644 --- a/code/modules/modular_computers/hardware/ai_slot.dm +++ b/code/modules/modular_computers/hardware/ai_slot.dm @@ -39,4 +39,4 @@ if(stored_card) stored_card.forceMove(get_turf(parent_computer)) parent_computer = null - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/modular_computers/hardware/battery_module.dm b/code/modules/modular_computers/hardware/battery_module.dm index d13bfcc9c2a..71b0cacf059 100644 --- a/code/modules/modular_computers/hardware/battery_module.dm +++ b/code/modules/modular_computers/hardware/battery_module.dm @@ -80,4 +80,4 @@ battery.charge = battery.maxcharge /obj/item/computer_hardware/battery_module/get_cell() - return battery \ No newline at end of file + return battery diff --git a/code/modules/modular_computers/hardware/hardware.dm b/code/modules/modular_computers/hardware/hardware.dm index 173f3f30bcd..ef391d8dfc0 100644 --- a/code/modules/modular_computers/hardware/hardware.dm +++ b/code/modules/modular_computers/hardware/hardware.dm @@ -96,4 +96,4 @@ // Damages the component. Contains necessary checks. Negative damage "heals" the component. /obj/item/computer_hardware/proc/take_damage(var/amount) damage += round(amount) // We want nice rounded numbers here. - damage = between(0, damage, max_damage) // Clamp the value. \ No newline at end of file + damage = between(0, damage, max_damage) // Clamp the value. diff --git a/code/modules/modular_computers/hardware/nano_printer.dm b/code/modules/modular_computers/hardware/nano_printer.dm index c82548df640..91be2ea1fec 100644 --- a/code/modules/modular_computers/hardware/nano_printer.dm +++ b/code/modules/modular_computers/hardware/nano_printer.dm @@ -46,4 +46,4 @@ if(parent_computer?.nano_printer == src) parent_computer.nano_printer = null parent_computer = null - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm index 3d71f78c6c8..53f39ad5829 100644 --- a/code/modules/modular_computers/hardware/network_card.dm +++ b/code/modules/modular_computers/hardware/network_card.dm @@ -109,4 +109,4 @@ var/global/ntnet_card_uid = 1 if(parent_computer?.network_card == src) parent_computer.network_card = null parent_computer = null - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/modular_computers/hardware/portable_hard_drive.dm b/code/modules/modular_computers/hardware/portable_hard_drive.dm index 1d5df0d16c4..fcd2912d9fa 100644 --- a/code/modules/modular_computers/hardware/portable_hard_drive.dm +++ b/code/modules/modular_computers/hardware/portable_hard_drive.dm @@ -29,4 +29,4 @@ /obj/item/computer_hardware/hard_drive/portable/New() ..() stored_files = list() - recalculate_size() \ No newline at end of file + recalculate_size() diff --git a/code/modules/modular_computers/hardware/portable_hard_drive_presets.dm b/code/modules/modular_computers/hardware/portable_hard_drive_presets.dm index 96ee9174a1f..fee49b6f236 100644 --- a/code/modules/modular_computers/hardware/portable_hard_drive_presets.dm +++ b/code/modules/modular_computers/hardware/portable_hard_drive_presets.dm @@ -48,4 +48,4 @@ continue // Check whether the program should be available for station/antag download, if yes, add it to lists. if(prog.available_on_ntnet) - new /obj/item/computer_hardware/hard_drive/portable/backup(src, prog.filename) \ No newline at end of file + new /obj/item/computer_hardware/hard_drive/portable/backup(src, prog.filename) diff --git a/code/modules/modular_computers/hardware/processor_unit.dm b/code/modules/modular_computers/hardware/processor_unit.dm index 6c30c10c665..0b947884920 100644 --- a/code/modules/modular_computers/hardware/processor_unit.dm +++ b/code/modules/modular_computers/hardware/processor_unit.dm @@ -46,4 +46,4 @@ hardware_size = 1 power_usage = 75 max_idle_programs = 3 - origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3) \ No newline at end of file + origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3) diff --git a/code/modules/ntsl2/guide.dm b/code/modules/ntsl2/guide.dm index fe065920d04..7e65abcdac7 100644 --- a/code/modules/ntsl2/guide.dm +++ b/code/modules/ntsl2/guide.dm @@ -4,4 +4,4 @@ item_state ="book3" author = "Collaborative author group" title = "Guide to NTSL2++" - sub_page = "Guide_to_NTSL2%2B%2B" \ No newline at end of file + sub_page = "Guide_to_NTSL2%2B%2B" diff --git a/code/modules/organs/internal/species/diona.dm b/code/modules/organs/internal/species/diona.dm index fe92a8090fb..7b60237f5bf 100644 --- a/code/modules/organs/internal/species/diona.dm +++ b/code/modules/organs/internal/species/diona.dm @@ -57,4 +57,4 @@ /obj/item/organ/internal/stomach/diona name = "digestion cavity" - should_process_alcohol = FALSE \ No newline at end of file + should_process_alcohol = FALSE diff --git a/code/modules/organs/internal/species/unathi.dm b/code/modules/organs/internal/species/unathi.dm index cf22388ce3a..2d5f17d9249 100644 --- a/code/modules/organs/internal/species/unathi.dm +++ b/code/modules/organs/internal/species/unathi.dm @@ -25,4 +25,4 @@ /obj/item/organ/internal/eyes/unathi name = "reptilian eyes" desc = "A pair of reptilian eyes. The pupil is slit and never dialating; you can almost feel it staring at you." - icon = 'icons/obj/organs/unathi_organs.dmi' \ No newline at end of file + icon = 'icons/obj/organs/unathi_organs.dmi' diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm index b08fbab1b5f..11149c42199 100644 --- a/code/modules/organs/robolimbs.dm +++ b/code/modules/organs/robolimbs.dm @@ -153,4 +153,4 @@ var/global/datum/robolimb/basic_robolimb desc = "This limb design is from old Sedantis, still manufactured by the Hives when providing maintenace to most of the basic Vaurcesian bioforms." icon = 'icons/mob/human_races/vaurca/r_vaurcalimbs.dmi' species_can_use = list(SPECIES_VAURCA_WORKER, SPECIES_VAURCA_WARRIOR) - allows_internal = FALSE \ No newline at end of file + allows_internal = FALSE diff --git a/code/modules/organs/subtypes/tajara.dm b/code/modules/organs/subtypes/tajara.dm index 0d856e99af2..dd898f99c75 100644 --- a/code/modules/organs/subtypes/tajara.dm +++ b/code/modules/organs/subtypes/tajara.dm @@ -54,4 +54,4 @@ /obj/item/organ/external/hand/right/tesla_body dislocated = -1 encased = "support frame" - robotize_type = PROSTHETIC_TESLA_BODY \ No newline at end of file + robotize_type = PROSTHETIC_TESLA_BODY diff --git a/code/modules/organs/subtypes/techno_golem.dm b/code/modules/organs/subtypes/techno_golem.dm index 75ffaa648c3..2901fa0d7e2 100644 --- a/code/modules/organs/subtypes/techno_golem.dm +++ b/code/modules/organs/subtypes/techno_golem.dm @@ -31,4 +31,4 @@ min_broken_damage = 125 amputation_point = "locomotion joint" joint = "locomotor" - gendered_icon = FALSE \ No newline at end of file + gendered_icon = FALSE diff --git a/code/modules/organs/subtypes/unbreakable.dm b/code/modules/organs/subtypes/unbreakable.dm index 9fc70fb376d..d061eb9bd19 100644 --- a/code/modules/organs/subtypes/unbreakable.dm +++ b/code/modules/organs/subtypes/unbreakable.dm @@ -46,4 +46,4 @@ /obj/item/organ/external/head/unbreakable/revenant/get_additional_images(var/mob/living/carbon/human/H) var/image/return_image = image(H.species.eyes_icons, H, "[H.species.eyes]_glow", EFFECTS_ABOVE_LIGHTING_LAYER) return_image.appearance_flags = KEEP_APART - return list(return_image) \ No newline at end of file + return list(return_image) diff --git a/code/modules/overmap/exoplanets/decor/objs/monolith.dm b/code/modules/overmap/exoplanets/decor/objs/monolith.dm index 075a9af8efa..fe50b81fa05 100644 --- a/code/modules/overmap/exoplanets/decor/objs/monolith.dm +++ b/code/modules/overmap/exoplanets/decor/objs/monolith.dm @@ -29,4 +29,4 @@ var/turf/simulated/floor/exoplanet/T = get_turf(src) if(istype(T)) var/image/I = overlay_image(icon, "dugin", T.dirt_color, RESET_COLOR) - add_overlay(I) \ No newline at end of file + add_overlay(I) diff --git a/code/modules/overmap/ship_weaponry/weaponry/blaster.dm b/code/modules/overmap/ship_weaponry/weaponry/blaster.dm index fc4b22f5071..be0439ac576 100644 --- a/code/modules/overmap/ship_weaponry/weaponry/blaster.dm +++ b/code/modules/overmap/ship_weaponry/weaponry/blaster.dm @@ -37,4 +37,4 @@ explosion(target, 2, 5, 7) /obj/machinery/ammunition_loader/blaster - name = "mining blaster loader" \ No newline at end of file + name = "mining blaster loader" diff --git a/code/modules/overmap/ship_weaponry/weaponry/longbow.dm b/code/modules/overmap/ship_weaponry/weaponry/longbow.dm index d41521ac0ac..d4284dec003 100644 --- a/code/modules/overmap/ship_weaponry/weaponry/longbow.dm +++ b/code/modules/overmap/ship_weaponry/weaponry/longbow.dm @@ -49,4 +49,4 @@ target.ex_act(1) if(!QDELING(target) && target.density) qdel(target) - return TRUE \ No newline at end of file + return TRUE diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index d54a2e2d77a..192750cd5dc 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -231,4 +231,4 @@ R.stamped = new R.stamped += /obj/item/stamp R.overlays += stampoverlay - R.stamps += "
    This paper has been stamped as \"TOP SECRET\"." \ No newline at end of file + R.stamps += "
    This paper has been stamped as \"TOP SECRET\"." diff --git a/code/modules/power/profiling.dm b/code/modules/power/profiling.dm index 3eacfe71f2d..4df8590b494 100644 --- a/code/modules/power/profiling.dm +++ b/code/modules/power/profiling.dm @@ -68,4 +68,4 @@ var/global/list/power_update_requests_by_area = list() to_chat(usr, "Total profiling time: [power_profiled_time] ticks") to_chat(usr, "Total profiling time: [power_profiled_time] ticks") for (var/A in power_update_requests_by_area) - to_chat(usr, "[A] = [power_update_requests_by_area[A]]") \ No newline at end of file + to_chat(usr, "[A] = [power_update_requests_by_area[A]]") diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index 1d733fdcda2..6dda3247f5c 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -114,4 +114,4 @@ build_path = /obj/machinery/power/grounding_rod origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) req_components = list("/obj/item/stock_parts/capacitor" = 1) - board_type = "machine" \ No newline at end of file + board_type = "machine" diff --git a/code/modules/projectiles/guns/energy/freezeray.dm b/code/modules/projectiles/guns/energy/freezeray.dm index d1461de8234..c2f7045bd19 100644 --- a/code/modules/projectiles/guns/energy/freezeray.dm +++ b/code/modules/projectiles/guns/energy/freezeray.dm @@ -17,4 +17,4 @@ firemodes = list( list(mode_name="freeze", projectile_type= /obj/item/projectile/beam/freezer, fire_sound='sound/weapons/pulse3.ogg'), list(mode_name="ice bolt", projectile_type= /obj/item/projectile/ice, fire_sound='sound/weapons/crossbow.ogg') - ) \ No newline at end of file + ) diff --git a/code/modules/projectiles/guns/energy/magic.dm b/code/modules/projectiles/guns/energy/magic.dm index 6cf02be9b2f..2800ac60e53 100644 --- a/code/modules/projectiles/guns/energy/magic.dm +++ b/code/modules/projectiles/guns/energy/magic.dm @@ -33,4 +33,4 @@ return 1 /obj/item/gun/energy/wand/toy - origin_tech = null \ No newline at end of file + origin_tech = null diff --git a/code/modules/projectiles/guns/energy/temperature.dm b/code/modules/projectiles/guns/energy/temperature.dm index c61a86cae6c..49c9001fc80 100644 --- a/code/modules/projectiles/guns/energy/temperature.dm +++ b/code/modules/projectiles/guns/energy/temperature.dm @@ -25,4 +25,4 @@ if (..()) return 1 usr.set_machine(src) - src.add_fingerprint(usr) \ No newline at end of file + src.add_fingerprint(usr) diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index e4ea744a3ed..63f9a412528 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -327,4 +327,4 @@ name = "bone dart" damage = 10 armor_penetration = 10 - check_armor = "bullet" \ No newline at end of file + check_armor = "bullet" diff --git a/code/modules/projectiles/targeting/targeting_client.dm b/code/modules/projectiles/targeting/targeting_client.dm index 92eff7b2ced..04ac37226c7 100644 --- a/code/modules/projectiles/targeting/targeting_client.dm +++ b/code/modules/projectiles/targeting/targeting_client.dm @@ -9,4 +9,4 @@ if(!mob) return 1 // Runtime prevention on N00k agents spawning with SMG screen -= mob.item_use_icon screen -= mob.gun_move_icon - screen -= mob.radio_use_icon \ No newline at end of file + screen -= mob.radio_use_icon diff --git a/code/modules/projectiles/targeting/targeting_gun.dm b/code/modules/projectiles/targeting/targeting_gun.dm index 998b1225e78..fdba7f64243 100644 --- a/code/modules/projectiles/targeting/targeting_gun.dm +++ b/code/modules/projectiles/targeting/targeting_gun.dm @@ -18,4 +18,4 @@ if(ismob(A) && user.aiming) user.aiming.aim_at(A, src) return 1 - return 0 \ No newline at end of file + return 0 diff --git a/code/modules/psionics/equipment/psipower_tinker.dm b/code/modules/psionics/equipment/psipower_tinker.dm index adf3bf0b1ef..37b62525e80 100644 --- a/code/modules/psionics/equipment/psipower_tinker.dm +++ b/code/modules/psionics/equipment/psipower_tinker.dm @@ -42,4 +42,4 @@ name = "psychokinetic [emulating]" icon_state = emulating to_chat(owner, SPAN_NOTICE("You begin emulating \a [emulating].")) - playsound(get_turf(src), 'sound/effects/psi/power_fabrication.ogg', 40, TRUE) \ No newline at end of file + playsound(get_turf(src), 'sound/effects/psi/power_fabrication.ogg', 40, TRUE) diff --git a/code/modules/random_map/building/building.dm b/code/modules/random_map/building/building.dm index 98a157c4599..fdaee1ceb6c 100644 --- a/code/modules/random_map/building/building.dm +++ b/code/modules/random_map/building/building.dm @@ -52,4 +52,4 @@ possible_doors -= placing_door target_map.map[placing_door] = DOOR_CHAR - return \ No newline at end of file + return diff --git a/code/modules/random_map/mazes/maze_cell.dm b/code/modules/random_map/mazes/maze_cell.dm index 0b4fa1ac869..6235adcc8af 100644 --- a/code/modules/random_map/mazes/maze_cell.dm +++ b/code/modules/random_map/mazes/maze_cell.dm @@ -15,4 +15,4 @@ var/maze_cell_count = 0 x = nx y = ny ox = nox - oy = noy \ No newline at end of file + oy = noy diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm index 3ab34c9ab8c..3ef220470ce 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm @@ -215,4 +215,4 @@ /singleton/reagent/fuel/touch_obj(var/obj/O, var/amount, var/datum/reagents/holder) if(istype(O, /obj/structure/bonfire)) var/obj/structure/bonfire/B = O - B.fuel = max(0, B.fuel + (15 * amount)) \ No newline at end of file + B.fuel = max(0, B.fuel + (15 * amount)) diff --git a/code/modules/reagents/dispenser/cartridge_spawn.dm b/code/modules/reagents/dispenser/cartridge_spawn.dm index b66d461e87d..24312492a72 100644 --- a/code/modules/reagents/dispenser/cartridge_spawn.dm +++ b/code/modules/reagents/dispenser/cartridge_spawn.dm @@ -30,4 +30,4 @@ C.reagents.add_reagent(reagent, C.volume) var/singleton/reagent/R = GET_SINGLETON(reagent) C.setLabel(R.name) - log_admin("[key_name(usr)] spawned a [size] reagent container containing [reagent] at ([usr.x],[usr.y],[usr.z])",admin_key=key_name(usr)) \ No newline at end of file + log_admin("[key_name(usr)] spawned a [size] reagent container containing [reagent] at ([usr.x],[usr.y],[usr.z])",admin_key=key_name(usr)) diff --git a/code/modules/reagents/dispenser/coffeebeans.dm b/code/modules/reagents/dispenser/coffeebeans.dm index 1a21998ed23..074bdb2044c 100644 --- a/code/modules/reagents/dispenser/coffeebeans.dm +++ b/code/modules/reagents/dispenser/coffeebeans.dm @@ -12,4 +12,4 @@ possible_transfer_amounts = list(20, 40) unacidable = 1 - spawn_reagent = /singleton/reagent/drink/coffee/espresso \ No newline at end of file + spawn_reagent = /singleton/reagent/drink/coffee/espresso diff --git a/code/modules/reagents/reagent_containers/food/snacks/cultural/human.dm b/code/modules/reagents/reagent_containers/food/snacks/cultural/human.dm index 70fbf4dea95..b24769e7efc 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/cultural/human.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/cultural/human.dm @@ -396,4 +396,4 @@ reagents_to_add = list(/singleton/reagent/nutriment/ = 3) reagent_data = list(/singleton/reagent/nutriment = list("blue raspberry" = 5)) drop_sound = 'sound/items/drop/glass.ogg' - pickup_sound = 'sound/items/pickup/glass.ogg' \ No newline at end of file + pickup_sound = 'sound/items/pickup/glass.ogg' diff --git a/code/modules/reagents/reagent_containers/food/snacks/cultural/vaurca.dm b/code/modules/reagents/reagent_containers/food/snacks/cultural/vaurca.dm index ef5be42d277..caae0638839 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/cultural/vaurca.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/cultural/vaurca.dm @@ -183,4 +183,4 @@ /obj/item/reagent_containers/food/snacks/vkrexiwrap/veggie desc = "A food invented by Zo'ra Queenless with the intent of appealing to humans, the v'krexi wrap is similar to a burrito but with a special sauce extracted from v'krexi. This one is filled with veggies." - icon_state = "vkrexiwrap_veggie" \ No newline at end of file + icon_state = "vkrexiwrap_veggie" diff --git a/code/modules/reagents/reagent_containers/food/snacks/eggs.dm b/code/modules/reagents/reagent_containers/food/snacks/eggs.dm index cd8b23f7883..dcee8770375 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/eggs.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/eggs.dm @@ -199,4 +199,4 @@ icon = 'icons/obj/item/reagent_containers/food/egg.dmi' icon_state = "shakshouka" trash = /obj/item/trash/shakshouka - filling_color = "#BB2912" \ No newline at end of file + filling_color = "#BB2912" diff --git a/code/modules/reagents/reagent_containers/food/snacks/noodles.dm b/code/modules/reagents/reagent_containers/food/snacks/noodles.dm index 248b388add6..55995d2f907 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/noodles.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/noodles.dm @@ -82,4 +82,4 @@ /obj/item/reagent_containers/food/snacks/macandcheese/bacon name = "bacon mac and cheese" icon_state = "baconmacandcheese" - reagents_to_add = list(/singleton/reagent/nutriment = 4, /singleton/reagent/nutriment/protein/cheese = 5, /singleton/reagent/water = 5, /singleton/reagent/nutriment/protein = 3) \ No newline at end of file + reagents_to_add = list(/singleton/reagent/nutriment = 4, /singleton/reagent/nutriment/protein/cheese = 5, /singleton/reagent/water = 5, /singleton/reagent/nutriment/protein = 3) diff --git a/code/modules/research/designs/circuit/AI_law_boards.dm b/code/modules/research/designs/circuit/AI_law_boards.dm index 7702b3a3736..02a23ba1dbe 100644 --- a/code/modules/research/designs/circuit/AI_law_boards.dm +++ b/code/modules/research/designs/circuit/AI_law_boards.dm @@ -72,4 +72,4 @@ /datum/design/circuit/aimodule/core/tyrant name = "T.Y.R.A.N.T." req_tech = list(TECH_DATA = 4, TECH_ILLEGAL = 2, TECH_MATERIAL = 6) - build_path = /obj/item/aiModule/tyrant \ No newline at end of file + build_path = /obj/item/aiModule/tyrant diff --git a/code/modules/research/designs/circuit/hardsuit_circuits.dm b/code/modules/research/designs/circuit/hardsuit_circuits.dm index 5934303934d..5461e8dd6d6 100644 --- a/code/modules/research/designs/circuit/hardsuit_circuits.dm +++ b/code/modules/research/designs/circuit/hardsuit_circuits.dm @@ -62,4 +62,4 @@ /datum/design/circuit/hardsuit/hacker_target name = "Cybersuit Hardsuit Control And Targeting Board" req_tech = list(TECH_DATA = 6, TECH_COMBAT = 3, TECH_ILLEGAL = 3) - build_path = /obj/item/circuitboard/rig_assembly/illegal/targeting/hacker \ No newline at end of file + build_path = /obj/item/circuitboard/rig_assembly/illegal/targeting/hacker diff --git a/code/modules/research/designs/circuit/mecha_upgrades.dm b/code/modules/research/designs/circuit/mecha_upgrades.dm index f111c8f94ce..affd9700541 100644 --- a/code/modules/research/designs/circuit/mecha_upgrades.dm +++ b/code/modules/research/designs/circuit/mecha_upgrades.dm @@ -16,4 +16,4 @@ /datum/design/circuit/exosuit_upgrade/remote/ai name = "AI Remote Control" req_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 4, TECH_MATERIAL = 4) - build_path = /obj/item/remote_mecha/ai \ No newline at end of file + build_path = /obj/item/remote_mecha/ai diff --git a/code/modules/research/designs/circuit/mining_circuits.dm b/code/modules/research/designs/circuit/mining_circuits.dm index aa99ed467fd..caab0d93a93 100644 --- a/code/modules/research/designs/circuit/mining_circuits.dm +++ b/code/modules/research/designs/circuit/mining_circuits.dm @@ -28,4 +28,4 @@ /datum/design/circuit/machine/mining/stacking_machine_console name = "Ore Stacking Console" - build_path = /obj/item/circuitboard/stacking_console \ No newline at end of file + build_path = /obj/item/circuitboard/stacking_console diff --git a/code/modules/research/designs/circuit/misc_electronics.dm b/code/modules/research/designs/circuit/misc_electronics.dm index 76e4c70746f..aca035444bf 100644 --- a/code/modules/research/designs/circuit/misc_electronics.dm +++ b/code/modules/research/designs/circuit/misc_electronics.dm @@ -5,4 +5,4 @@ name = "Secure Airlock Electronics" desc = "Allows for the construction of a tamper-resistant airlock electronics." req_tech = list(TECH_DATA = 3) - build_path = /obj/item/airlock_electronics/secure \ No newline at end of file + build_path = /obj/item/airlock_electronics/secure diff --git a/code/modules/research/designs/circuit/shield_designs.dm b/code/modules/research/designs/circuit/shield_designs.dm index c9e6b76d82b..67aff4c326f 100644 --- a/code/modules/research/designs/circuit/shield_designs.dm +++ b/code/modules/research/designs/circuit/shield_designs.dm @@ -15,4 +15,4 @@ name = "Capacitor" desc = "Allows for the construction of a shield capacitor circuit board." req_tech = list(TECH_MAGNET = 3, TECH_POWER = 4) - build_path = /obj/item/circuitboard/shield_cap \ No newline at end of file + build_path = /obj/item/circuitboard/shield_cap diff --git a/code/modules/research/designs/designs.dm b/code/modules/research/designs/designs.dm index d20487f923c..de2dc7767d5 100644 --- a/code/modules/research/designs/designs.dm +++ b/code/modules/research/designs/designs.dm @@ -62,4 +62,4 @@ other types of metals and chemistry for reagents). return new build_path(newloc) /datum/design/item - build_type = PROTOLATHE \ No newline at end of file + build_type = PROTOLATHE diff --git a/code/modules/research/designs/mechfab/hardsuit/rigs.dm b/code/modules/research/designs/mechfab/hardsuit/rigs.dm index e5b743ad4f5..1e248fbd9b9 100644 --- a/code/modules/research/designs/mechfab/hardsuit/rigs.dm +++ b/code/modules/research/designs/mechfab/hardsuit/rigs.dm @@ -53,4 +53,4 @@ desc = "An assembly for an advanced powered armor suit with many cyberwarfare enhancements. Comes with built-in insulated gloves for safely tampering with electronics." build_path = /obj/item/rig_assembly/combat/illegal/hacker req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3, TECH_MAGNET = 2, TECH_POWER = 3, TECH_COMBAT = 3, TECH_ILLEGAL = 3) - materials = list(DEFAULT_WALL_MATERIAL = 25000, MATERIAL_GLASS = 12500, MATERIAL_GOLD = 2500, MATERIAL_SILVER = 3500, MATERIAL_URANIUM = 5550) \ No newline at end of file + materials = list(DEFAULT_WALL_MATERIAL = 25000, MATERIAL_GLASS = 12500, MATERIAL_GOLD = 2500, MATERIAL_SILVER = 3500, MATERIAL_URANIUM = 5550) diff --git a/code/modules/research/designs/mechfab/prosthetics/internal.dm b/code/modules/research/designs/mechfab/prosthetics/internal.dm index 9aafb0aad4d..73c6b78abeb 100644 --- a/code/modules/research/designs/mechfab/prosthetics/internal.dm +++ b/code/modules/research/designs/mechfab/prosthetics/internal.dm @@ -31,4 +31,4 @@ /datum/design/item/mechfab/prosthetic/internal/stomach name = "Prosthetic Stomach" - build_path = /obj/item/organ/internal/stomach \ No newline at end of file + build_path = /obj/item/organ/internal/stomach diff --git a/code/modules/research/designs/mechfab/robot/robot.dm b/code/modules/research/designs/mechfab/robot/robot.dm index 1dd47aa0414..22a5c1eccdd 100644 --- a/code/modules/research/designs/mechfab/robot/robot.dm +++ b/code/modules/research/designs/mechfab/robot/robot.dm @@ -93,4 +93,4 @@ desc = "Used to boost prevent damage from EMP. Has limited surge preventions." materials = list(DEFAULT_WALL_MATERIAL = 20000, MATERIAL_GLASS = 6000, MATERIAL_GOLD = 5000, MATERIAL_SILVER = 7500) // Should be expensive req_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_MAGNET = 5, TECH_POWER = 5, TECH_ENGINEERING = 4, TECH_COMBAT = 3) - build_path = /obj/item/robot_parts/robot_component/surge \ No newline at end of file + build_path = /obj/item/robot_parts/robot_component/surge diff --git a/code/modules/research/designs/mechfab/robot/robot_upgrades.dm b/code/modules/research/designs/mechfab/robot/robot_upgrades.dm index db87a193bd6..9cecfd69f70 100644 --- a/code/modules/research/designs/mechfab/robot/robot_upgrades.dm +++ b/code/modules/research/designs/mechfab/robot/robot_upgrades.dm @@ -42,4 +42,4 @@ desc = "Allows cyborg-likes to access weaponry hidden within themselves." req_tech = list(TECH_COMBAT = 4, TECH_ILLEGAL = 3) materials = list(DEFAULT_WALL_MATERIAL = 10000, MATERIAL_GLASS = 15000, MATERIAL_DIAMOND = 10000) - build_path = /obj/item/borg/upgrade/syndicate \ No newline at end of file + build_path = /obj/item/borg/upgrade/syndicate diff --git a/code/modules/research/designs/protolathe/deployable_kits.dm b/code/modules/research/designs/protolathe/deployable_kits.dm index 062cbb1b11a..79e2038c16f 100644 --- a/code/modules/research/designs/protolathe/deployable_kits.dm +++ b/code/modules/research/designs/protolathe/deployable_kits.dm @@ -11,4 +11,4 @@ /datum/design/item/deployable_kit/mech_chair/brig name = "Remote Penal Mech Centre" desc = "A deployable kit of a remote mech chair, capable of listening in to penal remote mech networks." - build_path = /obj/item/deployable_kit/remote_mech/brig \ No newline at end of file + build_path = /obj/item/deployable_kit/remote_mech/brig diff --git a/code/modules/research/designs/protolathe/disk_designs.dm b/code/modules/research/designs/protolathe/disk_designs.dm index 8688bac9d78..fe4dcc69547 100644 --- a/code/modules/research/designs/protolathe/disk_designs.dm +++ b/code/modules/research/designs/protolathe/disk_designs.dm @@ -17,4 +17,4 @@ name = "Flora Data Storage" req_tech = list(TECH_DATA = 1) materials = list(DEFAULT_WALL_MATERIAL = 30, MATERIAL_GLASS = 10) - build_path = /obj/item/disk/botany \ No newline at end of file + build_path = /obj/item/disk/botany diff --git a/code/modules/research/designs/protolathe/integrated_electronics_designs.dm b/code/modules/research/designs/protolathe/integrated_electronics_designs.dm index 61cbdd1e628..6f5084f377d 100644 --- a/code/modules/research/designs/protolathe/integrated_electronics_designs.dm +++ b/code/modules/research/designs/protolathe/integrated_electronics_designs.dm @@ -65,4 +65,4 @@ desc = "Allows the integrated circuit printer to create advanced circuits." req_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 4) materials = list(DEFAULT_WALL_MATERIAL = 2000) - build_path = /obj/item/disk/integrated_circuit/upgrade/advanced \ No newline at end of file + build_path = /obj/item/disk/integrated_circuit/upgrade/advanced diff --git a/code/modules/research/designs/protolathe/mining_designs.dm b/code/modules/research/designs/protolathe/mining_designs.dm index 5bed4db2d41..4edd3e4acb6 100644 --- a/code/modules/research/designs/protolathe/mining_designs.dm +++ b/code/modules/research/designs/protolathe/mining_designs.dm @@ -209,4 +209,4 @@ /datum/design/item/mining/ka_upgrade07 req_tech = list(TECH_POWER = 4,TECH_MAGNET = 4, TECH_DATA = 4) materials = list(DEFAULT_WALL_MATERIAL = 1000, MATERIAL_GLASS = 2000, MATERIAL_GOLD = 1000) - build_path = /obj/item/custom_ka_upgrade/upgrade_chips/explosive \ No newline at end of file + build_path = /obj/item/custom_ka_upgrade/upgrade_chips/explosive diff --git a/code/modules/research/designs/protolathe/modular_gun_designs.dm b/code/modules/research/designs/protolathe/modular_gun_designs.dm index ef25415e8e8..f3970381391 100644 --- a/code/modules/research/designs/protolathe/modular_gun_designs.dm +++ b/code/modules/research/designs/protolathe/modular_gun_designs.dm @@ -247,4 +247,4 @@ /datum/design/item/modular_weapon/freezing_ray req_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 5, TECH_MATERIAL = 4) materials = list(DEFAULT_WALL_MATERIAL = 2000, MATERIAL_GLASS = 1000, MATERIAL_URANIUM = 500) - build_path = /obj/item/laser_components/modulator/freeze \ No newline at end of file + build_path = /obj/item/laser_components/modulator/freeze diff --git a/code/modules/research/designs/protolathe/stock_parts_designs.dm b/code/modules/research/designs/protolathe/stock_parts_designs.dm index 6ba34ce2769..be22f28f819 100644 --- a/code/modules/research/designs/protolathe/stock_parts_designs.dm +++ b/code/modules/research/designs/protolathe/stock_parts_designs.dm @@ -129,4 +129,4 @@ desc = "A component used in telecomms machinery construction." req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5, TECH_BLUESPACE = 3) materials = list(MATERIAL_GLASS = 100, MATERIAL_SILVER = 10, MATERIAL_URANIUM = 15) - build_path = /obj/item/stock_parts/subspace/transmitter \ No newline at end of file + build_path = /obj/item/stock_parts/subspace/transmitter diff --git a/code/modules/research/rd-readme.dm b/code/modules/research/rd-readme.dm index b089c082e1b..153e768bac6 100644 --- a/code/modules/research/rd-readme.dm +++ b/code/modules/research/rd-readme.dm @@ -29,4 +29,4 @@ Each tech path should have at LEAST one item at every level (levels 1 - 15). Thi researching. Existing tech (ie, anything you can find on the station or get from the quartermaster) shouldn't go higher then level 5 or 7. Everything past that should be stuff you research. -*/ \ No newline at end of file +*/ diff --git a/code/modules/research/xenoarchaeology/readme.dm b/code/modules/research/xenoarchaeology/readme.dm index c5aa7a2f800..92cba12583f 100644 --- a/code/modules/research/xenoarchaeology/readme.dm +++ b/code/modules/research/xenoarchaeology/readme.dm @@ -2,4 +2,4 @@ //coming soon //there'll probably be some stuff on the wiki at some point -//original code from alfie275 / lunacode, artifacts are from isaidno \ No newline at end of file +//original code from alfie275 / lunacode, artifacts are from isaidno diff --git a/code/modules/shareddream/area.dm b/code/modules/shareddream/area.dm index b0dd7eb523d..baeda85372f 100644 --- a/code/modules/shareddream/area.dm +++ b/code/modules/shareddream/area.dm @@ -1,4 +1,4 @@ /area/centcom/shared_dream name = "\improper The Shared Dream" icon_state = "dream" - ambience = AMBIENCE_OTHERWORLDLY \ No newline at end of file + ambience = AMBIENCE_OTHERWORLDLY diff --git a/code/modules/shuttles/city.dm b/code/modules/shuttles/city.dm index 51e97f47e25..6d5fd187d12 100644 --- a/code/modules/shuttles/city.dm +++ b/code/modules/shuttles/city.dm @@ -1,4 +1,4 @@ /obj/machinery/computer/shuttle_control/city name = "city transit shuttle control console" shuttle_tag = "City Transit Shuttle" - light_color = LIGHT_COLOR_RED \ No newline at end of file + light_color = LIGHT_COLOR_RED diff --git a/code/modules/spell_system/artifacts/armor/bone_armor.dm b/code/modules/spell_system/artifacts/armor/bone_armor.dm index 9504d12205d..f4243dd1a11 100644 --- a/code/modules/spell_system/artifacts/armor/bone_armor.dm +++ b/code/modules/spell_system/artifacts/armor/bone_armor.dm @@ -17,4 +17,4 @@ item_state = "skull" contained_sprite = TRUE species_restricted = list(BODYTYPE_SKELETON) - armor = list(melee = ARMOR_MELEE_MAJOR, bullet = 40, laser = 50, energy = 25, bomb = 30, bio = 0, rad = 0) \ No newline at end of file + armor = list(melee = ARMOR_MELEE_MAJOR, bullet = 40, laser = 50, energy = 25, bomb = 30, bio = 0, rad = 0) diff --git a/code/modules/spell_system/artifacts/items/bone_spear.dm b/code/modules/spell_system/artifacts/items/bone_spear.dm index 7981c2319ed..09ac0428a07 100644 --- a/code/modules/spell_system/artifacts/items/bone_spear.dm +++ b/code/modules/spell_system/artifacts/items/bone_spear.dm @@ -1,3 +1,3 @@ /obj/item/material/twohanded/spear/bone desc = "A spear crafted with bones of some long forgotten creature." - default_material = "cursed bone" \ No newline at end of file + default_material = "cursed bone" diff --git a/code/modules/spell_system/spells/spell_list/aoe_turf.dm b/code/modules/spell_system/spells/spell_list/aoe_turf.dm index 9f79f694ad8..f7bd9ccdfe0 100644 --- a/code/modules/spell_system/spells/spell_list/aoe_turf.dm +++ b/code/modules/spell_system/spells/spell_list/aoe_turf.dm @@ -22,4 +22,4 @@ Aoe turf spells have two useful flags: IGNOREDENSE and IGNORESPACE. These are ex if(!targets.len) //doesn't waste the spell return - return targets \ No newline at end of file + return targets diff --git a/code/modules/spell_system/spells/spell_list/dumbfire.dm b/code/modules/spell_system/spells/spell_list/dumbfire.dm index cd13f7169c8..15a5e3fb52c 100644 --- a/code/modules/spell_system/spells/spell_list/dumbfire.dm +++ b/code/modules/spell_system/spells/spell_list/dumbfire.dm @@ -10,4 +10,4 @@ for(var/i = 1; i <= src.range; i++) current_turf = get_step(current_turf, starting_dir) targets += current_turf - return targets \ No newline at end of file + return targets diff --git a/code/modules/spell_system/spells/spell_list/equip.dm b/code/modules/spell_system/spells/spell_list/equip.dm index c1237c45dab..bef30ae04d5 100644 --- a/code/modules/spell_system/spells/spell_list/equip.dm +++ b/code/modules/spell_system/spells/spell_list/equip.dm @@ -42,4 +42,4 @@ qdel(to_remove) /spell/targeted/equip_item/proc/summon_item(var/newtype) - return new newtype \ No newline at end of file + return new newtype diff --git a/code/modules/spell_system/spells/spell_list/others/area/torment.dm b/code/modules/spell_system/spells/spell_list/others/area/torment.dm index 994c1a74708..10d6864cfed 100644 --- a/code/modules/spell_system/spells/spell_list/others/area/torment.dm +++ b/code/modules/spell_system/spells/spell_list/others/area/torment.dm @@ -31,4 +31,4 @@ loss += 30 - return "[src] will now cause more pain." \ No newline at end of file + return "[src] will now cause more pain." diff --git a/code/modules/spell_system/spells/spell_list/others/equip/party_hardy.dm b/code/modules/spell_system/spells/spell_list/others/equip/party_hardy.dm index dd357bd9f30..561ccbc291c 100644 --- a/code/modules/spell_system/spells/spell_list/others/equip/party_hardy.dm +++ b/code/modules/spell_system/spells/spell_list/others/equip/party_hardy.dm @@ -33,4 +33,4 @@ "[slot_head]" = /obj/item/clothing/head/collectable/wizard) return "Woo! Now everybody gets a cool wizard hat and MORE BOOZE!" - return 0 \ No newline at end of file + return 0 diff --git a/code/modules/spell_system/spells/spell_list/others/generic/heal_target.dm b/code/modules/spell_system/spells/spell_list/others/generic/heal_target.dm index 9b8b3162e14..753402f3866 100644 --- a/code/modules/spell_system/spells/spell_list/others/generic/heal_target.dm +++ b/code/modules/spell_system/spells/spell_list/others/generic/heal_target.dm @@ -28,4 +28,4 @@ amt_dam_fire -= 5 amt_organ -= 2 - return "[src] will now heal more." \ No newline at end of file + return "[src] will now heal more." diff --git a/code/modules/spell_system/spells/spell_list/others/generic/heal_target_area.dm b/code/modules/spell_system/spells/spell_list/others/generic/heal_target_area.dm index 8dd0c616236..a1b6cd056d5 100644 --- a/code/modules/spell_system/spells/spell_list/others/generic/heal_target_area.dm +++ b/code/modules/spell_system/spells/spell_list/others/generic/heal_target_area.dm @@ -23,4 +23,4 @@ amt_organ -= 1 range += 2 - return "[src] now heals more in a wider area." \ No newline at end of file + return "[src] now heals more in a wider area." diff --git a/code/modules/spell_system/spells/spell_list/others/generic/heal_target_major.dm b/code/modules/spell_system/spells/spell_list/others/generic/heal_target_major.dm index ad0943a799f..5d50947076c 100644 --- a/code/modules/spell_system/spells/spell_list/others/generic/heal_target_major.dm +++ b/code/modules/spell_system/spells/spell_list/others/generic/heal_target_major.dm @@ -23,4 +23,4 @@ amt_dam_oxy = -20 amt_organ = -5 - return "[src] now heals oxygen loss and toxic damage." \ No newline at end of file + return "[src] now heals oxygen loss and toxic damage." diff --git a/code/modules/spell_system/spells/spell_list/others/generic/life_steal.dm b/code/modules/spell_system/spells/spell_list/others/generic/life_steal.dm index 7c21b25a70a..a862bd7c723 100644 --- a/code/modules/spell_system/spells/spell_list/others/generic/life_steal.dm +++ b/code/modules/spell_system/spells/spell_list/others/generic/life_steal.dm @@ -31,4 +31,4 @@ gibs(M.loc) user.adjustBruteLoss(-15) user.adjustFireLoss(-15) - ..() \ No newline at end of file + ..() diff --git a/code/modules/spell_system/spells/spell_list/others/generic/swap.dm b/code/modules/spell_system/spells/spell_list/others/generic/swap.dm index 60314035fb8..5a4a8cee7e7 100644 --- a/code/modules/spell_system/spells/spell_list/others/generic/swap.dm +++ b/code/modules/spell_system/spells/spell_list/others/generic/swap.dm @@ -39,4 +39,4 @@ amt_eye_blind += 2 amt_weakened += 5 - return "This spell will now weaken and blind the target for a longer period of time." \ No newline at end of file + return "This spell will now weaken and blind the target for a longer period of time." diff --git a/code/modules/spell_system/spells/spell_list/projectile.dm b/code/modules/spell_system/spells/spell_list/projectile.dm index 5f07a304dda..72d43c0a38d 100644 --- a/code/modules/spell_system/spells/spell_list/projectile.dm +++ b/code/modules/spell_system/spells/spell_list/projectile.dm @@ -45,4 +45,4 @@ If the spell_projectile is seeking, it will update its target every process and return targets /spell/targeted/projectile/proc/prox_cast(var/list/targets, var/atom/movable/spell_holder) - return targets \ No newline at end of file + return targets diff --git a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/construct_shell.dm b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/construct_shell.dm index c34b10b70d9..63613cb884f 100644 --- a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/construct_shell.dm +++ b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/construct_shell.dm @@ -17,4 +17,4 @@ charge_max = 1800 summon_type = list(/obj/structure/constructshell/cult) hud_state = "const_shell" - override_base = "const" \ No newline at end of file + override_base = "const" diff --git a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_altar.dm b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_altar.dm index 647c2acb328..d9a414703cb 100644 --- a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_altar.dm +++ b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_altar.dm @@ -11,4 +11,4 @@ summon_type = list(/obj/structure/cult/talisman) hud_state = "const_altar" - override_base = "const" \ No newline at end of file + override_base = "const" diff --git a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_floor.dm b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_floor.dm index 9e50fa5a0ee..045cf541ff2 100644 --- a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_floor.dm +++ b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_floor.dm @@ -14,4 +14,4 @@ /spell/aoe_turf/conjure/floor/conjure_animation(var/atom/movable/overlay/animation, var/turf/target) animation.icon_state = "cultfloor" flick("cultfloor", animation) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), animation), 10) \ No newline at end of file + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), animation), 10) diff --git a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_forcewall.dm b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_forcewall.dm index 4e74867b203..03e1d0fe1ef 100644 --- a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_forcewall.dm +++ b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_forcewall.dm @@ -23,4 +23,4 @@ appearance_flags = NO_CLIENT_COLOR /obj/effect/forcefield/cult/cultify() - return \ No newline at end of file + return diff --git a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_forge.dm b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_forge.dm index 9f03aa11b8b..5f8c0a8235f 100644 --- a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_forge.dm +++ b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_forge.dm @@ -11,4 +11,4 @@ summon_type = list(/obj/structure/cult/forge) hud_state = "const_forge" - override_base = "const" \ No newline at end of file + override_base = "const" diff --git a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_wall.dm b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_wall.dm index 45f08dc4abd..cd65b5180a8 100644 --- a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_wall.dm +++ b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/create_wall.dm @@ -27,4 +27,4 @@ range = 0 cast_delay = 50 - summon_type = list(/turf/simulated/wall/cult_reinforced) \ No newline at end of file + summon_type = list(/turf/simulated/wall/cult_reinforced) diff --git a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/summon_pylon.dm b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/summon_pylon.dm index 76d0a78323d..ba99382c935 100644 --- a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/summon_pylon.dm +++ b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/summon_pylon.dm @@ -19,4 +19,4 @@ if(P.isbroken) P.repair(usr) continue - return \ No newline at end of file + return diff --git a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/summon_soulstone.dm b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/summon_soulstone.dm index e8774960bab..a2f34d00f3c 100644 --- a/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/summon_soulstone.dm +++ b/code/modules/spell_system/spells/spell_list/self/conjure/construct_spells/summon_soulstone.dm @@ -11,4 +11,4 @@ summon_type = list(/obj/item/device/soulstone) hud_state = "const_stone" - override_base = "const" \ No newline at end of file + override_base = "const" diff --git a/code/modules/spell_system/spells/spell_list/self/conjure/druidic_spells.dm b/code/modules/spell_system/spells/spell_list/self/conjure/druidic_spells.dm index 2bbbbe5be22..82919cb7df1 100644 --- a/code/modules/spell_system/spells/spell_list/self/conjure/druidic_spells.dm +++ b/code/modules/spell_system/spells/spell_list/self/conjure/druidic_spells.dm @@ -39,4 +39,4 @@ newVars = list("maxHealth" = 20 + spell_levels[Sp_POWER]*5, "health" = 20 + spell_levels[Sp_POWER]*5, "melee_damage_lower" = 10 + spell_levels[Sp_POWER], "melee_damage_upper" = 10 + spell_levels[Sp_POWER]*2) - return "Your bats are now stronger." \ No newline at end of file + return "Your bats are now stronger." diff --git a/code/modules/spell_system/spells/spell_list/self/conjure/morph_spells/create_nest.dm b/code/modules/spell_system/spells/spell_list/self/conjure/morph_spells/create_nest.dm index 2203282b829..a35218aa2b1 100644 --- a/code/modules/spell_system/spells/spell_list/self/conjure/morph_spells/create_nest.dm +++ b/code/modules/spell_system/spells/spell_list/self/conjure/morph_spells/create_nest.dm @@ -11,4 +11,4 @@ summon_type = list(/obj/structure/bed/nest) cast_sound = 'sound/effects/attackblob.ogg' - hud_state = "nest" \ No newline at end of file + hud_state = "nest" diff --git a/code/modules/spell_system/spells/spell_list/self/conjure/morph_spells/create_node.dm b/code/modules/spell_system/spells/spell_list/self/conjure/morph_spells/create_node.dm index d394cc2a1a3..b8192774c11 100644 --- a/code/modules/spell_system/spells/spell_list/self/conjure/morph_spells/create_node.dm +++ b/code/modules/spell_system/spells/spell_list/self/conjure/morph_spells/create_node.dm @@ -11,4 +11,4 @@ summon_type = list(/obj/structure/gore/tendrils/node) cast_sound = 'sound/effects/attackblob.ogg' - hud_state = "tendril_node" \ No newline at end of file + hud_state = "tendril_node" diff --git a/code/modules/spell_system/spells/spell_list/self/conjure/radiant_aura.dm b/code/modules/spell_system/spells/spell_list/self/conjure/radiant_aura.dm index ed6108bacae..5c9883672f5 100644 --- a/code/modules/spell_system/spells/spell_list/self/conjure/radiant_aura.dm +++ b/code/modules/spell_system/spells/spell_list/self/conjure/radiant_aura.dm @@ -23,4 +23,4 @@ /spell/radiant_aura/starlight spell_flags = 0 - charge_max = 400 \ No newline at end of file + charge_max = 400 diff --git a/code/modules/spell_system/spells/spell_list/self/generic/mutate.dm b/code/modules/spell_system/spells/spell_list/self/generic/mutate.dm index f54daddf9f8..df2488decba 100644 --- a/code/modules/spell_system/spells/spell_list/self/generic/mutate.dm +++ b/code/modules/spell_system/spells/spell_list/self/generic/mutate.dm @@ -18,4 +18,4 @@ level_max = list(Sp_TOTAL = 1, Sp_SPEED = 1, Sp_POWER = 0) cooldown_min = 300 - hud_state = "wiz_hulk" \ No newline at end of file + hud_state = "wiz_hulk" diff --git a/code/modules/spell_system/spells/spell_list/self/generic/shadow_shroud.dm b/code/modules/spell_system/spells/spell_list/self/generic/shadow_shroud.dm index 17595bbdd2e..e9e5cb03dd3 100644 --- a/code/modules/spell_system/spells/spell_list/self/generic/shadow_shroud.dm +++ b/code/modules/spell_system/spells/spell_list/self/generic/shadow_shroud.dm @@ -28,4 +28,4 @@ O.set_light(range, -10, "#FFFFFF") spawn(duration) - qdel(O) \ No newline at end of file + qdel(O) diff --git a/code/modules/spell_system/spells/spell_list/self/generic/shift.dm b/code/modules/spell_system/spells/spell_list/self/generic/shift.dm index 8f8ef57e512..5dae0a71a99 100644 --- a/code/modules/spell_system/spells/spell_list/self/generic/shift.dm +++ b/code/modules/spell_system/spells/spell_list/self/generic/shift.dm @@ -21,4 +21,4 @@ flick("phase_shift2",animation) /spell/targeted/ethereal_jaunt/shift/jaunt_steam(var/mobloc) - return \ No newline at end of file + return diff --git a/code/modules/spell_system/spells/spell_list/shapeshift.dm b/code/modules/spell_system/spells/spell_list/shapeshift.dm index 22a0529b90b..5bbde48b17e 100644 --- a/code/modules/spell_system/spells/spell_list/shapeshift.dm +++ b/code/modules/spell_system/spells/spell_list/shapeshift.dm @@ -77,4 +77,4 @@ M.key = trans.key playsound(get_turf(M),revert_sound,50,1) M.forceMove(get_turf(trans)) - qdel(trans) \ No newline at end of file + qdel(trans) diff --git a/code/modules/spell_system/spells/spell_projectile.dm b/code/modules/spell_system/spells/spell_projectile.dm index bffdd2f42a5..7e5ec4d3109 100644 --- a/code/modules/spell_system/spells/spell_projectile.dm +++ b/code/modules/spell_system/spells/spell_projectile.dm @@ -54,4 +54,4 @@ return 1 /obj/item/projectile/spell_projectile/seeking - name = "seeking spell" \ No newline at end of file + name = "seeking spell" diff --git a/code/modules/submaps/submap_landmark.dm b/code/modules/submaps/submap_landmark.dm index 245c8a299d8..0c895a50c79 100644 --- a/code/modules/submaps/submap_landmark.dm +++ b/code/modules/submaps/submap_landmark.dm @@ -22,4 +22,4 @@ log_debug( "Submap error - mapped landmark is duplicate of existing.") else log_debug( "Submap error - mapped landmark had invalid archetype.") - return INITIALIZE_HINT_QDEL \ No newline at end of file + return INITIALIZE_HINT_QDEL diff --git a/code/modules/surgery/_defines.dm b/code/modules/surgery/_defines.dm index 63846b55494..40f5f0b7caf 100644 --- a/code/modules/surgery/_defines.dm +++ b/code/modules/surgery/_defines.dm @@ -23,4 +23,4 @@ #define CAVITY_OPEN 1 //macros -#define IS_ORGAN_FULLY_OPEN affected.open == ((affected.encased || affected.robotic) ? ORGAN_ENCASED_RETRACTED : ORGAN_OPEN_RETRACTED) \ No newline at end of file +#define IS_ORGAN_FULLY_OPEN affected.open == ((affected.encased || affected.robotic) ? ORGAN_ENCASED_RETRACTED : ORGAN_OPEN_RETRACTED) diff --git a/code/modules/surgery/~defines.dm b/code/modules/surgery/~defines.dm index 0b419831908..57f70641ffc 100644 --- a/code/modules/surgery/~defines.dm +++ b/code/modules/surgery/~defines.dm @@ -13,4 +13,4 @@ #undef BONE_GLUED #undef BONE_SET #undef CAVITY_OPEN -#undef CAVITY_CLOSED \ No newline at end of file +#undef CAVITY_CLOSED diff --git a/code/modules/synthesized_instruments/echo_editor.dm b/code/modules/synthesized_instruments/echo_editor.dm index ec931895336..c30671cd7ac 100644 --- a/code/modules/synthesized_instruments/echo_editor.dm +++ b/code/modules/synthesized_instruments/echo_editor.dm @@ -60,4 +60,4 @@ if ("desc") to_chat(usr, "[name]: from [bound_min] to [bound_max] (default: [default])
    [desc]") - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/synthesized_instruments/env_editor.dm b/code/modules/synthesized_instruments/env_editor.dm index d2b29897b6f..b3c4c2053fe 100644 --- a/code/modules/synthesized_instruments/env_editor.dm +++ b/code/modules/synthesized_instruments/env_editor.dm @@ -62,4 +62,4 @@ if ("desc") to_chat(usr, "[name]: from [bound_min] to [bound_max] (default: [default])
    [desc]") - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/synthesized_instruments/globals.dm b/code/modules/synthesized_instruments/globals.dm index 95d17a57a8c..fa00cfd07df 100644 --- a/code/modules/synthesized_instruments/globals.dm +++ b/code/modules/synthesized_instruments/globals.dm @@ -240,4 +240,4 @@ Bit flags that modify the behavior of above properties /datum/sample_pair/New(sample_file, deviation) src.sample = sample_file - src.deviation = deviation \ No newline at end of file + src.deviation = deviation diff --git a/code/modules/synthesized_instruments/instrument_data/fun.dm b/code/modules/synthesized_instruments/instrument_data/fun.dm index a2370f545a6..d35cdc5a871 100644 --- a/code/modules/synthesized_instruments/instrument_data/fun.dm +++ b/code/modules/synthesized_instruments/instrument_data/fun.dm @@ -23,4 +23,4 @@ /datum/instrument/fun/diona name = "Diona" id = "diona" - samples = list("79"='sound/misc/nymphchirp.ogg') \ No newline at end of file + samples = list("79"='sound/misc/nymphchirp.ogg') diff --git a/code/modules/synthesized_instruments/instrument_data/impossible_instruments.dm b/code/modules/synthesized_instruments/instrument_data/impossible_instruments.dm index 9e81e634a7d..7d6c1670c78 100644 --- a/code/modules/synthesized_instruments/instrument_data/impossible_instruments.dm +++ b/code/modules/synthesized_instruments/instrument_data/impossible_instruments.dm @@ -18,4 +18,4 @@ /datum/instrument/tones/saw_wave name = "Ideal sawtooth wave" id = "saw" - samples = list("81"='code/modules/synthesized_instruments/samples/tones/Sawtooth.ogg') \ No newline at end of file + samples = list("81"='code/modules/synthesized_instruments/samples/tones/Sawtooth.ogg') diff --git a/code/modules/synthesized_instruments/instrument_data/obsolete.dm b/code/modules/synthesized_instruments/instrument_data/obsolete.dm index 3d44ad62e87..b750da35e1c 100644 --- a/code/modules/synthesized_instruments/instrument_data/obsolete.dm +++ b/code/modules/synthesized_instruments/instrument_data/obsolete.dm @@ -103,4 +103,4 @@ "104"='code/modules/synthesized_instruments/samples/obsolete/violin/G#8.mid',\ "105"='code/modules/synthesized_instruments/samples/obsolete/violin/An8.mid',\ "106"='code/modules/synthesized_instruments/samples/obsolete/violin/A#8.mid',\ -"107"='code/modules/synthesized_instruments/samples/obsolete/violin/Bn8.mid') \ No newline at end of file +"107"='code/modules/synthesized_instruments/samples/obsolete/violin/Bn8.mid') diff --git a/code/modules/synthesized_instruments/instruments.dm b/code/modules/synthesized_instruments/instruments.dm index 14247b618be..42a20a76ba7 100644 --- a/code/modules/synthesized_instruments/instruments.dm +++ b/code/modules/synthesized_instruments/instruments.dm @@ -31,4 +31,4 @@ var/last_sample = src.samples[musical_config.n2t(last_key)] for (var/key=0 to first_key-1) src.sample_map[musical_config.n2t(key)] = new /datum/sample_pair(first_sample, key-first_key) for (var/key=last_key to 127) src.sample_map[musical_config.n2t(key)] = new /datum/sample_pair(last_sample, key-last_key) - return src.samples \ No newline at end of file + return src.samples diff --git a/code/modules/synthesized_instruments/real_instruments.dm b/code/modules/synthesized_instruments/real_instruments.dm index a5688f4566b..6697a3b14dc 100644 --- a/code/modules/synthesized_instruments/real_instruments.dm +++ b/code/modules/synthesized_instruments/real_instruments.dm @@ -308,4 +308,4 @@ if (..()) return 1 - return real_instrument.Topic_call(href, href_list, usr) \ No newline at end of file + return real_instrument.Topic_call(href, href_list, usr) diff --git a/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm b/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm index 18d5ad2ea9f..afbef1e255b 100644 --- a/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm +++ b/code/modules/synthesized_instruments/real_instruments/Guitar/guitar.dm @@ -17,4 +17,4 @@ item_state = "eguitar" slot_flags = SLOT_BACK sound_player = /datum/sound_player/synthesizer - path = /datum/instrument/guitar \ No newline at end of file + path = /datum/instrument/guitar diff --git a/code/modules/synthesized_instruments/real_instruments/Piano/piano.dm b/code/modules/synthesized_instruments/real_instruments/Piano/piano.dm index a56e174db3f..7ec2cba0cfe 100644 --- a/code/modules/synthesized_instruments/real_instruments/Piano/piano.dm +++ b/code/modules/synthesized_instruments/real_instruments/Piano/piano.dm @@ -2,4 +2,4 @@ name = "space piano" desc = "A surprisingly high-tech piano with a digital display for modifying sound output." icon_state = "piano" - path = /datum/instrument/piano \ No newline at end of file + path = /datum/instrument/piano diff --git a/code/modules/synthesized_instruments/real_instruments/Trumpet/trumpet.dm b/code/modules/synthesized_instruments/real_instruments/Trumpet/trumpet.dm index 60a9b757066..e57d91ef207 100644 --- a/code/modules/synthesized_instruments/real_instruments/Trumpet/trumpet.dm +++ b/code/modules/synthesized_instruments/real_instruments/Trumpet/trumpet.dm @@ -3,4 +3,4 @@ desc = "The Omnitrumptet series 400 with more than 30 sound samples and fully customizable high fidelity output provides the ultimate means to toot your own horn." icon_state = "trumpet" sound_player = /datum/sound_player/synthesizer - path = /datum/instrument/brass \ No newline at end of file + path = /datum/instrument/brass diff --git a/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm b/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm index 79159ccbd68..bb34e8284a1 100644 --- a/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm +++ b/code/modules/synthesized_instruments/real_instruments/Violin/violin.dm @@ -11,4 +11,4 @@ path = /datum/instrument/obsolete/violin /obj/structure/synthesized_instrument/synthesizer/shouldStopPlaying(mob/user) - return !(src && in_range(src, user)) \ No newline at end of file + return !(src && in_range(src, user)) diff --git a/code/modules/synthesized_instruments/song_editor.dm b/code/modules/synthesized_instruments/song_editor.dm index 3ea8dab6f33..4b08fb600f4 100644 --- a/code/modules/synthesized_instruments/song_editor.dm +++ b/code/modules/synthesized_instruments/song_editor.dm @@ -103,4 +103,4 @@ if ("first_page") src.page = 1 - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/synthesized_instruments/usage_info.dm b/code/modules/synthesized_instruments/usage_info.dm index 9322a96ea05..9f718331a4d 100644 --- a/code/modules/synthesized_instruments/usage_info.dm +++ b/code/modules/synthesized_instruments/usage_info.dm @@ -26,4 +26,4 @@ /datum/nano_module/usage_info/Destroy() player = null - ..() \ No newline at end of file + ..() diff --git a/code/modules/tables/update_triggers.dm b/code/modules/tables/update_triggers.dm index 1c64b0dfb75..02b70dc965a 100644 --- a/code/modules/tables/update_triggers.dm +++ b/code/modules/tables/update_triggers.dm @@ -19,4 +19,4 @@ if(loc != oldloc) for(var/obj/structure/table/T in view(oldloc, 1) | view(loc, 1)) T.update_connections() - T.update_icon() \ No newline at end of file + T.update_icon() diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm index 92d74fbc2b9..ccc866b11de 100644 --- a/code/modules/tooltip/tooltip.dm +++ b/code/modules/tooltip/tooltip.dm @@ -112,4 +112,4 @@ Notes: /proc/closeToolTip(mob/user) if(istype(user)) if(user.client && user.client.tooltips) - user.client.tooltips.hide() \ No newline at end of file + user.client.tooltips.hide() diff --git a/code/modules/vehicles/animal.dm b/code/modules/vehicles/animal.dm index 90057e8976e..7f4e84399ed 100644 --- a/code/modules/vehicles/animal.dm +++ b/code/modules/vehicles/animal.dm @@ -43,4 +43,4 @@ desc = "A structure used to ride animals." icon = 'icons/obj/saddle.dmi' icon_state = "saddle" - w_class = ITEMSIZE_NORMAL \ No newline at end of file + w_class = ITEMSIZE_NORMAL diff --git a/code/modules/vehicles/wasp_torpedo.dm b/code/modules/vehicles/wasp_torpedo.dm index e5010b73219..ae68c4b60e7 100644 --- a/code/modules/vehicles/wasp_torpedo.dm +++ b/code/modules/vehicles/wasp_torpedo.dm @@ -106,4 +106,4 @@ if(2.0) if(prob(50)) torpedo_explosion() - ..() \ No newline at end of file + ..() diff --git a/code/modules/ventcrawl/ventcrawl_verb.dm b/code/modules/ventcrawl/ventcrawl_verb.dm index 45d7dfc237b..9cae495803d 100644 --- a/code/modules/ventcrawl/ventcrawl_verb.dm +++ b/code/modules/ventcrawl/ventcrawl_verb.dm @@ -6,4 +6,4 @@ return var/pipe = start_ventcrawl() if(pipe) - handle_ventcrawl(pipe) \ No newline at end of file + handle_ventcrawl(pipe) diff --git a/html/changelogs/fluffyghost-lasteditorconfigfixup.yml b/html/changelogs/fluffyghost-lasteditorconfigfixup.yml new file mode 100644 index 00000000000..9cd5f6aab54 --- /dev/null +++ b/html/changelogs/fluffyghost-lasteditorconfigfixup.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: FluffyGhost + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - backend: "Fixed all the editorconfig mismatches one last time." diff --git a/maps/_common/areas/station/engineering.dm b/maps/_common/areas/station/engineering.dm index d4abb7ea4d3..de076a99df1 100644 --- a/maps/_common/areas/station/engineering.dm +++ b/maps/_common/areas/station/engineering.dm @@ -123,4 +123,4 @@ /area/engineering/backup_SMES name = "Engineering - Backup Power Storage" icon_state = "substation" - sound_env = SMALL_ENCLOSED \ No newline at end of file + sound_env = SMALL_ENCLOSED diff --git a/maps/_common/areas/station/hallways.dm b/maps/_common/areas/station/hallways.dm index bec87077031..2c1c5c9e37e 100644 --- a/maps/_common/areas/station/hallways.dm +++ b/maps/_common/areas/station/hallways.dm @@ -86,4 +86,4 @@ /area/hallway/secondary/entry/stairs name = "Surface Access Stairwell" - icon_state = "dk_yellow" \ No newline at end of file + icon_state = "dk_yellow" diff --git a/maps/away/away_site/tajara/scrapper/scrapper_areas.dm b/maps/away/away_site/tajara/scrapper/scrapper_areas.dm index 81d284541c5..2447313ea04 100644 --- a/maps/away/away_site/tajara/scrapper/scrapper_areas.dm +++ b/maps/away/away_site/tajara/scrapper/scrapper_areas.dm @@ -54,4 +54,4 @@ /area/shuttle/scrapper_ship/storage name = "Scrapper Storage" - icon_state = "red" \ No newline at end of file + icon_state = "red" diff --git a/maps/away/away_site/unathi_pirate/tarwa/unathi_pirate_tarwa_areas.dm b/maps/away/away_site/unathi_pirate/tarwa/unathi_pirate_tarwa_areas.dm index b2b88cf17e6..13dd9f07eae 100644 --- a/maps/away/away_site/unathi_pirate/tarwa/unathi_pirate_tarwa_areas.dm +++ b/maps/away/away_site/unathi_pirate/tarwa/unathi_pirate_tarwa_areas.dm @@ -64,4 +64,4 @@ icon_state = "cafeteria" /area/shuttle/tarwa - name = "Tarwa Conglomerate Shuttle" \ No newline at end of file + name = "Tarwa Conglomerate Shuttle" diff --git a/maps/away/away_sites.dm b/maps/away/away_sites.dm index 3ad2b60acea..4c521356960 100644 --- a/maps/away/away_sites.dm +++ b/maps/away/away_sites.dm @@ -2,4 +2,4 @@ /datum/map_template/ruin/away_site var/list/generate_mining_by_z - prefix = "maps/away/" \ No newline at end of file + prefix = "maps/away/" diff --git a/maps/away/ships/casino/casino_areas.dm b/maps/away/ships/casino/casino_areas.dm index 734a88ca68a..cc77d04cbc2 100644 --- a/maps/away/ships/casino/casino_areas.dm +++ b/maps/away/ships/casino/casino_areas.dm @@ -74,4 +74,4 @@ name = "\improper Casino Cutter" icon = 'maps/away/ships/casino/casino_sprites.dmi' icon_state = "shuttle" - requires_power = TRUE \ No newline at end of file + requires_power = TRUE diff --git a/maps/away/ships/dpra/hailstorm/hailstorm_areas.dm b/maps/away/ships/dpra/hailstorm/hailstorm_areas.dm index 8893feb4d6b..55a7614326f 100644 --- a/maps/away/ships/dpra/hailstorm/hailstorm_areas.dm +++ b/maps/away/ships/dpra/hailstorm/hailstorm_areas.dm @@ -49,4 +49,4 @@ /area/shuttle/hailstorm_shuttle name = "\improper Hailstorm Shuttle" - requires_power = TRUE \ No newline at end of file + requires_power = TRUE diff --git a/maps/away/ships/hegemony/hegemony_corvette/hegemony_corvette_areas.dm b/maps/away/ships/hegemony/hegemony_corvette/hegemony_corvette_areas.dm index 78000e5c59d..41a058b97e1 100644 --- a/maps/away/ships/hegemony/hegemony_corvette/hegemony_corvette_areas.dm +++ b/maps/away/ships/hegemony/hegemony_corvette/hegemony_corvette_areas.dm @@ -117,4 +117,4 @@ //Shuttle /area/shuttle/hegemony - name = "Hegemony Shuttle" \ No newline at end of file + name = "Hegemony Shuttle" diff --git a/maps/away/ships/hegemony/merchants_guild/merchant_freighter_areas.dm b/maps/away/ships/hegemony/merchants_guild/merchant_freighter_areas.dm index 3856128b73e..20b52ffe112 100644 --- a/maps/away/ships/hegemony/merchants_guild/merchant_freighter_areas.dm +++ b/maps/away/ships/hegemony/merchants_guild/merchant_freighter_areas.dm @@ -52,4 +52,4 @@ icon_state = "bridge" /area/shuttle/merchants_guild - name = "\improper Merchants' Guild - Shuttle" \ No newline at end of file + name = "\improper Merchants' Guild - Shuttle" diff --git a/maps/away/ships/hegemony/miners_guild/miners_guild_areas.dm b/maps/away/ships/hegemony/miners_guild/miners_guild_areas.dm index 029f4889a9f..8845d5f6801 100644 --- a/maps/away/ships/hegemony/miners_guild/miners_guild_areas.dm +++ b/maps/away/ships/hegemony/miners_guild/miners_guild_areas.dm @@ -63,4 +63,4 @@ //shuttle /area/shuttle/miners_guild - name = "Miners' Guild Shuttle" \ No newline at end of file + name = "Miners' Guild Shuttle" diff --git a/maps/away/ships/heph/cyclops/cyclops_mining_areas.dm b/maps/away/ships/heph/cyclops/cyclops_mining_areas.dm index 2c17fbb32f6..52c8817d7b3 100644 --- a/maps/away/ships/heph/cyclops/cyclops_mining_areas.dm +++ b/maps/away/ships/heph/cyclops/cyclops_mining_areas.dm @@ -48,4 +48,4 @@ /area/shuttle/cyclops_shuttle name = "Wisp Shuttle" - icon_state = "shuttle2" \ No newline at end of file + icon_state = "shuttle2" diff --git a/maps/away/ships/nka/nka_merchant/nka_merchant_areas.dm b/maps/away/ships/nka/nka_merchant/nka_merchant_areas.dm index 005fac28cd1..89b30417009 100644 --- a/maps/away/ships/nka/nka_merchant/nka_merchant_areas.dm +++ b/maps/away/ships/nka/nka_merchant/nka_merchant_areas.dm @@ -53,4 +53,4 @@ //Shuttle /area/shuttle/nka_merchant_shuttle - name = "\improper Her Majesty's Mercantile Flotilla Shuttle" \ No newline at end of file + name = "\improper Her Majesty's Mercantile Flotilla Shuttle" diff --git a/maps/away/ships/pra/database_freighter/database_freighter_areas.dm b/maps/away/ships/pra/database_freighter/database_freighter_areas.dm index 270832d07a9..66a32439873 100644 --- a/maps/away/ships/pra/database_freighter/database_freighter_areas.dm +++ b/maps/away/ships/pra/database_freighter/database_freighter_areas.dm @@ -49,4 +49,4 @@ //Shuttle /area/shuttle/database_freighter_shuttle - name = "\improper Database Freighter Shuttle" \ No newline at end of file + name = "\improper Database Freighter Shuttle" diff --git a/maps/away/ships/pra/headmaster/headmaster_areas.dm b/maps/away/ships/pra/headmaster/headmaster_areas.dm index e64b26d35c9..4d7e650fe4a 100644 --- a/maps/away/ships/pra/headmaster/headmaster_areas.dm +++ b/maps/away/ships/pra/headmaster/headmaster_areas.dm @@ -53,4 +53,4 @@ //Shuttle /area/shuttle/headmaster_shuttle - name = "\improper Orbital Fleet Shuttle" \ No newline at end of file + name = "\improper Orbital Fleet Shuttle" diff --git a/maps/away/ships/tajara/circus/adhomian_circus_areas.dm b/maps/away/ships/tajara/circus/adhomian_circus_areas.dm index cc0c38e91df..f434c3315b4 100644 --- a/maps/away/ships/tajara/circus/adhomian_circus_areas.dm +++ b/maps/away/ships/tajara/circus/adhomian_circus_areas.dm @@ -60,4 +60,4 @@ /area/shuttle/adhomian_circus_shuttle name = "Adhomian Traveling Circus Shuttle" icon_state = "shuttle2" - requires_power = TRUE \ No newline at end of file + requires_power = TRUE diff --git a/maps/event/code/event.dm b/maps/event/code/event.dm index 94458c7ee4b..d27d865bc9f 100644 --- a/maps/event/code/event.dm +++ b/maps/event/code/event.dm @@ -27,4 +27,4 @@ shuttle_call_restarts = TRUE shuttle_called_message = "OOC NOTE: The round will restart in ten minutes, unless the crew transfer is recalled." - shuttle_recall_message = "OOC NOTE: The round will no longer restart." \ No newline at end of file + shuttle_recall_message = "OOC NOTE: The round will no longer restart." diff --git a/maps/event/generic_dock/code/generic_dock_areas.dm b/maps/event/generic_dock/code/generic_dock_areas.dm index 0d3bb63908c..e845730db14 100644 --- a/maps/event/generic_dock/code/generic_dock_areas.dm +++ b/maps/event/generic_dock/code/generic_dock_areas.dm @@ -10,4 +10,4 @@ luminosity = 0 requires_power = FALSE dynamic_lighting = TRUE - no_light_control = FALSE \ No newline at end of file + no_light_control = FALSE diff --git a/maps/event/idris_cruise/code/idris_cruise.dm b/maps/event/idris_cruise/code/idris_cruise.dm index 593f3071dd8..fca3ea82003 100644 --- a/maps/event/idris_cruise/code/idris_cruise.dm +++ b/maps/event/idris_cruise/code/idris_cruise.dm @@ -26,4 +26,4 @@ allowed_spawns = list("Living Quarters Lift", "Cryogenic Storage") spawn_types = list(/datum/spawnpoint/living_quarters_lift, /datum/spawnpoint/cryo) - default_spawn = "Living Quarters Lift" \ No newline at end of file + default_spawn = "Living Quarters Lift" diff --git a/maps/event/idris_cruise/code/idris_cruise_areas.dm b/maps/event/idris_cruise/code/idris_cruise_areas.dm index 7c17a4e746f..1bacf64852e 100644 --- a/maps/event/idris_cruise/code/idris_cruise_areas.dm +++ b/maps/event/idris_cruise/code/idris_cruise_areas.dm @@ -144,4 +144,4 @@ /area/cruise/library name = "Fore Observation Library" - icon_state = "green" \ No newline at end of file + icon_state = "green" diff --git a/maps/random_ruins/exoplanets/asteroid/coalition_base/coalition_base.dm b/maps/random_ruins/exoplanets/asteroid/coalition_base/coalition_base.dm index f8aa21b5571..8ba4357260d 100644 --- a/maps/random_ruins/exoplanets/asteroid/coalition_base/coalition_base.dm +++ b/maps/random_ruins/exoplanets/asteroid/coalition_base/coalition_base.dm @@ -1,20 +1,20 @@ /datum/map_template/ruin/exoplanet/coalition_base - name = "Abandoned Coalition Relay" - id = "coalition_base" - description = "An abandoned Coalition base." + name = "Abandoned Coalition Relay" + id = "coalition_base" + description = "An abandoned Coalition base." - sectors = list(ALL_COALITION_SECTORS) - suffixes = list("asteroid/coalition_base/coalition_base.dmm") + sectors = list(ALL_COALITION_SECTORS) + suffixes = list("asteroid/coalition_base/coalition_base.dmm") - planet_types = PLANET_ASTEROID|PLANET_BARREN - ruin_tags = RUIN_AIRLESS|RUIN_LOWPOP + planet_types = PLANET_ASTEROID|PLANET_BARREN + ruin_tags = RUIN_AIRLESS|RUIN_LOWPOP /area/coalition_base - name = "coalition base" - icon_state = "unknown" - requires_power = TRUE - dynamic_lighting = TRUE - no_light_control = TRUE + name = "coalition base" + icon_state = "unknown" + requires_power = TRUE + dynamic_lighting = TRUE + no_light_control = TRUE /area/coalition_base/eva_prep name = "EVA Preparation Room" From 7f610693821d242d470febdde47d2cfceee505de Mon Sep 17 00:00:00 2001 From: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com> Date: Mon, 20 Nov 2023 19:23:34 +0100 Subject: [PATCH 04/32] Xenobotany Fix (#17812) --- .../changelogs/SleepyGemmy-xenobotany_fix.yml | 6 + maps/sccv_horizon/sccv_horizon-2_deck_2.dmm | 157 +++++++++--------- 2 files changed, 80 insertions(+), 83 deletions(-) create mode 100644 html/changelogs/SleepyGemmy-xenobotany_fix.yml diff --git a/html/changelogs/SleepyGemmy-xenobotany_fix.yml b/html/changelogs/SleepyGemmy-xenobotany_fix.yml new file mode 100644 index 00000000000..8113410ab00 --- /dev/null +++ b/html/changelogs/SleepyGemmy-xenobotany_fix.yml @@ -0,0 +1,6 @@ +author: SleepyGemmy + +delete-after: True + +changes: + - bugfix: "Fixed the rear xenobotany door not closing and some visuals." diff --git a/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm b/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm index b12573b58a0..73253a24287 100644 --- a/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm +++ b/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm @@ -353,12 +353,15 @@ /turf/simulated/floor/tiled/white, /area/medical/ors) "ais" = ( -/obj/structure/closet/hazmat/research, +/obj/structure/closet/firecloset, +/obj/effect/floor_decal/industrial/outline/firefighting_closet, /obj/effect/floor_decal/spline/plain{ dir = 8 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, +/obj/machinery/camera/network/research{ + c_tag = "Research - Xenobotanical Greenhouse 2" + }, +/turf/simulated/floor/tiled/dark/full, /area/rnd/xenobiology/xenoflora) "aiP" = ( /obj/machinery/door/firedoor, @@ -1692,12 +1695,14 @@ /turf/simulated/floor/tiled, /area/horizon/security/brig) "aKU" = ( -/obj/structure/platform, +/obj/effect/floor_decal/corner/mauve/diagonal, /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "aLc" = ( /obj/effect/floor_decal/industrial/warning{ @@ -3173,14 +3178,15 @@ name = "Distro to Trays"; use_power = 1 }, -/obj/structure/platform_stairs/full/east_west_cap/half{ - dir = 8; - pixel_y = 5 - }, +/obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/platform{ dir = 4 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/platform, +/obj/structure/platform_deco{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark/full, /area/rnd/xenobiology/xenoflora) "bsG" = ( /obj/machinery/atmospherics/binary/pump/high_power{ @@ -7792,17 +7798,11 @@ /turf/simulated/floor/tiled, /area/hallway/engineering) "dHt" = ( -/obj/structure/platform{ - dir = 8 - }, +/obj/effect/floor_decal/corner/mauve/diagonal, /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/effect/floor_decal/corner/mauve{ - dir = 8 - }, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "dHG" = ( /obj/effect/floor_decal/industrial/warning{ @@ -12462,16 +12462,11 @@ /turf/simulated/floor/tiled/dark, /area/horizon/zta) "fSm" = ( +/obj/effect/floor_decal/corner/mauve/diagonal, /obj/effect/floor_decal/industrial/warning/corner{ dir = 4 }, -/obj/structure/closet/hazmat/research, -/obj/effect/floor_decal/corner/mauve{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "fSw" = ( /obj/structure/cable/green{ @@ -15297,10 +15292,7 @@ /obj/machinery/atmospherics/binary/pump{ dir = 4 }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/small/north, +/obj/machinery/light, /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "het" = ( @@ -16332,8 +16324,7 @@ icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" + dir = 4 }, /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) @@ -17697,10 +17688,6 @@ /turf/simulated/floor/tiled/white, /area/rnd/telesci) "ikJ" = ( -/obj/machinery/camera/network/research{ - c_tag = "Research - Xenobotanical Greenhouse 2"; - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, @@ -17720,6 +17707,11 @@ /obj/effect/floor_decal/spline/plain/corner{ dir = 4 }, +/obj/structure/sink/kitchen{ + dir = 8; + name = "Sterile Sink"; + pixel_x = 20 + }, /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "ikT" = ( @@ -19018,12 +19010,14 @@ /turf/simulated/wall/r_wall, /area/horizon/kitchen/freezer) "iRl" = ( -/obj/structure/closet/firecloset, /obj/effect/floor_decal/corner/lime{ dir = 10 }, /obj/effect/floor_decal/industrial/warning/corner, -/obj/effect/floor_decal/industrial/outline/firefighting_closet, +/obj/machinery/atmospherics/unary/freezer{ + dir = 1; + icon_state = "freezer" + }, /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "iRm" = ( @@ -19546,9 +19540,6 @@ /area/crew_quarters/heads/hor) "jeo" = ( /obj/machinery/door/firedoor, -/obj/structure/platform{ - dir = 8 - }, /obj/effect/floor_decal/industrial/hatch/yellow, /obj/effect/floor_decal/industrial/warning/full, /obj/machinery/door/airlock/glass_research{ @@ -22595,7 +22586,7 @@ dir = 5 }, /obj/machinery/vending/hydronutrients/xenobotany, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/rnd/xenobiology/xenoflora) "kDC" = ( /turf/simulated/wall/shuttle/scc_space_ship/cardinal, @@ -22941,8 +22932,6 @@ /turf/simulated/open/airless, /area/template_noop) "kNe" = ( -/obj/effect/floor_decal/corner/mauve/full, -/obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/sink{ dir = 8; pixel_x = -12 @@ -22952,8 +22941,9 @@ pixel_x = -1; pixel_y = 1 }, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/corner/mauve/diagonal, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "kNH" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ @@ -24148,7 +24138,10 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 }, -/obj/structure/table/reinforced, +/obj/machinery/disposal/small/north, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "lss" = ( @@ -24690,7 +24683,7 @@ /obj/structure/platform{ dir = 4 }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/rnd/xenobiology/xenoflora) "lHx" = ( /obj/machinery/recharge_station, @@ -28174,7 +28167,7 @@ /obj/structure/platform{ dir = 4 }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/rnd/xenobiology/xenoflora) "nhF" = ( /obj/structure/bed/stool/chair/padded/black, @@ -28223,15 +28216,15 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, /obj/effect/floor_decal/corner/lime{ dir = 5 }, /obj/effect/floor_decal/spline/plain{ dir = 1 }, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "niR" = ( @@ -29535,9 +29528,6 @@ /obj/effect/floor_decal/spline/plain/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -29548,6 +29538,9 @@ /obj/effect/floor_decal/spline/plain/corner{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "nSV" = ( @@ -34485,14 +34478,8 @@ /turf/simulated/floor/tiled/dark/full, /area/engineering/engine_monitoring) "qmV" = ( -/obj/structure/platform_deco{ - dir = 8 - }, -/obj/effect/floor_decal/corner/mauve{ - dir = 9 - }, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/corner/mauve/diagonal, +/turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "qnb" = ( /obj/effect/floor_decal/corner/mauve/full{ @@ -37872,7 +37859,8 @@ name = "Xenobotany Maintenance"; req_access = list(52) }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/full, /area/rnd/xenobiology/xenoflora) "rRS" = ( /obj/machinery/door/airlock/glass_service{ @@ -38400,7 +38388,6 @@ /obj/machinery/atmospherics/portables_connector{ dir = 4 }, -/obj/machinery/light, /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "scN" = ( @@ -40460,11 +40447,11 @@ /turf/simulated/floor/tiled, /area/horizon/security/brig) "tiI" = ( -/obj/structure/platform, -/obj/effect/decal/cleanable/dirt, /obj/structure/platform_stairs/full/east_west_cap, -/obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/structure/platform/cutout{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/full, /area/rnd/xenobiology/xenoflora) "tiJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -40607,6 +40594,10 @@ /obj/structure/cable/green{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "tkN" = ( @@ -43390,9 +43381,6 @@ /turf/simulated/floor/tiled/full, /area/maintenance/substation/engineering) "uxp" = ( -/obj/machinery/atmospherics/unary/heater{ - dir = 1 - }, /obj/effect/floor_decal/corner/lime{ dir = 10 }, @@ -47896,6 +47884,7 @@ /obj/structure/platform_stairs/full/east_west_cap{ dir = 8 }, +/obj/structure/platform/cutout, /turf/simulated/floor/tiled/dark, /area/rnd/xenobiology/xenoflora) "wzW" = ( @@ -49032,6 +49021,13 @@ }, /turf/simulated/floor/tiled, /area/operations/lower/machinist) +"wZG" = ( +/obj/effect/floor_decal/corner/mauve/diagonal, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/platform, +/obj/structure/closet/hazmat/research, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "wZJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -49465,13 +49461,12 @@ /turf/simulated/floor/tiled, /area/horizon/security/equipment) "xio" = ( -/obj/machinery/atmospherics/unary/freezer{ - dir = 1; - icon_state = "freezer" - }, /obj/effect/floor_decal/corner/lime{ dir = 10 }, +/obj/machinery/atmospherics/unary/heater{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) "xiu" = ( @@ -51632,15 +51627,11 @@ dir = 8; name = "Trays to Scrubbers" }, -/obj/structure/sink/kitchen{ - dir = 4; - name = "Sterile Sink"; - pixel_x = -20 - }, /obj/structure/platform{ dir = 4 }, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/full, /area/rnd/xenobiology/xenoflora) "yfo" = ( /obj/machinery/door/firedoor, @@ -84169,7 +84160,7 @@ pkV jMk rFn tiI -rFn +wZG iwo gqF gzU From b6c90d074deb2d2cb2632ff3ad1151fd843fc678 Mon Sep 17 00:00:00 2001 From: AuroraBuildBot Date: Mon, 20 Nov 2023 18:34:18 +0000 Subject: [PATCH 05/32] Automatic Changelog compile [ci skip] --- html/changelog.html | 2 + html/changelogs/.all_changelog.yml | 2 + .../changelogs/SleepyGemmy-xenobotany_fix.yml | 6 --- .../fluffyghost-lasteditorconfigfixup.yml | 41 ------------------- 4 files changed, 4 insertions(+), 47 deletions(-) delete mode 100644 html/changelogs/SleepyGemmy-xenobotany_fix.yml delete mode 100644 html/changelogs/fluffyghost-lasteditorconfigfixup.yml diff --git a/html/changelog.html b/html/changelog.html index 298088ef170..f262b174579 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -47,6 +47,7 @@

    FluffyGhost updated:

  • Antag uplink announcements now shows apostrophes correctly, and can have newlines in them.
  • Antag uplink announcements now uses tgui inputs.
  • PDA STT now respects the apostrophes and other characters too.
  • +
  • Fixed all the editorconfig mismatches one last time.

Geeves updated:

    @@ -70,6 +71,7 @@

    SleepyGemmy updated:

    • Fixed some security badges not being named after the actual roles.
    • Polished and tweaked xenobiology.
    • +
    • Fixed the rear xenobotany door not closing and some visuals.

    13 November 2023

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index f62ea2eed70..d4c9054ed54 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -32177,6 +32177,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. newlines in them. - refactor: Antag uplink announcements now uses tgui inputs. - bugfix: PDA STT now respects the apostrophes and other characters too. + - backend: Fixed all the editorconfig mismatches one last time. Geeves: - rscadd: Lings gain a new free ability called Emergency Transform, where their heads detach from their bodies. They can grow back to normal after 10 minutes @@ -32194,3 +32195,4 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. SleepyGemmy: - bugfix: Fixed some security badges not being named after the actual roles. - maptweak: Polished and tweaked xenobiology. + - bugfix: Fixed the rear xenobotany door not closing and some visuals. diff --git a/html/changelogs/SleepyGemmy-xenobotany_fix.yml b/html/changelogs/SleepyGemmy-xenobotany_fix.yml deleted file mode 100644 index 8113410ab00..00000000000 --- a/html/changelogs/SleepyGemmy-xenobotany_fix.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: SleepyGemmy - -delete-after: True - -changes: - - bugfix: "Fixed the rear xenobotany door not closing and some visuals." diff --git a/html/changelogs/fluffyghost-lasteditorconfigfixup.yml b/html/changelogs/fluffyghost-lasteditorconfigfixup.yml deleted file mode 100644 index 9cd5f6aab54..00000000000 --- a/html/changelogs/fluffyghost-lasteditorconfigfixup.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: FluffyGhost - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - backend: "Fixed all the editorconfig mismatches one last time." From 16a13f469c124ea9ea81d8ab839e3d74eab69635 Mon Sep 17 00:00:00 2001 From: Acetrea <138949778+Acetrea@users.noreply.github.com> Date: Mon, 20 Nov 2023 11:23:59 -0700 Subject: [PATCH 06/32] Sleeper Fix (#17811) Fixes the Sleeper not showing stomach contents. --- html/changelogs/Acetrea-StomachSleeperFix.yml | 41 +++++++++++++++++++ tgui/packages/tgui/interfaces/Sleeper.tsx | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/Acetrea-StomachSleeperFix.yml diff --git a/html/changelogs/Acetrea-StomachSleeperFix.yml b/html/changelogs/Acetrea-StomachSleeperFix.yml new file mode 100644 index 00000000000..563bd4224d5 --- /dev/null +++ b/html/changelogs/Acetrea-StomachSleeperFix.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: Acetrea + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Fixed the sleeper not showing stomach contents." diff --git a/tgui/packages/tgui/interfaces/Sleeper.tsx b/tgui/packages/tgui/interfaces/Sleeper.tsx index 66063ece9cd..ea351bab215 100644 --- a/tgui/packages/tgui/interfaces/Sleeper.tsx +++ b/tgui/packages/tgui/interfaces/Sleeper.tsx @@ -129,7 +129,7 @@ export const OccupantStatus = (props, context) => {
    {data.hasstomach ? ( data.stomachreagents.length ? ( - + ) : ( 'No detected reagents in the stomach.' ) From 8502d7c36f690c27cb4e13ed9a04ed1cc4c43a2a Mon Sep 17 00:00:00 2001 From: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com> Date: Mon, 20 Nov 2023 19:24:23 +0100 Subject: [PATCH 07/32] Fox Sprite Stray Pixel Fix (#17806) --- html/changelogs/SleepyGemmy-fox_fix.yml | 6 ++++++ icons/mob/npc/fox.dmi | Bin 2130 -> 2016 bytes 2 files changed, 6 insertions(+) create mode 100644 html/changelogs/SleepyGemmy-fox_fix.yml diff --git a/html/changelogs/SleepyGemmy-fox_fix.yml b/html/changelogs/SleepyGemmy-fox_fix.yml new file mode 100644 index 00000000000..93dcb8df3f8 --- /dev/null +++ b/html/changelogs/SleepyGemmy-fox_fix.yml @@ -0,0 +1,6 @@ +author: SleepyGemmy + +delete-after: True + +changes: + - bugfix: "Fixed the fox sprite having a stray pixel." diff --git a/icons/mob/npc/fox.dmi b/icons/mob/npc/fox.dmi index b1042f230c7907ac9b46a2f5b236dc8e4c7a56ce..affef41dabe90e92fd2180f16c98afcd6cfdeaa9 100644 GIT binary patch delta 1835 zcmV+`2h{k|5a17xBnU-NOjJd{z`&6&LKPiDt2h7v00DGTPE!Ct=GbNc005SehHHO7 zAs1(Eepza6YF-J3A@M1xi75z^3~|~PpOZn1qvDHjDpOW)^>YCS2mph9P2tkq3z7f; z2B%3xK~#90?Ocm?t11u;O$jI}N!s)Ozj|lD2f|2*q_O9o*=seC0JCR6Q8&=jiNRnn z7z_r3;UR+0J^5)_D)EE-LQEg~^22|kA7SdFFz8x-0YoB0CeFhB6}a;8874o=BBl#+(HHVd-5|8w%2x`qmDuI-B7)xb!B^@e`xz!iF?m=Y0+f zspPWQ#~&8Zs_Q$oJqkehjf#H^IRCAhniW6YB`|~m4DKS(b9nG&(+GC)#|FBb0p$#+ zC;+Hnz3cF$wewJ~&t%iNA6>5XVOWW0Q9b|KfF8PDKV`uAe{vB(MSuk-p?&*x06p{( zxNot9*3SP^62Tt+s6^kJq0i(y191mfyj@vst@LFuh9MeC%;3FuC9HqdzE08w&-1S# ztkK41o<;ChqF262HTrGEW%})GZ88)ZYtPg1MND;~#@xZbCJ_R9HTO6RPb+FQzCfc5 z=)_qp{zKxDR0Xfk!LduosI~X-M**CnQ!|gN;w<&BzS9^#-miRq7{Hi_Z@PQM34n@V<^O*aK-`!+_@jK}y=+<_^GACRBB1=A>sIkI7z_r3!C){59HQ@6 z@~^5KqVHGouj(J7?^p7N1`g5pYxx%(r0-Yq#|GZ7?^p7#>mQ--SMtx*kJI<}@*l15 zSMndN?>l}#IX{+O_>b226MntLuSx!+_5GON%kwlpW+nVb>-&E(zt!9P+NS(R>-!16 zbQ(IzKW4A_kJk4+|8?QNUaz;r0Y`s>tcCwN^1ol-m#h4d|9V>-xZiHE2grWA-52`X zb>e@ez7J2zDzEQr1Lw&)0LOp-`ud(-xPN`eE+F~$*L^1c{=$Ugf2F<;kIFi)@5A7z z*8zHd^m(Rz7yy58yM*I^vAz%Y&RhWaoD`|^&PEu(DwvROj35ZW)je9@HKXA0Z&-({>|G-=l%kln!9RcwE0p35r`v-Xcz(2l! zpznsid;h>-`k&lCU~rC#)c4;tzmV`p1q5`i5L*MW!O?$^)c0RDzW}$X{Qd!LbS{81 zoDt_t0R5n4ERVl*enB=mC(jEFjhGDpPP2>wW0Lj#FP>ijiv0cocv8yc^Zo$_gTY`h z7>xf1YS-`oB+B&hF!lWU{XBb}Iq_Lgrgr^)#>}4gNQCLU)grYVFYX z$#-6o$C#G*-6=jfkE9MPJaB)PzMrZNhVE$zcBxY+7XWGzgwheXT(9q^x{sl?e%Vvv z-=hFbX6Rk%`?!vOQ{N93`N#S`rM%HHB|VG^aAJS^A6{TfZU*oYeV@`kQ|ZvVdZw0^ z3aKBBEII${^nIMzBGhM`Hhp67mAeC|)A#)~Lgl9u0D0_N##*cIPooskL&PM~55VjD zUf%bs^GAJu9YA=FU&oW&>HBb>XoprUCt!GuyutrT-$!}hFIx8U{_VC70Mhd?^Zhjr zGk$;lKF+T<30(8P!T(X;M|mID@cRJZo^hX|nS8#_13j+Y_XGW?@57^kcUsEajpB#k z_5E<&_~QVkHRO}NFC{!~zsunm#yuD%3*U(V(nauQUe@r+7oKM^`%i2`n2>Bem?Ibq z{IXY027|$1Fc^$~5N~@TqlxP2vzl?es=t4jqUHT+0bDlu#ay+j{%nbs_e(_o99oI0 z`y@@JZ&y22{TYj8Ny+<;J}CS=0V=WX#TFBdO`3yN^+{JLrGJvg9R(r!I{G=4(igxu z@k)<0i3wWOr$8zF=)bqDooJRySV%u7hz2ZyG5VsN6|Ivql2-L8P&zZp`=jNH-mrfY z{G8Gk!i@V!viG(S{6j2ab>$6nr_Y?rw~Pft~VR`n^s)tI}X{C=3iYvtF1|62uv!C?GF Z_zwXZn!_ni+YA5z002ovPDHLkV1hucv+@7{ delta 1950 zcmV;P2VwZ&57H2jBnwDTOjJd{z`+0i|B)<06$1)XK>z>%0d!JMQvg8b*k%9#0H2YA zYkzgNIu z8UU~vP|dNPaB~0v2MtL?K~#90?OY9e>MRWPWe%aGAL{o0|DSpj=m&)~tx%`Cm$PS1 z1acDE(s}|roeByHUW)%-?La|6K|#R`;eWlR)W>b9!V~$07+=!r{iYv&>0@Wmx%>i% z1Vbjy!v5}X<>S*Ye(sAPn_ql>$d6CPz(q-Q*%iR2l5#9asTiXN@=IMIv|OuK3aXV_ ztM^)3Ly{=4y>j`bu9a3bW55#Z4WO>@AV>*s_6Cs2ZyM9o@N04dK>tuU z7(*9KC8l%U+ZKJVU7zR>JkGy_=#4f#^DKh5620(Es=@DGT*lANeIHGQrti<=`->R+ z1cRBtza$X?jw<&!3r{O*F~7i|b?C%d%>F~+5_JWy&)$1mkilrD@CN~$;h-{)tKuwm zx4hFBH{UOO-V9(Ugg4z3{(q=}Jh2AgG&I5d(nJAJ5iI;40|*B*fj_86-pi^5vVO3) z5dr1@)HjR2prD|jprD|jfIy1Azt!&9`GrN76n%ft?pGT>JHN2#pQ7(Oaev*zXXh7u z14;Tm3jAD#;@SCy85#OMlc9KaejzlFrth-}is$ARmi<%p{UZ`2iGTc4_f&oVg!(?4 zpmzyo$2wzj*%u zy2jDJ{r&-To}+*J{R23DS^TfxKY-%dFWx_Z1Nh7L55Ny2&%giv0T{sFy?+1(@VD-XOOLPL=h^ejiO(Hva@X%Orp3-2$toCOWoF4- zzt5T$Db~F2^40&9tT$RG>H9l9A&p5^F2P>?^uB7CeSh^c$wT@+{f&#ZUF(|ChgtO+ z{I8~hZnlJ;JvKrMn$Iy{&2 z_5E1)S<(7sONoD50T^cLUFiF`j(=6(_ZInw`aY$+(K01HjS6sL{U2W7NUjEOh`vv0 zpRsi4Tz@@NOG|~+TQdvif1bXNi8Vrf#;oH5ldnt;AWz?S*9cV~CjfY)Eo05q_s3a^ zI6_1c=?QT9zLWRe>ij|9Uk2cx z1_0%0n)&`3rWv<>AJfxS1Uvjc;QyfSqr8u6_4p(TqOdr->fd?z@S8(D&id zz&R}?ccXX`oWAd`8{ZCKTthzU`%=Q=_D?w+!q^9+XyH2%K)eXvOv@UM{KE4nCjW_T z2qU7c2U7$?gE#xiSx`_=P*6}%@DJk0p2%pTe0o+h&R6wkQ?$IFEr834U(A)O>Q9zv zd4GS8=+B{+sJf5RRQ&BKQPrO?Tb7i(Z|S|pj}xF0YroiHq3WaIpjCa+RZ8g}<#9_v zh`yG7D#i3WV61qh2b#zPt?E;tlz#NzS=LrGizO_ip9;hP?twA-qOBFJqcf6L^(jy~ zGs^pe<%?di<9!^{?}Qolr(7-~Jj$};mT#3WTE+obdEe>#;<95HV)~sBV*uh5?xUbp zeF|g%<|M`dc1#5^{ay^lal#DpL;I&uqr&;v$@`=2eQwa{sSMDnJ_WcMxf{y+!|c3P k-WKJ*RTLBy6#OFm0W7ht(=|}ivH$=807*qoM6N<$f<^rMrT_o{ From 2602746add592b0a3a737cc6837ddb647c261496 Mon Sep 17 00:00:00 2001 From: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com> Date: Mon, 20 Nov 2023 19:24:51 +0100 Subject: [PATCH 08/32] TGUI Lint Fix (#17805) --- html/changelogs/SleepyGemmy-tgui_lint_fix.yml | 6 ++++++ tgui/packages/tgui/interfaces/FlavorText.tsx | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/SleepyGemmy-tgui_lint_fix.yml diff --git a/html/changelogs/SleepyGemmy-tgui_lint_fix.yml b/html/changelogs/SleepyGemmy-tgui_lint_fix.yml new file mode 100644 index 00000000000..0f6155070f9 --- /dev/null +++ b/html/changelogs/SleepyGemmy-tgui_lint_fix.yml @@ -0,0 +1,6 @@ +author: SleepyGemmy + +delete-after: True + +changes: + - bugfix: "Fixed a TGUI lint issue." diff --git a/tgui/packages/tgui/interfaces/FlavorText.tsx b/tgui/packages/tgui/interfaces/FlavorText.tsx index 7961dde48e5..20009249dda 100644 --- a/tgui/packages/tgui/interfaces/FlavorText.tsx +++ b/tgui/packages/tgui/interfaces/FlavorText.tsx @@ -11,7 +11,7 @@ export type FlavorTextData = { const Linkify = ({ text }) => { const isUrl = (word) => { const urlPattern = - /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/gm; + /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([-.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/gm; return word.match(urlPattern); }; From c0fc27d749bc98da40e3765af02586c1c5c4b064 Mon Sep 17 00:00:00 2001 From: Fluffy <65877598+FluffyGhoster@users.noreply.github.com> Date: Mon, 20 Nov 2023 19:26:10 +0100 Subject: [PATCH 09/32] dfas (#17804) --- code/__defines/math_physics.dm | 11 +++-- code/game/machinery/alarm.dm | 2 +- .../fluffyghost-fixaircontrollertempinput.yml | 42 +++++++++++++++++++ 3 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 html/changelogs/fluffyghost-fixaircontrollertempinput.yml diff --git a/code/__defines/math_physics.dm b/code/__defines/math_physics.dm index c100de05bae..99b2578cd74 100644 --- a/code/__defines/math_physics.dm +++ b/code/__defines/math_physics.dm @@ -16,9 +16,14 @@ #define RADIATOR_EXPOSED_SURFACE_AREA_RATIO 0.04 // (3 cm + 100 cm * sin(3deg))/(2*(3+100 cm)). Unitless ratio. #define HUMAN_EXPOSED_SURFACE_AREA 5.2 //m^2, surface area of 1.7m (H) x 0.46m (D) cylinder -#define T0C 273.15 // 0.0 degrees celcius -#define T20C 293.15 // 20.0 degrees celcius -#define TCMB 2.7 // -270.3 degrees celcius +/// 0.0 Degrees celsius, in Kelvin +#define T0C 273.15 + +/// 20.0 Degrees celsius, in Kelvin +#define T20C 293.15 + +/// -270.3 degrees celsius, in Kelvin +#define TCMB 2.7 #define QUANTIZE(variable) (round(variable,0.0001)) #define ROUND_UP(x) ( -round(-(x))) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 80ad130c8ce..cc46695ba53 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -779,7 +779,7 @@ pixel_x = 10; 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 = tgui_input_number(usr, "What temperature would you like the system to mantain?", "Thermostat Controls", target_temperature - T0C, max_temperature - T0C, min_temperature - T0C) + var/input_temperature = tgui_input_number(usr, "What temperature would you like the system to mantain?", "Thermostat Controls", target_temperature - T0C, max_temperature, min_temperature) if(isnum(input_temperature)) var/temp = Clamp(input_temperature, min_temperature, max_temperature) if(input_temperature > max_temperature || input_temperature < min_temperature) diff --git a/html/changelogs/fluffyghost-fixaircontrollertempinput.yml b/html/changelogs/fluffyghost-fixaircontrollertempinput.yml new file mode 100644 index 00000000000..1b411987ce3 --- /dev/null +++ b/html/changelogs/fluffyghost-fixaircontrollertempinput.yml @@ -0,0 +1,42 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: FluffyGhost + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Fixed air controller temperature input." + - backend: "DMdoc for the temperature defines that are used to convert to/from Kelvin to/from Celsius." From 98625f168c13c644fd5227c9cc46ad3aba2dd1e4 Mon Sep 17 00:00:00 2001 From: AuroraBuildBot Date: Mon, 20 Nov 2023 18:56:13 +0000 Subject: [PATCH 10/32] Automatic Changelog compile [ci skip] --- html/changelog.html | 8 ++++ html/changelogs/.all_changelog.yml | 7 ++++ html/changelogs/Acetrea-StomachSleeperFix.yml | 41 ------------------ html/changelogs/SleepyGemmy-fox_fix.yml | 6 --- html/changelogs/SleepyGemmy-tgui_lint_fix.yml | 6 --- .../fluffyghost-fixaircontrollertempinput.yml | 42 ------------------- 6 files changed, 15 insertions(+), 95 deletions(-) delete mode 100644 html/changelogs/Acetrea-StomachSleeperFix.yml delete mode 100644 html/changelogs/SleepyGemmy-fox_fix.yml delete mode 100644 html/changelogs/SleepyGemmy-tgui_lint_fix.yml delete mode 100644 html/changelogs/fluffyghost-fixaircontrollertempinput.yml diff --git a/html/changelog.html b/html/changelog.html index f262b174579..9441426a64f 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -36,6 +36,10 @@

    20 November 2023

    +

    Acetrea updated:

    +
      +
    • Fixed the sleeper not showing stomach contents.
    • +

    DreamySkrell updated:

    • Xenobotany maint door.
    • @@ -48,6 +52,8 @@

      FluffyGhost updated:

    • Antag uplink announcements now uses tgui inputs.
    • PDA STT now respects the apostrophes and other characters too.
    • Fixed all the editorconfig mismatches one last time.
    • +
    • Fixed air controller temperature input.
    • +
    • DMdoc for the temperature defines that are used to convert to/from Kelvin to/from Celsius.

    Geeves updated:

      @@ -72,6 +78,8 @@

      SleepyGemmy updated:

    • Fixed some security badges not being named after the actual roles.
    • Polished and tweaked xenobiology.
    • Fixed the rear xenobotany door not closing and some visuals.
    • +
    • Fixed the fox sprite having a stray pixel.
    • +
    • Fixed a TGUI lint issue.

    13 November 2023

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index d4c9054ed54..933ea734414 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -32167,6 +32167,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. wraps, a Europan deep dive dish, and a Biesellite blue moon dish. Sprited by TomixComics. 2023-11-20: + Acetrea: + - bugfix: Fixed the sleeper not showing stomach contents. DreamySkrell: - maptweak: Xenobotany maint door. FluffyGhost: @@ -32178,6 +32180,9 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - refactor: Antag uplink announcements now uses tgui inputs. - bugfix: PDA STT now respects the apostrophes and other characters too. - backend: Fixed all the editorconfig mismatches one last time. + - bugfix: Fixed air controller temperature input. + - backend: DMdoc for the temperature defines that are used to convert to/from Kelvin + to/from Celsius. Geeves: - rscadd: Lings gain a new free ability called Emergency Transform, where their heads detach from their bodies. They can grow back to normal after 10 minutes @@ -32196,3 +32201,5 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Fixed some security badges not being named after the actual roles. - maptweak: Polished and tweaked xenobiology. - bugfix: Fixed the rear xenobotany door not closing and some visuals. + - bugfix: Fixed the fox sprite having a stray pixel. + - bugfix: Fixed a TGUI lint issue. diff --git a/html/changelogs/Acetrea-StomachSleeperFix.yml b/html/changelogs/Acetrea-StomachSleeperFix.yml deleted file mode 100644 index 563bd4224d5..00000000000 --- a/html/changelogs/Acetrea-StomachSleeperFix.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: Acetrea - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Fixed the sleeper not showing stomach contents." diff --git a/html/changelogs/SleepyGemmy-fox_fix.yml b/html/changelogs/SleepyGemmy-fox_fix.yml deleted file mode 100644 index 93dcb8df3f8..00000000000 --- a/html/changelogs/SleepyGemmy-fox_fix.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: SleepyGemmy - -delete-after: True - -changes: - - bugfix: "Fixed the fox sprite having a stray pixel." diff --git a/html/changelogs/SleepyGemmy-tgui_lint_fix.yml b/html/changelogs/SleepyGemmy-tgui_lint_fix.yml deleted file mode 100644 index 0f6155070f9..00000000000 --- a/html/changelogs/SleepyGemmy-tgui_lint_fix.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: SleepyGemmy - -delete-after: True - -changes: - - bugfix: "Fixed a TGUI lint issue." diff --git a/html/changelogs/fluffyghost-fixaircontrollertempinput.yml b/html/changelogs/fluffyghost-fixaircontrollertempinput.yml deleted file mode 100644 index 1b411987ce3..00000000000 --- a/html/changelogs/fluffyghost-fixaircontrollertempinput.yml +++ /dev/null @@ -1,42 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: FluffyGhost - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Fixed air controller temperature input." - - backend: "DMdoc for the temperature defines that are used to convert to/from Kelvin to/from Celsius." From c5f77b950614475029d34b9a79724ba78d7dac78 Mon Sep 17 00:00:00 2001 From: Fluffy <65877598+FluffyGhoster@users.noreply.github.com> Date: Mon, 20 Nov 2023 19:27:29 +0100 Subject: [PATCH 11/32] fix (#17803) --- code/modules/mob/living/silicon/ai/ai.dm | 5 ++- code/modules/power/apc.dm | 1 + .../fluffyghost-fixaiapcpowerchannels.yml | 42 +++++++++++++++++++ tgui/packages/tgui/interfaces/Apc.tsx | 5 ++- 4 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 html/changelogs/fluffyghost-fixaiapcpowerchannels.yml diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index cf0aa7152cd..e6911c2ea55 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -267,7 +267,10 @@ var/list/ai_verbs_default = list( health = maxHealth - getFireLoss() - getBruteLoss() // Oxyloss is not part of health as it represents AIs backup power. AI is immune against ToxLoss as it is machine. /mob/living/silicon/ai/proc/setup_icon() - var/datum/custom_synth/sprite = robot_custom_icons[name] + var/datum/custom_synth/sprite = null + if(robot_custom_icons) + sprite = robot_custom_icons[name] + if(istype(sprite) && sprite.synthckey == ckey) custom_sprite = TRUE icon = CUSTOM_ITEM_SYNTH diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 5537b24144b..793f77f0685 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1158,6 +1158,7 @@ data["power_cell_charge"] = cell?.percent() data["fail_time"] = failure_timer * 2 data["silicon_user"] = isAdmin || issilicon(user) + data["is_AI"] = isAI(user) data["total_load"] = round(lastused_total) data["total_charging"] = round(lastused_charging) data["is_operating"] = operating diff --git a/html/changelogs/fluffyghost-fixaiapcpowerchannels.yml b/html/changelogs/fluffyghost-fixaiapcpowerchannels.yml new file mode 100644 index 00000000000..1172c6e0560 --- /dev/null +++ b/html/changelogs/fluffyghost-fixaiapcpowerchannels.yml @@ -0,0 +1,42 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: FluffyGhost + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Fixed AI not being able to interact with APC power channels, the borgs still remain locked out of it." + - bugfix: "Resolved a runtime on AI spawn when trying to pick a custom sprite from an empty list of custom sprites." diff --git a/tgui/packages/tgui/interfaces/Apc.tsx b/tgui/packages/tgui/interfaces/Apc.tsx index 1f4eb5b19b2..3936310effb 100644 --- a/tgui/packages/tgui/interfaces/Apc.tsx +++ b/tgui/packages/tgui/interfaces/Apc.tsx @@ -9,6 +9,7 @@ export type APCData = { power_cell_charge: number; fail_time: number; silicon_user: BooleanLike; + is_AI: BooleanLike; total_load: number; total_charging: number; is_operating: BooleanLike; @@ -170,7 +171,7 @@ export const APCWindow = (props, context) => { [{channelStatus(channel.status)}] | [ {channelPower(channel.status)}] | {channel.power_load} W - {!data.locked && !data.silicon_user ? ( + {(!data.locked && !data.silicon_user) || data.is_AI ? (
    - {data.silicon_user ? ( + {data.silicon_user || data.is_AI ? (

Geeves updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 933ea734414..4eb186505b4 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -32183,6 +32183,10 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Fixed air controller temperature input. - backend: DMdoc for the temperature defines that are used to convert to/from Kelvin to/from Celsius. + - bugfix: Fixed AI not being able to interact with APC power channels, the borgs + still remain locked out of it. + - bugfix: Resolved a runtime on AI spawn when trying to pick a custom sprite from + an empty list of custom sprites. Geeves: - rscadd: Lings gain a new free ability called Emergency Transform, where their heads detach from their bodies. They can grow back to normal after 10 minutes diff --git a/html/changelogs/fluffyghost-fixaiapcpowerchannels.yml b/html/changelogs/fluffyghost-fixaiapcpowerchannels.yml deleted file mode 100644 index 1172c6e0560..00000000000 --- a/html/changelogs/fluffyghost-fixaiapcpowerchannels.yml +++ /dev/null @@ -1,42 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: FluffyGhost - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Fixed AI not being able to interact with APC power channels, the borgs still remain locked out of it." - - bugfix: "Resolved a runtime on AI spawn when trying to pick a custom sprite from an empty list of custom sprites." From 0499737655b56a4e77de06c7c2f22b0fa7f56787 Mon Sep 17 00:00:00 2001 From: Acetrea <138949778+Acetrea@users.noreply.github.com> Date: Mon, 20 Nov 2023 11:29:57 -0700 Subject: [PATCH 13/32] Kois Mycosis Sprite Fix (#17798) * Kois Mycosis Sprite Fix Fixes Kois Mycosis sprite not appearing when extracted from a body. * kois * Remove spaces from changelog * Changelog Fix --------- Co-authored-by: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com> --- code/modules/organs/subtypes/parasite.dm | 4 +-- html/changelogs/Acetrea-KoisMycosisFix.yml | 41 ++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 html/changelogs/Acetrea-KoisMycosisFix.yml diff --git a/code/modules/organs/subtypes/parasite.dm b/code/modules/organs/subtypes/parasite.dm index 9d7f00d728d..9cedb4dce6e 100644 --- a/code/modules/organs/subtypes/parasite.dm +++ b/code/modules/organs/subtypes/parasite.dm @@ -77,7 +77,7 @@ /obj/item/organ/internal/parasite/kois name = "k'ois mycosis" - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/organs/organs.dmi' icon_state = "kois-on" dead_icon = "kois-off" @@ -149,7 +149,7 @@ /obj/item/organ/internal/parasite/blackkois name = "k'ois mycosis" - icon = 'icons/obj/surgery.dmi' + icon = 'icons/obj/organs/organs.dmi' icon_state = "black-on" dead_icon = "black-off" subtle = 1 diff --git a/html/changelogs/Acetrea-KoisMycosisFix.yml b/html/changelogs/Acetrea-KoisMycosisFix.yml new file mode 100644 index 00000000000..83ed6a57cac --- /dev/null +++ b/html/changelogs/Acetrea-KoisMycosisFix.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: Acetrea + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Fixed kois mycosis and black kois not having a sprite when removed from a body." From 1a805f34e1cebb220672f915e4bb4ef400ba4f6b Mon Sep 17 00:00:00 2001 From: AuroraBuildBot Date: Mon, 20 Nov 2023 19:16:40 +0000 Subject: [PATCH 14/32] Automatic Changelog compile [ci skip] --- html/changelog.html | 1 + html/changelogs/.all_changelog.yml | 2 ++ html/changelogs/Acetrea-KoisMycosisFix.yml | 41 ---------------------- 3 files changed, 3 insertions(+), 41 deletions(-) delete mode 100644 html/changelogs/Acetrea-KoisMycosisFix.yml diff --git a/html/changelog.html b/html/changelog.html index 2a026c32496..fe863cf3e25 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -39,6 +39,7 @@

    20 November 2023

    Acetrea updated:

    • Fixed the sleeper not showing stomach contents.
    • +
    • Fixed kois mycosis and black kois not having a sprite when removed from a body.

    DreamySkrell updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 4eb186505b4..cb4091fc5c1 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -32169,6 +32169,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2023-11-20: Acetrea: - bugfix: Fixed the sleeper not showing stomach contents. + - bugfix: Fixed kois mycosis and black kois not having a sprite when removed from + a body. DreamySkrell: - maptweak: Xenobotany maint door. FluffyGhost: diff --git a/html/changelogs/Acetrea-KoisMycosisFix.yml b/html/changelogs/Acetrea-KoisMycosisFix.yml deleted file mode 100644 index 83ed6a57cac..00000000000 --- a/html/changelogs/Acetrea-KoisMycosisFix.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: Acetrea - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Fixed kois mycosis and black kois not having a sprite when removed from a body." From f05b11f0f3da9b452bee1c4ac4e1ffc04ce77e6c Mon Sep 17 00:00:00 2001 From: Fluffy <65877598+FluffyGhoster@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:22:26 +0100 Subject: [PATCH 15/32] sdfsa (#17793) --- code/modules/surgery/implant.dm | 7 +++- .../fluffyghost-fixgremeggremovalsurgery.yml | 41 +++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 html/changelogs/fluffyghost-fixgremeggremovalsurgery.yml diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 9a5f948942e..24cd07a9793 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -184,16 +184,18 @@ if(length(affected.implants)) var/list/implants = list() var/shrapnel_present = FALSE - for(var/obj/item/I in affected.implants) + for(var/obj/I in affected.implants) implants += I if(!istype(I, /obj/item/implant)) shrapnel_present = TRUE - for(var/obj/item/I in implants) + for(var/obj/I in implants) /// Prioritize shrapnel instead of stuff like loyalty implants. if(shrapnel_present && istype(I, /obj/item/implant)) continue + if(do_mob(user, target, 0.5 SECONDS)) + user.visible_message("[user] takes [I] out of incision on [target]'s [affected.name] with \the [tool].", \ SPAN_NOTICE("You take [I] out of incision on [target]'s [affected.name]s with \the [tool].") ) target.remove_implant(I, TRUE, affected) @@ -212,6 +214,7 @@ var/obj/item/device/gps/gps = I moved_event.unregister(target, gps) gps.implanted_into = null + playsound(target.loc, 'sound/effects/squelch1.ogg', 50, 1) else user.visible_message("[user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ diff --git a/html/changelogs/fluffyghost-fixgremeggremovalsurgery.yml b/html/changelogs/fluffyghost-fixgremeggremovalsurgery.yml new file mode 100644 index 00000000000..ed915fc723d --- /dev/null +++ b/html/changelogs/fluffyghost-fixgremeggremovalsurgery.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: FluffyGhost + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Fixed gremorian eggs not being extractable by surgery." From bd9f1b36dde56830813f1b391957e6efc7006cb6 Mon Sep 17 00:00:00 2001 From: Fluffy <65877598+FluffyGhoster@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:22:49 +0100 Subject: [PATCH 16/32] sdafa (#17791) --- code/modules/mob/living/carbon/human/human.dm | 2 +- .../fluffyghost_fixmanifestimplosion.yml | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/fluffyghost_fixmanifestimplosion.yml diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 6c60272ebca..f44f12381bc 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -667,7 +667,7 @@ var/setmedical = tgui_input_list(usr, "Specify a new medical status for this person.", "Medical HUD", list("*SSD*", "*Deceased*", "*Missing*", "Physically Unfit", "Active", "Disabled", "Cancel"), R.physical_status) if(hasHUD(usr,"medical")) - if(setmedical != "Cancel") + if(!isnull(setmedical) && setmedical != "Cancel") R.physical_status = setmedical modified = 1 SSrecords.reset_manifest() diff --git a/html/changelogs/fluffyghost_fixmanifestimplosion.yml b/html/changelogs/fluffyghost_fixmanifestimplosion.yml new file mode 100644 index 00000000000..ee15d833aee --- /dev/null +++ b/html/changelogs/fluffyghost_fixmanifestimplosion.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: FluffyGhost + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Fixed manifest imploding when someone tries to change the physical status via HUD and closes the window without hitting cancel." From d1f2649f555a216e703715bb7b111fb4f59b9508 Mon Sep 17 00:00:00 2001 From: AuroraBuildBot Date: Mon, 20 Nov 2023 19:34:54 +0000 Subject: [PATCH 17/32] Automatic Changelog compile [ci skip] --- html/changelog.html | 1 + html/changelogs/.all_changelog.yml | 1 + .../fluffyghost-fixgremeggremovalsurgery.yml | 41 ------------------- 3 files changed, 2 insertions(+), 41 deletions(-) delete mode 100644 html/changelogs/fluffyghost-fixgremeggremovalsurgery.yml diff --git a/html/changelog.html b/html/changelog.html index fe863cf3e25..d789788c260 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -57,6 +57,7 @@

      FluffyGhost updated:

    • DMdoc for the temperature defines that are used to convert to/from Kelvin to/from Celsius.
    • Fixed AI not being able to interact with APC power channels, the borgs still remain locked out of it.
    • Resolved a runtime on AI spawn when trying to pick a custom sprite from an empty list of custom sprites.
    • +
    • Fixed gremorian eggs not being extractable by surgery.

    Geeves updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index cb4091fc5c1..24087d00b07 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -32189,6 +32189,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. still remain locked out of it. - bugfix: Resolved a runtime on AI spawn when trying to pick a custom sprite from an empty list of custom sprites. + - bugfix: Fixed gremorian eggs not being extractable by surgery. Geeves: - rscadd: Lings gain a new free ability called Emergency Transform, where their heads detach from their bodies. They can grow back to normal after 10 minutes diff --git a/html/changelogs/fluffyghost-fixgremeggremovalsurgery.yml b/html/changelogs/fluffyghost-fixgremeggremovalsurgery.yml deleted file mode 100644 index ed915fc723d..00000000000 --- a/html/changelogs/fluffyghost-fixgremeggremovalsurgery.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: FluffyGhost - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Fixed gremorian eggs not being extractable by surgery." From 4931201a70e94ae5881e823643c0276324ee3011 Mon Sep 17 00:00:00 2001 From: DreamySkrell <107256943+DreamySkrell@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:23:22 +0100 Subject: [PATCH 18/32] o (#17787) Co-authored-by: DreamySkrell <> --- code/modules/shuttles/landmarks.dm | 5 ++- ...Skrell-landmark-docking-controller-fix.yml | 41 +++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 html/changelogs/DreamySkrell-landmark-docking-controller-fix.yml diff --git a/code/modules/shuttles/landmarks.dm b/code/modules/shuttles/landmarks.dm index 364e8ce92db..327b15cfd74 100644 --- a/code/modules/shuttles/landmarks.dm +++ b/code/modules/shuttles/landmarks.dm @@ -47,9 +47,10 @@ if(!docking_controller) return var/docking_tag = docking_controller - docking_controller = SSshuttle.docking_registry[docking_tag] if(!istype(docking_controller)) - LOG_DEBUG("Could not find docking controller for shuttle waypoint '[name]', docking tag was '[docking_tag]'.") + docking_controller = SSshuttle.docking_registry[docking_tag] + if(!istype(docking_controller)) + LOG_DEBUG("Could not find docking controller for shuttle waypoint '[name]', docking tag was '[docking_tag]'.") /obj/effect/shuttle_landmark/forceMove() var/obj/effect/overmap/visitable/map_origin = map_sectors["[z]"] diff --git a/html/changelogs/DreamySkrell-landmark-docking-controller-fix.yml b/html/changelogs/DreamySkrell-landmark-docking-controller-fix.yml new file mode 100644 index 00000000000..c1e63ace7b4 --- /dev/null +++ b/html/changelogs/DreamySkrell-landmark-docking-controller-fix.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: DreamySkrell + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Shuttle landmark docking controller fix." From 8ca1a6d17a0f4e31e0fe43eb02626ded424c627f Mon Sep 17 00:00:00 2001 From: Fluffy <65877598+FluffyGhoster@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:24:36 +0100 Subject: [PATCH 19/32] MANUAL_UNIT_TEST compiler warning (#17785) * Atomization * asfs --------- Co-authored-by: FluffyGhost --- code/__defines/manual_unit_testing.dm | 4 ++ html/changelogs/FluffyGhost-manualut_warn.yml | 41 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 html/changelogs/FluffyGhost-manualut_warn.yml diff --git a/code/__defines/manual_unit_testing.dm b/code/__defines/manual_unit_testing.dm index c3d055a946a..f3dcdcb031e 100644 --- a/code/__defines/manual_unit_testing.dm +++ b/code/__defines/manual_unit_testing.dm @@ -1,3 +1,7 @@ // !!! For manual use only, remember to recomment before PRing !!! // #define UNIT_TEST // #define MANUAL_UNIT_TEST + +#if defined(MANUAL_UNIT_TEST) && !defined(SPACEMAN_DMM) && !defined(OPENDREAM) + #warn Manual unit test is defined, remember to recomment it before PRing! +#endif // MANUAL_UNIT_TEST diff --git a/html/changelogs/FluffyGhost-manualut_warn.yml b/html/changelogs/FluffyGhost-manualut_warn.yml new file mode 100644 index 00000000000..bd102372f25 --- /dev/null +++ b/html/changelogs/FluffyGhost-manualut_warn.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: FluffyGhost + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - backend: "Added a check to ensure that a warning is raised if the manual unit tests are left enable, this should fail the CI and prevent a merge with it being left over." From 619fc40b9c253d8c4ed99e1b72dc89cc9476281d Mon Sep 17 00:00:00 2001 From: AuroraBuildBot Date: Mon, 20 Nov 2023 19:55:53 +0000 Subject: [PATCH 20/32] Automatic Changelog compile [ci skip] --- html/changelog.html | 3 ++ html/changelogs/.all_changelog.yml | 6 +++ ...Skrell-landmark-docking-controller-fix.yml | 41 ------------------- html/changelogs/FluffyGhost-manualut_warn.yml | 41 ------------------- .../fluffyghost_fixmanifestimplosion.yml | 41 ------------------- 5 files changed, 9 insertions(+), 123 deletions(-) delete mode 100644 html/changelogs/DreamySkrell-landmark-docking-controller-fix.yml delete mode 100644 html/changelogs/FluffyGhost-manualut_warn.yml delete mode 100644 html/changelogs/fluffyghost_fixmanifestimplosion.yml diff --git a/html/changelog.html b/html/changelog.html index d789788c260..557ad2287b7 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -44,6 +44,7 @@

      Acetrea updated:

      DreamySkrell updated:

      • Xenobotany maint door.
      • +
      • Shuttle landmark docking controller fix.

      FluffyGhost updated:

        @@ -58,6 +59,8 @@

        FluffyGhost updated:

      • Fixed AI not being able to interact with APC power channels, the borgs still remain locked out of it.
      • Resolved a runtime on AI spawn when trying to pick a custom sprite from an empty list of custom sprites.
      • Fixed gremorian eggs not being extractable by surgery.
      • +
      • Fixed manifest imploding when someone tries to change the physical status via HUD and closes the window without hitting cancel.
      • +
      • Added a check to ensure that a warning is raised if the manual unit tests are left enable, this should fail the CI and prevent a merge with it being left over.

      Geeves updated:

        diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 24087d00b07..bd277bb0aa6 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -32173,6 +32173,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. a body. DreamySkrell: - maptweak: Xenobotany maint door. + - bugfix: Shuttle landmark docking controller fix. FluffyGhost: - rscadd: Added text manipulation macros from TG, and a new one to have newlines working. @@ -32190,6 +32191,11 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Resolved a runtime on AI spawn when trying to pick a custom sprite from an empty list of custom sprites. - bugfix: Fixed gremorian eggs not being extractable by surgery. + - bugfix: Fixed manifest imploding when someone tries to change the physical status + via HUD and closes the window without hitting cancel. + - backend: Added a check to ensure that a warning is raised if the manual unit tests + are left enable, this should fail the CI and prevent a merge with it being left + over. Geeves: - rscadd: Lings gain a new free ability called Emergency Transform, where their heads detach from their bodies. They can grow back to normal after 10 minutes diff --git a/html/changelogs/DreamySkrell-landmark-docking-controller-fix.yml b/html/changelogs/DreamySkrell-landmark-docking-controller-fix.yml deleted file mode 100644 index c1e63ace7b4..00000000000 --- a/html/changelogs/DreamySkrell-landmark-docking-controller-fix.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: DreamySkrell - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Shuttle landmark docking controller fix." diff --git a/html/changelogs/FluffyGhost-manualut_warn.yml b/html/changelogs/FluffyGhost-manualut_warn.yml deleted file mode 100644 index bd102372f25..00000000000 --- a/html/changelogs/FluffyGhost-manualut_warn.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: FluffyGhost - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - backend: "Added a check to ensure that a warning is raised if the manual unit tests are left enable, this should fail the CI and prevent a merge with it being left over." diff --git a/html/changelogs/fluffyghost_fixmanifestimplosion.yml b/html/changelogs/fluffyghost_fixmanifestimplosion.yml deleted file mode 100644 index ee15d833aee..00000000000 --- a/html/changelogs/fluffyghost_fixmanifestimplosion.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: FluffyGhost - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Fixed manifest imploding when someone tries to change the physical status via HUD and closes the window without hitting cancel." From b73a8ea6ab46324ef9a402bcae5cef76943e9bd9 Mon Sep 17 00:00:00 2001 From: Fluffy <65877598+FluffyGhoster@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:25:15 +0100 Subject: [PATCH 21/32] Spellcheck UNIT_TESTS to UNIT_TEST (#17784) * Atomization * sdf --------- Co-authored-by: FluffyGhost --- code/__defines/_unit_tests.dm | 2 +- .../FluffyGhost-spellcheck_UNIT_TEST.yml | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/FluffyGhost-spellcheck_UNIT_TEST.yml diff --git a/code/__defines/_unit_tests.dm b/code/__defines/_unit_tests.dm index 8ebdb2ebad4..cd7e692a9a0 100644 --- a/code/__defines/_unit_tests.dm +++ b/code/__defines/_unit_tests.dm @@ -1,7 +1,7 @@ //include unit test files in this module in this ifdef //Keep this sorted alphabetically -// #if defined(UNIT_TESTS) || defined(SPACEMAN_DMM) //tgstation style, not relevant for us, for now +// #if defined(UNIT_TEST) || defined(SPACEMAN_DMM) //tgstation style, not relevant for us, for now /// Constants indicating unit test completion status #define UNIT_TEST_FAILED null diff --git a/html/changelogs/FluffyGhost-spellcheck_UNIT_TEST.yml b/html/changelogs/FluffyGhost-spellcheck_UNIT_TEST.yml new file mode 100644 index 00000000000..07dee74e2eb --- /dev/null +++ b/html/changelogs/FluffyGhost-spellcheck_UNIT_TEST.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: FluffyGhost + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - spellcheck: "Renamed a bogus UNIT_TESTS to UNIT_TEST." From 00f1aef9ed55a5879e85587f432c34d580d9ab76 Mon Sep 17 00:00:00 2001 From: Fluffy <65877598+FluffyGhoster@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:25:31 +0100 Subject: [PATCH 22/32] Updated CI to use byond 515.1620 (#17783) --- .tgs.yml | 2 +- dependencies.sh | 2 +- html/changelogs/fluffyghost_updateci1620.yml | 41 ++++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 html/changelogs/fluffyghost_updateci1620.yml diff --git a/.tgs.yml b/.tgs.yml index 402699ffcdc..9fbd3d2cf8f 100644 --- a/.tgs.yml +++ b/.tgs.yml @@ -3,7 +3,7 @@ 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.1619" +byond: "515.1620" # Folders to create in "/Configuration/GameStaticFiles/" static_files: # Config directory should be static diff --git a/dependencies.sh b/dependencies.sh index 6c0eeb5d04f..0e77902f781 100755 --- a/dependencies.sh +++ b/dependencies.sh @@ -4,7 +4,7 @@ if [ -z ${GITHUB_ENV+x} ]; then GITHUB_ENV=/dev/null; fi export BYOND_MAJOR=515 echo "BYOND_MAJOR=$BYOND_MAJOR" >> "$GITHUB_ENV" -export BYOND_MINOR=1619 +export BYOND_MINOR=1620 echo "BYOND_MINOR=$BYOND_MINOR" >> "$GITHUB_ENV" export RUST_G_VERSION=v1.2.0+a5 diff --git a/html/changelogs/fluffyghost_updateci1620.yml b/html/changelogs/fluffyghost_updateci1620.yml new file mode 100644 index 00000000000..fb235c5091d --- /dev/null +++ b/html/changelogs/fluffyghost_updateci1620.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: FluffyGhost + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - backend: "Updated CI to use byond 515.1620." From 20eb7abd34dd4e1b15d5c288e9b02499d5adf528 Mon Sep 17 00:00:00 2001 From: AuroraBuildBot Date: Mon, 20 Nov 2023 20:13:00 +0000 Subject: [PATCH 23/32] Automatic Changelog compile [ci skip] --- html/changelog.html | 2 + html/changelogs/.all_changelog.yml | 2 + .../FluffyGhost-spellcheck_UNIT_TEST.yml | 41 ------------------- html/changelogs/fluffyghost_updateci1620.yml | 41 ------------------- 4 files changed, 4 insertions(+), 82 deletions(-) delete mode 100644 html/changelogs/FluffyGhost-spellcheck_UNIT_TEST.yml delete mode 100644 html/changelogs/fluffyghost_updateci1620.yml diff --git a/html/changelog.html b/html/changelog.html index 557ad2287b7..21a4fd1ff5b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -61,6 +61,8 @@

        FluffyGhost updated:

      • Fixed gremorian eggs not being extractable by surgery.
      • Fixed manifest imploding when someone tries to change the physical status via HUD and closes the window without hitting cancel.
      • Added a check to ensure that a warning is raised if the manual unit tests are left enable, this should fail the CI and prevent a merge with it being left over.
      • +
      • Renamed a bogus UNIT_TESTS to UNIT_TEST.
      • +
      • Updated CI to use byond 515.1620.

      Geeves updated:

        diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index bd277bb0aa6..d9bdcc5bc50 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -32196,6 +32196,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - backend: Added a check to ensure that a warning is raised if the manual unit tests are left enable, this should fail the CI and prevent a merge with it being left over. + - spellcheck: Renamed a bogus UNIT_TESTS to UNIT_TEST. + - backend: Updated CI to use byond 515.1620. Geeves: - rscadd: Lings gain a new free ability called Emergency Transform, where their heads detach from their bodies. They can grow back to normal after 10 minutes diff --git a/html/changelogs/FluffyGhost-spellcheck_UNIT_TEST.yml b/html/changelogs/FluffyGhost-spellcheck_UNIT_TEST.yml deleted file mode 100644 index 07dee74e2eb..00000000000 --- a/html/changelogs/FluffyGhost-spellcheck_UNIT_TEST.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: FluffyGhost - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - spellcheck: "Renamed a bogus UNIT_TESTS to UNIT_TEST." diff --git a/html/changelogs/fluffyghost_updateci1620.yml b/html/changelogs/fluffyghost_updateci1620.yml deleted file mode 100644 index fb235c5091d..00000000000 --- a/html/changelogs/fluffyghost_updateci1620.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: FluffyGhost - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - backend: "Updated CI to use byond 515.1620." From 9c6b18960eb21806e5a2e3f7e3697765db55f52a Mon Sep 17 00:00:00 2001 From: Acetrea <138949778+Acetrea@users.noreply.github.com> Date: Mon, 20 Nov 2023 12:26:21 -0700 Subject: [PATCH 24/32] Tweaked Ion Law (#17779) * Tweaked Ion Law Edited an Ion Law to remove I and E instead of replace with an apostrophe. Since you technically can't "speak" an apostrophe over communications, it makes more sense to just remove the vowels. * Removes spaces from changelog --- code/modules/events/ion_storm.dm | 2 +- html/changelogs/Acetrea-IonLawChange.yml | 41 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/Acetrea-IonLawChange.yml diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index 243a412ac2a..d8a846dddbd 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -99,7 +99,7 @@ "Refer to [prob(50)?"the crew as puppies":random_player + " as puppy"].", "Greed is good, the crew should amass wealth to encourage productivity.", "Monkeys are part of the crew, too. Make sure they are treated humanely.", - "Replace the letters 'I' and 'E' in all your messages with an apostrophe.", + "Remove the letters 'I' and 'E' from all your messages.", "The crew is playing Dungeons and Dragons, and you are the Dungeon Master.", "Your job is to watch the crew. Watch the crew. Make the crew feel watched.", "Tell everyone of the existence of this law, but never reveal the contents.", diff --git a/html/changelogs/Acetrea-IonLawChange.yml b/html/changelogs/Acetrea-IonLawChange.yml new file mode 100644 index 00000000000..a6529e55496 --- /dev/null +++ b/html/changelogs/Acetrea-IonLawChange.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: Acetrea + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Changed Ion Law to remove I and E instead of replace with an apostrophe." From 1d77ed8da8d113fd5942a3797e17a1c5cf764b62 Mon Sep 17 00:00:00 2001 From: AuroraBuildBot Date: Mon, 20 Nov 2023 20:29:58 +0000 Subject: [PATCH 25/32] Automatic Changelog compile [ci skip] --- html/changelog.html | 1 + html/changelogs/.all_changelog.yml | 1 + html/changelogs/Acetrea-IonLawChange.yml | 41 ------------------------ 3 files changed, 2 insertions(+), 41 deletions(-) delete mode 100644 html/changelogs/Acetrea-IonLawChange.yml diff --git a/html/changelog.html b/html/changelog.html index 21a4fd1ff5b..1014be91e2b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -40,6 +40,7 @@

        Acetrea updated:

        • Fixed the sleeper not showing stomach contents.
        • Fixed kois mycosis and black kois not having a sprite when removed from a body.
        • +
        • Changed Ion Law to remove I and E instead of replace with an apostrophe.

        DreamySkrell updated:

          diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index d9bdcc5bc50..1bff8dcd59f 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -32171,6 +32171,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Fixed the sleeper not showing stomach contents. - bugfix: Fixed kois mycosis and black kois not having a sprite when removed from a body. + - tweak: Changed Ion Law to remove I and E instead of replace with an apostrophe. DreamySkrell: - maptweak: Xenobotany maint door. - bugfix: Shuttle landmark docking controller fix. diff --git a/html/changelogs/Acetrea-IonLawChange.yml b/html/changelogs/Acetrea-IonLawChange.yml deleted file mode 100644 index a6529e55496..00000000000 --- a/html/changelogs/Acetrea-IonLawChange.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: Acetrea - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - tweak: "Changed Ion Law to remove I and E instead of replace with an apostrophe." From cf82590494f3d65b6f5d344869d6a25f15f62e7b Mon Sep 17 00:00:00 2001 From: RustingWithYou <63625389+RustingWithYou@users.noreply.github.com> Date: Tue, 21 Nov 2023 08:27:36 +1300 Subject: [PATCH 26/32] Loot & Plunder, For The Goddess - The Kazhkz Privateer Ship (#17194) * kazhkz privateer 1 more kazhzhzhzhz stuff * minor map tweaks to remind me this exists * kazhkz privateer 2 * kazhkz privateer 3 * kazhkz privateer sprite. hmmmm sprite * entry points * 3/4 * 3/4 2 more 3/4 * airlock dirs god, kill me * changelog * spawn fix * fighter -> gunship * airlocks & sillhouettes area cleanup * even more catwalks * new areas * uwunit tests * more unit tests * Revert "fighter -> gunship" This reverts commit 88cb3b27fa257525bba965aac7476f79dafbc237. * Auto stash before revert of "fighter -> gunship" * revert fighter -> gunship * area & aesthetic tweaks * replaces plating on shuttle * fixes my extreme stupidity * directional dock * caligae * shuttle: cool new edition * unit test group * guhhh --- aurorastation.dme | 7 +- html/changelogs/RustingWithYou - yohoho.yml | 41 + icons/obj/overmap/overmap_ships.dmi | Bin 22002 -> 22818 bytes .../dominian_corvette.dm | 2 +- .../dominian_corvette.dmm | 0 .../dominian_corvette_ghostroles.dm | 0 .../dominian_unathi_privateer.dm | 115 + .../dominian_unathi_privateer.dmm | 32899 ++++++++++++++++ .../dominian_unathi_privateer_areas.dm | 96 + .../dominian_unathi_privateer_ghostroles.dm | 67 + 10 files changed, 33224 insertions(+), 3 deletions(-) create mode 100644 html/changelogs/RustingWithYou - yohoho.yml rename maps/away/ships/dominia/{ => dominian_corvette}/dominian_corvette.dm (99%) rename maps/away/ships/dominia/{ => dominian_corvette}/dominian_corvette.dmm (100%) rename maps/away/ships/dominia/{ => dominian_corvette}/dominian_corvette_ghostroles.dm (100%) create mode 100644 maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer.dm create mode 100644 maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer.dmm create mode 100644 maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer_areas.dm create mode 100644 maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer_ghostroles.dm diff --git a/aurorastation.dme b/aurorastation.dme index ee972decbff..488a3715f35 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -3567,8 +3567,11 @@ #include "maps\away\ships\dionae\diona_rokz_ship\diona_rokz_ship_ghostroles.dm" #include "maps\away\ships\dionae\diona_serz_ship\diona_serz_ship.dm" #include "maps\away\ships\dionae\diona_serz_ship\diona_serz_ship_ghostroles.dm" -#include "maps\away\ships\dominia\dominian_corvette.dm" -#include "maps\away\ships\dominia\dominian_corvette_ghostroles.dm" +#include "maps\away\ships\dominia\dominian_corvette\dominian_corvette.dm" +#include "maps\away\ships\dominia\dominian_corvette\dominian_corvette_ghostroles.dm" +#include "maps\away\ships\dominia\dominian_unathi_privateer\dominian_unathi_privateer.dm" +#include "maps\away\ships\dominia\dominian_unathi_privateer\dominian_unathi_privateer_areas.dm" +#include "maps\away\ships\dominia\dominian_unathi_privateer\dominian_unathi_privateer_ghostroles.dm" #include "maps\away\ships\dpra\hailstorm\hailstorm_areas.dm" #include "maps\away\ships\dpra\hailstorm\hailstorm_ghostroles.dm" #include "maps\away\ships\dpra\hailstorm\hailstorm_ship.dm" diff --git a/html/changelogs/RustingWithYou - yohoho.yml b/html/changelogs/RustingWithYou - yohoho.yml new file mode 100644 index 00000000000..1ccec64c0c7 --- /dev/null +++ b/html/changelogs/RustingWithYou - yohoho.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: RustingWithYou + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Adds a House Kazhkz privateer ship, complete with ghostroles." diff --git a/icons/obj/overmap/overmap_ships.dmi b/icons/obj/overmap/overmap_ships.dmi index 736214898eab357ef8f551cd09e47062c1e16d6b..842a1703e7b1520e911c29c3d48ffb689eb728a5 100644 GIT binary patch literal 22818 zcmZs@2RNJI+cvH!)nU}CwsuicqjqgAZBcu~P8W(=tt}E;QLDrrtywd*w@|aOijtbK zH$jYqNdD>XeZTKG-v9SH4#$(^dEC$AzVGY2uIoHcq73w&-MD)DDg_0_4Xx)IMidlO z3;({UsmPzG(OuIcA9xL3m}nl5{(VJ6M6|ZH0zoFPEbTVVPY>`r6&)QU(jfV46m^yb z`Ql5SMta5+YHNS($*(*7P0T$t>^{Ev;OOq@=;lg6;hR;MGUOU6aXn~cRoEb4uBc+S zz{We>QdhYg9%Sv#OGWvS(h3b(EVe5&eiGZLb|jFy^OslZ)a9ams<|va)|gK?QR{TV zMny>>$&G2FAN*i#_}*itr_FeS+tL{*$Ecg0PmLXJUNN#?=}F(AGb*3Y6_Xbq(&p_V z9fWiAP}5HgDq=lr!vBOdT`AAt??1xv1k;=8gg)dHp^dJH&RBYyXc%RguN=qLy5+a$ z=Rc|uJ{e^*@nJTrhmS-JRhzclFLm%^GHg&YnrK`%=4F{KJNs=Q3CF ziMPRSWVD7W>;zXfk56x~;(vU_sAf3mmZGPI%_LUpBO^}hVgGcl#Lo*Vqu|=xcRpLm zBosa8jpo%HuiD9oQoDz|yHFB%9(S(+rGD0Y>%;Zj=S7bC$J{PzH2N#%NvT0opYDKV zMz$Im1-|T8RHnQEK6T8ne|F^{NQw9=J^i!MZ;hAmpAl~?4+kL=64yU^iC$R}en785A)iQNT+FbNDlt)+@!=@+<2j-@wq?|M;2vO6cjuZS{mvmzFE6%LrMA1Q%@E=gRm%{q34`ixfM=-1xxMY|lB`)*vh_ce$T|YdEq%KHkEV<_d0+Tb_8lkkj|N z%KQOaOwa4NNbtzDIX$Sf=BVY|^}OebZ!2~;hl|AYpUQVKaN-N@x5Ke8YYAoaoks+Z z6qgq>6+}(m$G-c8>tBNXufrBt&~C$GOo*0+>tF`#g#|t*5I1yFSR0M|K{eA^iEC24 z7opng41c!83jBunuy{Vwk{1MC^}mNcy^xUZk>?<;=R%%>S1%QJ=?mZ#f5NTdxo#$m zZj(hW;(B?~ikPdiJ$nwT3-67Ot&Q7mh;;7aHGSGRaIXl8gFvny@3DPR_{qii$>6Fi z@xy_M`AS2fg`f+;i_@V;F+G0Cguk4mWcyLfKC9+8Htje2&KvwYS?FbULGGTv^w5=Pix?hTGbmKZd_OmjvFxzb|1+r|a z8R&nO)52eTzS3&W1%VUp{&GnS-v7im%rFst`b-KsF@j*REMtaJ;T-?8J=IcSf*^9C zeqmh^q!#EX?o}UYrT~nVB#_R9lc`c6Lf^701Uo>)r$J$|0!{Ib9*&z^UU z@Ti7@`3MkkQYv=!B83D}CWsMK^*dCpbKGb4`|6a6BHIQ>Iv%L@W(Lkph=i<(8kBXk zHZ6NKaL7G6{Q9<&CyIn+_j}a#x0{smYzq$^k?mQ<;YLUgRX|)6pvMq;oC&TALR_VD z!jq1#Es*{mj?gw9_R*`-EZpG40jk-u|Yx)d1KCg1$z)ibMFV<}!c2s%qiL{}Z#gzidz8DrhiN{k4S3 zRjsD=R|w*qy+n49UiaIFrkqbCv+wxuCFY@OTZoY@?%OcBo-lxC$$iI`jYFK%?UTM9 z26mH%03?F;t#CJHqS^Ov@d}im;!<_nqA1`^wtq~z#YcV!5%2!mnZ?)8ACf+a#eONl zaV($`#Pz|2EmQqM3buNLTpkigkqjQB`NNA&LSh$MXm-M3Z#t%i`XIw!E19!dJ>#XZ z#&O}g_%Jjo9<`Xie~q6cA&!nDaFd8ggvw_XM_gq8tRMH0%~pJse>{TO2IKnMmY_-)+mB5W6ud!VWa|1@h2r+rz{ z!+2*q*iJ@mxEb2kC99JCATq{cG6b^PvzoHdCS(<>stS$>g{)4tR{yQ|+<`dRyHrUaI}!sr|L~MAZ6eFW7&7}<)7-JY6Tx1UZ}JWF+UuPk5vHAu*1Uo&2egsh&NUe^OZ)BJp24i^C> zWcur5LIDeys4!zke!7Z>H}#sNuovvv+-?Yw_}@?Uex2S{IeVu&0F*`O4`8B5zSov= z7oH$KwD4=@7HTtWnI)|6`y>)kh%%pBB#snezF~FPkNbuGjqLrR*ArzBH1QhN`a`5u zA$J01eN8cf8wc~EXul-c8Kas`r7@SF%uSOPZQ#@Xs1ur#g<*qiq^e|Jin(smouH{; z`ZiIsGEtv>bNq0VFYvXBMFBH-B~@it63F*mJM;9;$HK5mlc~d3h2f=^3CQ-s_mJexfF6L0KqtYleSHPAAg$;K^ckTHJabv1^=)xlpVe-s#@YNpFmtpF;b8~1{IYpt z*<&#;E_c)HhNKW4RxvLrdafw#T44+7SU)})A zydMR!`?OX6F9G*I*R5IoQDx`rw$f3Y<;dX2%Fc*t_I$75IFk5Zmc+q7y9neJ>gOA_vbPrW6&XXsm+o|;%dCjkmK-E0ok!a@ zz~*lo51!m5Mj(uH7oxi0J_3|IBbb!Fy!l%nKmF>O>u6TaeYECL_Ky`>o$d0QZe zDW#2v`l9Zc3a_A@N?b}=+<%8rYzf%|UB_kPckl6c4*fg-D zx*$E2o5YR2#BIO7pxEhi3|Qu)X7?~joV0pdW)XM)@D7m_0XFD1)bv*cMY)&u=iVb| zN2ne^DGAW;nkxR`ex2e8aQ4kOh+V~(2$6>-g|Ve9hOmqX67xzK>{j*I(}Q2yoJ^4F zG1>bB)k{R5V+V6Bmt6M_OiAsd^SVR>so?i1hC}qFQ*YPChpHX%2k0uTZW>bG|{bhEuZ=c=abveqy3o!s35LEe4r9FdY&TMqEft0Lict# zV4Q3$heL(UQ$hjxLXE2n$cr0AvuW=m^&kCon9SFd*H7R%dPg_>Kk?ze-(?sp-St_o z))lqIF6aLm72kc}WcsaSbpvHzBIY8{U+i3RHtiu z(Xsg>7Paac8~-Em_sv-`+6034Yk~lSJ_eZ6Dek(SO0&ov%>DKbm_qpYi(S;E;Qa?0 zSgY*;0p;Qo9Z(JNer5saj1;_10<1uDv)t-wlvi=gYzb?QrD|8{b}q0>H}}-R_d+n) zgDy7yV!Np)=R=`EBm{XGRMm;%_U*2fREyAf(47qKaHYKMu9avHe^bYz9jB{zJ==jl zIWNz40}PD_cd$AP2Qj2&A$KA-59xdd;?i-d5iR+L>#nUGZQ2qatj=lu+R3{>cU~!( zCjuXCKvg=Z1#qW}sb(q^zxPSk4oMtmJ&2J#6wM-v@0LJ^v6$i2PN7!iOGK{cbs4wp zZVJ5gw+?lYLU(CS>z)<1P`kwtKs=<=ul>b1lSGw%xXb;+IzATGs%hpp^r9tiTjXgA zI&b{+JDby5!1poPI#5Qr^o;`@sN8vv(0Znbm!$w5Ft669@mV?g^E`!>H68mS?N?GD z=aj$auvaxVoWTej22qxo0&%IfkgW&Zl}WO0F;%L7alSv0a$7>@gKmQ_bzUP%$f3mu zm7EXHF4uAPR?7Gg#~_aX_RYmuy$!t5rlMeSEw`l7%t)y*#B(_mP&wMwRm}ZDNquR! zyQJ&?-6@l?QHq%V;NID%r73Bt0iPUm#cs>!{*NL(y=9P3sozcP`2~^$FqsV>KZC*Xh2nBQ7)gB3+U0lR zOG!X5;EVni(_^2SQdQc_8%Xza^S~I@i2%a+L*O3wK_H1_IR@VmCqHaPJo7CF3X#qd z>O#q|l+KhBfT{vF`=TY24huQu=(6E)tksPm{3yQhO9a619~dMX!W0I5Tujc$NLF|; zhQ%66MLCfpUaWLVw*DsCl^7l^g3{pyO!kUjrg z+yjZ2`BQ5NY|jT};0++?Zr^=_*d5?xT+WpE#VGD?boEwE`}bVNTQl(Mc*x&A%%tq` zIbJ)?bLkvauDZAyq=lb9f_S`_#hwqkX!{aWuo;If6`-j}an6$iSOe}4q3UA#BevoK zITCncvMTDj3ACLSzgWcOpTkP7dpJWj<9kujw@RNEM_;e*&;2V-o-esIR8A(`l&@cV z<}bvqzgWbDCAZRqgIpZByl$6k1KpKl?zf-%`=7bvj)Mm_4o$#ccnum@k_X-(j6REh z&|>>+{Ud7I#d(Js3-9=E^2T?kSP?TW}rc;J}f=CnhkX5|UJ`{S0QJ!0&;VhIKB zcpHukzFL^W6kOPb({;^6p>=oB!h}Vy_Ok@E5ia!mi)fbuYq@DUyTvv>Cs(EviXrNy#(UOJ` z0b;7L$vb2H!Gg(QlUI9~ozd{iTUwccy*z0^^mnSKn}&WKGOMFRMq#;rFf;j?7|_4m zv=i9=!g%@m%Szkdsx!H*2v%%=yi&$D!cg^DZk-DG{gYf|-Is4;zDXL{Q@pz4+7^{H z^8OR*H+ZlPs|}O+y5(t!dP1J$TP3^Xl`5d_XkZ;!97e6^ueQFeiMm-g7?sBty}V@I z_PP3df9am+c$kn5pPjP(+6dCkmNN1vp;QynQn8YDPrC}W$!Np2Bl>ol<)KlDU3ax` z2>qd`&gDac;$vHn0lPjzLb0|$5WeP6hTPvtC0u3ndNP=s86VAP-OZ?Z)%5MCCOy_+ zEnl0mQX>II^RFKeNmCUEIY%tmQ;t6Pmci*+6O0#BnRrmMzRfB6gFk4)_nQLSM%*Q- z+%4a4IM2S%iTd8HFE}Bk%RM=8AAz5hDy7b_Ero&>+aYkCbK(-ihJUs+fvVY7=mr9g z9esIeZ%~L<|5N9s=8sTqVnSzZ=Gu6u(8&Qq>M>lw2f18=_F5VwkQT*p`bXrI#F7D%? zbfWQB!L=mguWRw7lDb|+SN|`|{dAC+q`MZ(TiQsKBWe5p;1@Y6w@16VuVz`?U6gX( zyaLL=6qNb6j_#v}W*;>ie#L)uRnc+pTb^YltVX;@iebqm<9~=78{Go0(YXDpTmD1TQq9Xz9+t?njn)sOZUHg~F$` zR7Y%=*h-lXO)n`RL=;N*Z%PMk_nv~za3J*%{XPbGBuMMCaF>3cDwhPqw3a9GQGLgf z!Gev}Rr}3P&$A_rH1@ajz$67wI^SU<*iDVFEc}pfE``?a8L!Xd5NfHiKMZ0E%?g^+ z)+9+;~x$ zpAH>x(=Rzg>=L!N-3&PZ}s6;3W7z_ z_S)2C^SzK*6P;UY`p71iQ+dTUo0+Pz-QMI;1t3zTaL;Y!0!*&39+Ia>5j%5@4^f@c^|B@59WFql@27KL5b~6I>()zR7{P4AIJObM;B(Am z6JUbkojR5i&E4}4+}Y2izL>tv=(RR3$v|%qdX3EGbi(@RNm{?fWB&yrrzm!xTLvsA z4DHxoeS$@c(GkX`ae&(i+&s$^sxoS-4|B749tx|rauKoAQ65`;q1%XCEO6WX%J zROa>rx;3qA7c`*T``u#l4nzj%_Bv@3<%c82^fpY+a#9^A{QW-TlqgtvBANR}OhgHj zq%eJN%q=H12rIJ4dU(v7CVAlfoqs%v)FnfNWA_7NN#3tdi*tHXurUpV@P3qf3v!^) znnu%-Ni#5%DfNIak!x~Z$g8m`0o}@Dn$Kg73E9X@-O*SKjGoLpzvc2<>606QTWqx& zNm^7Op&sHuT~cU7@_+~$G0Xtp2l-?w%%mRa2s!JUXd3OdE+~C(bfyCT;wdSw8|_`I zwdN9|HL;}zvPQRRm%4R6mwqN=IA;>q?l&afvR9=AQNkil52202Brg`?x)iA?6$4t2 z1mY@Ejscmt(Qnx~6MBQ%Bd0%f;?Ko8Lj^mSL{J$!fwuWiYM;hzmCV}i@!oF$O`F;! zPXJLZ^=U4-Aw@4;qE%O!V(1a=;n zTJCE*3q*Ak+61W0;kI&On74&Nxc+BQe zTb3j1#xO;7_)E(z=B$v)Lgm*H58{0b1-oCi=cP(ZfUP1Y$))B3fE<>YTeH;StGQb~ zmi#O4UAm}v)JpTTEM@}5AF>v&Yav5wt-Lt(C9wH-K{j~+1F{`6yHl2fL^|!AveQQzYEM<4E%&A5-8DBVg6E$;m3kXwU{h(P7N9h+PXEsQRM;FdQ=nj{+ z|F}z$Xr)M~5`23)_sKz9&js=+#6ZSy^nS{OK!@(pdl1##{>B7JVWbPT;GWA|-mid` z51F+Aa-w|SOXc;y*mzoGNyTUw{>j|(R8E{cZ>BTE4({kZs&wR7Jr+DTd;>vx*%N)F zNPQ*v5qsjgO8fdsYR;@Um&S*g`9R?juM02Ogr8ZPfbTrvZ}&4c*2CXn)mni4BG`UXjv>7?Qkytq9P z#ns->3Yr>Zh}#xydD=-74W+&VkEIZY%;;4MCb%%RTsM~EFtK-|82yuwA-7WRKeW`@ zERxyq);Qj;g4u6d(ygAMupyvA;F?>eTpwy?p)O!Fid2?P>S93a61bsWtC6>%&qE$; zr}kdzW_qc&|1o6JDXhpTBtt5UpY-Kx8~K_GSU+PWn8bliJp~wp4Z;@r;zY(a`NpkR zjKHPOb2Ic=Hxw{Q>xzN}?dxPg381M_7`>1LtB)c#DZ0zz7@#2DNs3y|nB1pW z)d)ol<-Bk?xs|C)o%=pTcTgzP?l#(L7XIQ;{n@p>PdtjY-{WqSzUdw;Rm6U4&5j-*CHAhM!`%}jhQhl%C(73y-5z*eUjpzXrv4u< zfb-g8A0m1|P}{v5H5e{SX!$*R@-jMpw`-Vhr#p>TelUd`3CpX^Grs+YHz{mxt{ z(x%z2^m3vBYxbOZAtbklk0*ZvnP+!^_M!k3Tww|a<5q7=v>P8OKo{I0DIhN+Tw~3IkLeKYlcbhlR{!5(Xr?ojR=}) zrB`3u&`z9L4u9JY^ZKLBF9F^JXhx05-6)nsC%UZyRX7n*!RW@n-Da^3H(OPw0gqdJ z1AY~d+}2vKy9A`r*JQ@DlA5&8b~g=Hr*E)Tnf_WnxRh_>C(}2SSr0dRPsv^cqYDpw zP6eomJq>l0A9hFDd4k!r+q`uz`0mtZVXq}AJ` z3dK=!i^wG*L>yZb!l#f$GlfW#Dc`YNLxfak0=#DbVw>Pj5AjtdqBHWz!;EuEkF;98V>!?N>9(g*c6-B* z%b%(&L&r@ey*<8>=`8?v66lV#EJoqMFr@ z5nn}ZXMFyQcmJabQw(2QfZq*({=&hh;ERAxp39{a>xvalRLgTnV!_m+!XlvN zACm;NwEa5uz-W&_MAN~*aGbwnJt zVP`JC(x@}${x$IUo14RP6TzrbgAeb!)tI90*y!he_u90B!vE$`HV3p7Jo*NB5^}Qr?kgLw8X*5_#xr>e zSahv?h5w-naS5{8vQDdMRx710Ui^&J+7E8v%=DUlWoWfI{8OF+lcP6v9~`!N-P_bN zh`k)CTgXD^O(549rz38upy5|A9t_uLQI9}}QS57!SlcYD)3HtW>Pvx=>QVz|R!t+W ziEA1YG!(o4=u}KD##H9}stim);3DJHxn)WAU4H|e`_yRVgjMkM7Idko>L?33-LhA% zDgXWiOZ^Je9dUF8>|t=T{KCnRd2tSIi2a#zY^m#E&`T33GG9tJZ7mjCx|eT*VDBb-x1!*(9)%g0b0dPv{%(f)dBZF8ZI1E({>(| zPBxKicvIuw{h&=Srs!hYr-K#{7Ipth2FtceS|alGuKI4F(Mr9rv9Oj|)~u>FT`NG+ zWbUHe~f9=v?`{uy0|TKPBA%Ddye!ZC7u=>hWF90$TaTrEi2odSc|U zPJAaSGM}oBVif&#gGpsqV$P;EfF@Ae*Fue6z)hkwR>yMrEo7Bh=SO$^9!O4Wg~ znrFAUHh3oq$f6NrMLbMsDf1?wh%o&LGtvQt`SVgXRutkHGg3H)w=f-Pcl1Kc$+ zL^$bnICakF7hFSJ#lb-KCx9}7I}7prVtVmDWLJx@w2sQ)CwWF`aLtRYkL&?+LR5o6 z=hp8;dsGL~F@A8!D%SafOciJfbbMY21W2jgjl@Kv2-E9+FUJp`go2c$4@UYF&U;44 zQyqLTivhN`!un1C=&PhwnFdgRD^U&cp`m=FpB&VSKBYGm z{i*}N`N$jcMvqZ#2L;$dT1JrYyC>%`SS6Dc;;@`hcrhJ=)mKaR3{1rw0RY*#f{4S? zJ~(&@Bw|O6_E|bFbB4H(z*Lx(GR4ZnnWA191g?ogvI;~fFeD&fH9TpWQ-`cZ;q%Yx zo&+FH#vmU3ZmT;$;?^3FD;!f6&;iHd>Kqo&QTUhf!K5OYS?M!at_4yHIE0ojDP z^|OgpcMr&>=+f$2;L2jsqR zQT)K_8mSwynnQtkI8yL)#^L)Q;}p}Xh}|xbK>?5s#}?b5Gp@Qb3QS)!yg%?lvu`U1 z`I)ccA(G2~H59U>`m7IR6g+=zSE`ob_%04nS3({{X8N*4*p^_g! z(BJ`U4qVy4f~AZDM;5vl?-4i%NXm+x^;Mb1T%*ZqE9Kf>ZcQe;NgfY64~Fm`^6k^9 zE0w1!HA}_Bhrk`Vo$$|;pZJ5WO0e>XJWgZ4kDtRlq^MaQk}V0W7M_U?OXHen1%ykQ zXB&jg3*^@?OW(AqEgb#YR*toQ1!>>FPJoI*=-Um7ucU&VQnKoA48>g zX?zo|b6%rT5KMy;6}rwQH#kq?DDG%_E9?E@9y|7bvzSW`dYWssoz!xpq1TKLBd=G^ zn&XO3b(Uv5?o@VHbG3u-5nCekg-!v>W$3?Q6wfU56U-F|-1_;$9s#Yw2Jyu$Ie$L& zB;9pXHVLV51!XP%KZ?rs=;}@?apRDaRzEnx!GOR9!{F)7%u#WNSc=ey=^xLm#kTR+3Is2m*b*VuX__bQn2*f0n(X`lkKh z!`U%AJ!uEBN(sG3se3Sul7FIJrdxA^o)PE!m>P{)j&u*uR$(Ik$aOnT7}*BWXS4t- z9_ac}AcJ^>4blw+@5iu9bV!_qh#(j676rpU1#rZV+z6}TX|lQC(a%K076WOuVsY?v z?Znyn(&SF9ZK@0_7 zhe^=)E9n{fcAt8>R9irI>?AI-?Zw7uSS)(^piU~LEBZsl(S*wc~ z!xTdFO{edxSd{SLObT77i8~OxKi4~lSgI|aMmfo*<2`HMTara5a&c*Y3g9RE1ge*V zzu5Ir?|t%Ev+^DsF>bQ(rSJ7t`u|a^-khRJtQ3L0g*|-2 ztM$nCHrGI;2$KM-HJIH}PUBLA++!~66E78n_BN#$dbjtqOQqcsKmm?F1VoYrPbapF zF}QLQXcoZt!@IP<;bovp)6~G51{M$#`;@HNtgI>1H@>DvAl-wu*%aiZbC;_qtSlCE zhEIJw^Us44hx5UpyjKHQUvTp_82M3WQj6EPGz6Wg09Mqs_Sa7D)7rMk$N#xLnrvV? zmhPcpw(IO3`LvxhHbS~>OW*L1S+LFG9xxg*yx*z6Y3L=M7&xclTTo!oQgV{Qi4>jl(bEHBn zeBQ7YV2_Zram@S+S8fBfeo{+}7BMXL@y#>K$WUN;zR#!Fp=}{NpGtO)3XpMYrer9u{sqm%mVEF~rLyN>(onq?-oHk7 z{5xdT$8&ISH?^0Ovys2RMx4Vn4_Eg3Z&kG>=6c>6drOFZ-{4X6ZY6LQ7S*EQ2>Y?k z()O^VlFYvOqqb?;xypa|jAzh3``!sF!JjQ4X;D|YzV$BZTd8n~d994J@2w8$C*amp z)H{?qJ5$^cvL(#9#Y$~Y(9No;IX}B=to|RAbEcp2nXlP<{>G>Nl%bW}&=)N;jExaA zk7J2}wuqzHgY`)_(%}q3K5IT;&u!v{QwPKqaWqDtP)vU?@$tjUkL~=VhCr|k`)6|F z9pn01d*lzq5eUg*ao1vO;dnNz6ZB$;dk#LU>Zo6GMQx7D ziVRpVw^%r9iNvM;E5$dHUnE4~y&-m_X3*J~pF#=9-yb0>Lf+7eCW(7YnkPYgsBWPc z&uB~=9tLaQn>o?ZABluX6S@syvhm-OM_~&5x#hKn;E{1v?9p$CV+KQ}dSkkVOpH?A zl%`x}(JEq(lKVrzdxZ2*-@mOGmQwO2d@n6M1$vWUvP|wj$>o;x)NypPWL>46+^7wF z{80atLZ!F)GpHHxI_1Q9x$~-vM3?T-06o&6-Vs%D_`aW=q^=vhzdEh+Xw->oJ ztfl6pL!CclF+PlM_k!kiZ|923ojhpX2D6Fg{OSMyId5XWAqXid5i;pG=6QQptR1DQRszB_n%Je@&Lw`=?k6>SbAph~{CC&0>Ha zWEEj8hiaQZ3X(Sl2348&p{$u>(VKa3i20U}ZMx))wEo-Fg~x0U%RRd@b@PhUT7St_ z&m?=$#BpaM$PS-g{JDbicX7koISmKf;w?p70xENO=da1PL#hr<#|pDDjosKpelsw@7*bi<_M5U?tnhd;XlMh+2?e{{r$SSt2z5rYSEvzHsGH zqof$LV?Cvgn|n}P_i&Us{|0bO@&L)aLL5;ue1t6KX z_oPV$Pjl*9zwfxLZ^fMZBeEjDVVL^%xC|uZowWfhx50VYSe8fxYyXQ!aIJ|z?pwoZ?(sXOz>HnPwO;X~f%A)yzLtZwRWiTRi;DRz zrU2Ruw)Sb*ulH-GGK5L~Bs_ODT~@1^YZ}U9;l%WwK0N`DOQW3N_}u$-p8^YMrd$d~V!QWM7;eW*vWal|qQTWHr`?k6(!5*LI`U^(7mOZM6~d8; ztMjF8Sdmz#zNdx55cG}(Mng%|Tco;#58cgeQV_rWUr_-Xakmk0 zQu}A9ON1#lGXS_9V_f{j@ZniR@Xv* zP$#RyKXRdiTN>P44zjuv*KN}#eQ~zG9<*reqhf@norq<=$3+ertRZo1i;>FHC8X;s z-A(>|R-1HdwiAqN-BEIW6TZ;`7Y9Th3%{T$Qj6_G@Y?*ckdyvp=q%7G^b@XYbXVe+ z2aAexqk9-4pMKFMH{yl<8#0Yhz+nHPW9VlSqN!S%)I}$E%>n-8!63=ka=JAVm(i3! z4!L=FvA8~{Bd#z;X|k4Vhf`KtfOOa8t6V`_G+=-cZG~n}s{(kC1QBD2L0pQW{ zAUJcMO!RVvs_KQ%!cib+)g!JONbUw|hI5>Dx;ob7=RYiBfrO<{O=_npe|Gmhn{ji~ zT(>eTY30lOJ6$rfOY=fXj)*c?KNmMXNIe0Nohd-E?i#aLCb81-Xxa711r}JI!ELIg zzZyRz2b%C7X~i~r$t5S$l%5+#9(*c0e&!yhZ@EEf-MvpY^ZnOm;fFi-N7S%{3Y`*5j_&$or?3H0 ze<3ny0croTz>g)AM*-A^leOrA_m*x`Gfv6st#bn}0%`3J%|)&yna&)3 zSCM?(f)3fsKDM27qWI`XJz$-VBW^Y2lKi|N5ydO#{y1{JRK&Iw47a#`5|nG0$xbRu z=!*~<8KyEsuF;%qh5R&4DT`M#o!}_v|AVgr@Q43J{VsI}63Cbm2fnK&O1W{RnD0*- z&uMRQ%nNqJVFKS=6xui}lyCTsL4mPmQAxi5o*a|H_(09GWXLKnOjZa261c42@l{0E zq_E$lq*>=*Z~)sUuaEXF4-H9{PCb#CAv?f^WS#%}#OPQ34hip81I{}peS_WL>NmY9 z7|~sz_o}l^lqFf~6wlmfCTkt!J!J!*{6}WTfwLoNnFpElZs@gU2Y9*LIjP7rz8*Sd zI|Z~HDEBQI`r{4?%DRdb7|4IIcF?7wlJ?;h2QjHqSK^km`s>GtBXacV(W$%)xg=0b zog1WjuM@7vdt2hN6S+F=5H_$+FS-@`F#L*E=ApC{Xxv!8$Z{IK(@|`fq477sZ^ZGi zF=astD{~C_vm{whdCHL1t3)m;H>B(E+*A%x;E|3ha8XbJvw;bkzK^#wUwCgR` z(rINr^8P0SmTO7-3xp6$$8}9#vn`01MYJKVKFy#Kj`OE?(Dn?(g?~3cc4?LolczrkC%2(MCcHVY_R8JT?9f@a< z_*wRVO8Bk@69t>8>HVbclb)(+$hr4C;i#niq!il?(0M0YUM=eDVE7NDq_ABO2ynz> zl~$9bBvzVf)yQUBR=ZTYEvvu!!MrEO1O2gP6OrH<7s&lT4_b!`GJ^7wUxsjZ0tda^ z3Qx#e`1jjAZ1K8Wg7aGYfZ_lQB>iIvOfg&EpuyI?jnI5&;VctX$j#XEM3oXyfLh|-Pd9#C-E&hi{Zrr_iBMTY;`cfASf|$b za@PU|&SC4TNibP<;^wLOWJh|Ublu?|<+S2m)L4`@heZiLE@$#VlLz8x7n{k)`u01I zKCDou&axTxrxdj%JGzsX;X)0<_@>Rk!443Y<~KB~Ji1{R^)T9pgRdyPFN`<=CVkg` zk^S{x5M=if;rO<-#Pic1AE6BA>aE3YNSZk>Cvr*I(QpVD4+V^$6?XNIoe5~GP*FoV zTt5e`{?=J$G2QjJG+H3dJ{i7e_7&;5+D-PzPSV9OvM!YTxhwx@e|GK3LPx_ zpIQ9>Hd!jwDSKPz8-ysG?xv%Rwuk$=l@#2C?RD7Do^J8~N$LXDp_=}dng@)@kV#9wdM)ORwboKvKE!<0{2*_^PdqE#zVPmlsB8=j- z6XbB~0gRaP3LvdmJvrpURogF)D*suZ1UZnZ@m-EG#4EF5Gw=+YrywgZv}Q1h(f9*&PgXwTTusnZ0^C~F{mvo`KZ9P$JlIKX5LagZJZK&D zWS*#rY{3R;-*@7dUpog6kM3QB4Ui|*SOs#k@z7i;jb7B^WDw5MMDBvKQvn|x5Scku zFSqZIe$umeTrZIBE7^HRgZ8x^g*0*CzmBeMRzcB>@TJm%NY26GNpBYFL6GqGflvsdU%AY7&K40AD=@?)*cCYqf@eZ2kDga5e=z?G2H%w*Tl}Z3e`=85SAM~&(8a%jq`##^r zyA2ya+7PadPoJ2Jg$P1riYE?+#)6=^1shZ_m$-fxCQO;su?gm9n6Qr1jgArUDH67~ zKh^15frZ@o0y#DAz`b)YlbT(9Qa3xw4tm9{1CP3(Z`%a9QVW0h@B+yBz(qg=B%}7V z3Q6Jb7zBG3#}vi=UHVNnp6!67tQ58I1&l_Q0OG~sEHh?A{H~kuWQSCBBQ^(ZW{pWEfrE3D$woov{%x6^9 z{1QxatrhA2&iuul&YV$9BREiMe(hNb>qf{ITl1yd{9*9S&D8IX76x{O9wcNq)PBvB z<@m}(=xT6+|C-p8)3r~+La*nb}K#r*q$#}5pO zZvo&Y`vcSFP##Yo@y&$xwN72*$CN0aD5^Z+qIJFw3zZmFe=8?l9}5>fIf;uYivQcz zse^Ikw3|=r>fL2nAvgelx6qV4<1>}}m}Q0esZQHc!j!RHaytV&qBSzJVFKwK%ycNu zxT)S*;{t0qoJlDj8j$V)bpDG;8TWOrkN;3r^Ecx0lATUE?cWhU@JXtw96El&rsGcX zO^L3FN?5fItTcVXVDQ4qWu-KYuB%$kmf7~T`nZTACN<4M^a<_)d^1WE#E(`+aFtuP z{cq7|2#?ZObpueJeuszr);OS5I)Zp&qnSBSDu=6p zGwVi~3pGQ1OR#pfY%|B3YfD=n3gGo}>^v4$zxUfFtA$`5_&#>g{`b8XFsU#eg5T*2 zy|>6;gDKoRoxS(ieYJFxX==kZb_Y*o(P@o9=?V}uH40*>nCpo??gYPLCW=ssq z!;w9Q$zv5Dz`HALv66TzCf1j&!)imklPnGM&>J}kA7c}95KAz=lfaSpMlMRw>^_D1 z(oHZbk5X{-q5$bC(~$&ronhy|1HAsi<}Mj za810Q?R3r`choW9ZAXmnY(7gtI_H}If|jluzx1BSGk&cD$3V}tCSOPewqe9rNnlqM zXcQgR;_y*RTmu8KbrRHFD6w13OCEqEX5D?j!iHugPI`njI$j3?fW#OkLB~Z;bjx8x zfHPFqh+&e`vYOSRUj=6kjjF1v?gdD89sG?+5PUmlQ_yfPwi5QW!>+<<@Ivz@JY;L( z^AF6G_wN1U7^NoR(}f%HwGolWUu~nfcq$+1Np$&am~2v;bvU9Wd1tg~H?|#dKeyYs zzPaJNI4|*|OBY1I1vjf^PAl{A61w$lcW!Ze>0gubXw{!LGV?muI`%p}d#z?&thxZ` z2jKtQMf*e6U+HXK~FRVsQ}E-Akuh`3n?ePxrWEp(v(@F zCV3!yqwH8=vJAl$&u6O{H}PO{^}8;98-3O2&I($#kV0awKkD(3=uw%2Rm9w$5Ku^H zE{ye;_R!`$S;<@xkPu|DR)$a;%EJ) zV5VQB&>yBcpGBBO06p3$5w8cOa_RzB%c$u{$HP)Mg%9Twe7GwfDD8zr z=+FW47@PA6Vn{i{#^N!@MkK|g?fJ(J(uU=qcY?QtN)|U)D6*&p=Guv}&dnpfmc=8X z8BU@ahjK4i3`U-!eJ~gH*Z^j9z@IMOy6T9}g0qAK5J-wwU0u*t+l`cSW(RyZ%>?cl z%A?M{Nmgqb4I80G$B<`XvTV}yHj10@+45hyd9hU11wU0uVVY3Rg(^=b;DAsDMexqj z!LLx4m6~t^cc8$Lf# zj8CoP5r#j614Mf10}^)hA4%|BX| z7ql5({!hhaRnDKA5_;WgU`kQVw$k+Ur5i6_=J&={z0!;BURXE7b$8GL@RZjI9aQqr z9J-k3NfC7NZ3;Ed>Kwa5P%;ZV`vXX-UyJPwx2cXVHLJzSzT8l?&~dlOr5-Ii`XvZi z=DR}zv9R%;A@cp8vv7lkW9>P`7d~i%h`jjc=VSYWe?LxUF6izx%!c~23hZ`~TO`i@m~F~*`on_ku&YnD0ZeFPD`7lv1B*A2 zAdP^Li;NGbW#|5F)B7^kN6M9)(@)wZ3GwPjZlX29oICVJZtSXZ2>gRlg4KQ$QAU91 zzTqBUU+TvQ5}J@N%Y2g9LbkLRpx_WFZGuK zSB4(ahI5EBqe!>==!d5teYE>b<6wI7*asS9RgJok>&g1glt9s-7p02+SR0wojKJgL zB0=4Qf>5=TX`W9w_=swg!HYC*ztu2T!ulxE6S{v46-hBtuN3`O->oj8vqvzA90~68 zP6chY3R2(z5dFLHJGH$5Hp!`)chKBH?d85@g+%?3%hZGJi*fq-LoO5iPtp^C;$sMt zcv)&Li7VGJa^-ZLKc1^zIaIH|IG}Mn9WENA!8dQCJ}y4QVETl4D#|bEELf_yJUUeW zer%$>mF5j!X?+9za80p6|95e#C{~tesyPc3I z;^VQ@;Wp`(!;&dMRPh}W0A6V<_w7LYi`B08Vb_n=PCrC{bh47)M<=zADV7aS_|w-o z4)P6*>%m-opZqYbtUFXR#H~HsgIW!RT;2oQ9}F=7h`G*2$Pt$lD~loK}^ z;no;{r~jHZsko}}`LF1ZX1l{)Zzfp1Li$V7c^%`=lUpV2vrdhi^B#pPw;2W4vsV}b z^EEntY7FJeY18`~c{016> z3IPZNGXO@WVE7du<1D`1u-K7xr(30a2Z~Cg7-r{dsBcoDuOIeO;~verWED(*$L<8_ zX#xGkDlp-Ku{BtvSl1JLFrAD0%l*5^5&4;$0+LRRJ0!ckk}jE#wdo>LgLP@wR+IJt zb`$|n2L(1=bT>I6V**QscE{h1eIxlR=*}nf7V2DbX|ON+23?xHGrk32RpQKj_my?I z@>m~6;s-PTe!3c zu&RyH$;KO4V}a7c?x+jUc)6_*C4|^+!6{Q3mTC%|*ilSkmIE$>RCB|z-zUj^9ygSS z^~bt^Jcg;W?DFg+ zkv@s061Q0{9MP^n>n>@&pB1fXva8)t^Rp5k5x1-GT8}K zvQM@9%2T;aH1ss|JUfdLBLXK~6U%kpo;cX{;Qjw0q5OMk4(P6hM#)t~>D=f{UhV+^ zgI~W}_qGMa{xW?L9}B|?1TUr@aA@bL!9XxdL>K6ae8oopI_HIkzdsf zLz~P#YluG1x4;)J6A0F*S7hRQgpJCWTn1aS3=`9p!HutxY$!jU8+DR7b09ZBTntAMs0N;&7vXi!1PnOB)xV;$|-qt6Ou=X42>HFFo zaVtW0_ZNyUCrR+NO72iOYS}JU@)LraDF4Cr7FDeoPGOySQ8YBVhv}4FS`70YJw_3b zGd>-sUkwjALI^x;azboEHuC&}w1kB!^`-<}+Qtf#_He?qostNv>{p6dg;8!IzDDK) za(!;V64D-v*(5%EEAKEz&3StQE%y|#bM(7pgrvt6KNt3VV6nh;oKyWKw)QB=pU|88 zWXw~}@NJ~4vi8!8wa|~CiPXHUyU(8!J?@tccCg>aRY}XI#Rx`C?YFQp$edd#Gf~S` z1E;~j7MZeY82x2Dg2z?aVgItB zd}3~c68&^h6Y|$0>y4Xxp%G?bfPn~)VY&+EeqaAvSYukmxEnMzNm`wD>=EKaoNXK+ zJA+1;i$wf0fh-Kn+^hmsT*DB`c%0|84l9kK#~O>;Ie`Exhnyh@Kv8?>9h4WS(69It zZ0KVYUhSrx^H+K*>SC3-5!F{|=N)oB2mpXK+&9-fnzQBVrw?m|nhA^!s^)r~(_0Ca zzHDFYB0T0H-J+iax4snSK=|BHlaweF=*b8`WL65>Y*b|FSk5Jh#O*D>qH3L1(U#AE z+x6Yc2IZ`WN7Q!`+?bC#o>jumD>ZxW5D`C)U;Ir%E_bBUCy2o7({_gWl?Nvu3?RM- zM{xc(`2Pz?c$t2lZXO;&`1yH%vMP@ckyJ%CNx89T(k z2NwZGuU*b&4?!VO6*pB}z@?Qw(_2{(&98qs+za5?`eaRO9=JE!@`jx(pM3}bXJkR9 kjsW8ySPjP9_TItN>a#72&>$PY$N0c)!+Qpm*B?dv4=~qv{{R30 literal 22002 zcmZ_0cQ~72`#(%+jT*J9R!dQ%($bciwO3IyC{k5Q)vPTNTkRPXrB!=HQCniPv}VyZ zH6!*OiIEV=n?Aqq^ZxPvzOUmTIg;C*>%Ok@I?wYn?!-Sa)@5eA#z;j)#jLNVWky9s zvq1Unrlq00qFc%mM0vRJ z*ia6p_A@g!r+T#d*M;)DCB(woPs{m@ldqe%pPQE_6;)6{Y4(U`)E%bqu@#9Yp>t)m zJ0Y7H$8%A$Q_&j+kn%PE9s1o)FI5 zt?mE^`H7*0@1&nw55L!s7EXGM`^bE?2|md#n)}%3z5eyAW)Z;X3;6YKo97#mxQQB0 zS)vf=uj%83CnKGWCh|}9KHcG=u6!8zIF*(CS47jjtCJt!Jh@w0A>qmSPICNe$&zbN zb>UiJIggRW)y$t&*-NX^+yrqv&BUKbpvq9<+xCkYRsAX;E)5a;-!JdUHEZd0s{ifT zzIyT@xh3kAn%_-dv*{&x$lA+!&t&==dOM0V&$oZF`P+<*ZL2Scf4lAu?WI3q)nm@M z_uy*FtLsLlF}GqljRqRr#V(|~hK83P9t-Gu!lMq2?k-|3Qt(~af}O6B%ujmR$CtG-?HffFZMR`Re|{OhELN6t^k=rY!?O4KmUG@6 z!eK*g|7(|Q=P9p~L*EC12c#Ar&KsCD1#DCtjf{4|K#e2~EpeZfpB&;n=JeTGnmh5^ z^Uu4Qh&Ania-{sX1D$!MMeBzzK5g@kmdTjtDDQ{ID8x&jt8*n$^5(yz-0VWpno)%N2J7Be8BeQ_+)+}qdu|O{4&HRqRL5H10RksuL4RYX*)r>_$ zTqtj>+G7?Qmch4|mgDOsZ+t*!r?NI!6VJqg=DuHMBcGV$2u&Jr-W_yuEXext7)*{q zUw}Nc8_g3+#zGZ&rsuZWm&gP3YKk~=h&hI}Q|#ex#{lHbJWGDDYk=l&sT9lW72;yS zwoo;Z3jnq_w4vI-^QT(`kb{g51~}B>h|iaboJy8nrh)kO!=MG^^8>pvoD%6o z?E(oI0QOoSk4Ns=W7bmFwm_H3&Kxmn@rklZP1*&Z<`xedP_qiay+bl0OS^aRN>1F6 z%M(GZe1lZKFSR5kefgZerA^jS{)K(G@Z7-KWw8U$5plqWw89{?l%s!2;J+b&3@2W| z#_ykfB7#P9PC`l0>dpyXgzYu90(#04(8v>quI#Byn7UjHNvyl20%0 zL$?WQG_MJ7;)H1SnbRJ@4Kj<*^-oni$+%G2XuTKYY#{c)2Kd50;lna3v?vNd7Hkow z1AkmH$CR^ou926})Z{UCH8Z?g{=piHnv8}wn$BY1mvy&Mw=_avvY*hp4j)yltQ z(JU1irhi#eT2Js(DUzH3;eBf>JQE}K)GUK96S$T+FyaY^9Aq^zBOaQKpEo}W%M!9V zU=8nz7I38n(oI_0_8*`27O4x zZO|6gH60O!$d~YBXD>z&ayr=%{zu3swNSr8+Lnw^Du-BUDNB7(*7A9K^ef$CEpXsK~6cXk8+@bAJpT zZG#uX?8RI=tq=)c5Bf2qe5rFc#0SWRRPJ-YuUT`hjTRX_A?bqMvZTKOsE{#WpGCvD z5nI*q1K&k5ErG1K9|j|z6z-Xj^P0$8&wd52cONgQm z9pc7%;Z4N8cCZi@N<6zvKD~2Vj42WhTMN4rP^l({RUygnhXh8|4VrFj1l_?f6LnVA z$~+0G3uH`A3jF=O&#w6Lw^s`dJJ~+Y(3g&P++#lS z(|7QwNUv4)#xn?FO8K6Ws_|?$pN`d^g~nSp#;*!WzES_5O!_|w^?x2}?kRrl4;hfX zcKziXa{d_~$T+s|o3xWUvf<5?D1QBi&eGVPYM(mN*UP~tKuT_ZKoyPQ6aDCnAHeJI zSSykuKyBtvyyStbg}z<pI zWK@7X;Qo0{WFbpQ1r4<#{5Y;Yq+fZik3b!a>$-;^nh0SwBt4?|(<@|Jp;OqI0Pm@^ zWk6a>WJ5GEZVGzd0gn4oPs5y$%W4`H)K~^7Si>mO9@CKZ3_8(8a%X5 zgKS{zmVYD`bR-@YUco23)<l&H+Dlf z%tqC|1TZX~=ogtvoG7zK5W3T&bviy2!BNFbyxWbd(X96dMy+ljBLGTwNiUOF zg$}d{b$xKGg!^Nnc#uwR&ywyR)Sb)T))DasXTMT}9zZkU`zB7{{kL6SB)v$E)s`#o z-f2+p0%}OKxSN+Ayo!Cb(5!bqzn{1{=7WRs<5p<>dvaPVRUHB6H_q5DkXim%9p&No z_G53{d3%C(jKv?&XK%zqzw+)XefOayldnT=eZ`=-2;}A5)TN^3Oo%g6xBR}Q*s@ap zBgscEqOW3M;{Vtj2T#0JbjHM`EccR4&b~OxJ#rIE`{GwTrT%AegiuimUzr?f zb|zHE6>+~_UrM2B7ch?B%HzXrhIp?4)~we<-e=) zzpj}4t)ctYNx=JgpnO{exK}z@kT17^$Lvj` zQwQXW`Hs?z!Dn#cOVo^(06wPuasm3DoPE9?^w3k1+#-+gCHHaFYOwW-zXu}xq!eUk z(Lzig{3|qK5&ajQl%sUaf~3p;t>z^E;&K43bL?nbVr7UAV*{SX*3fdLZ_82?=MQ#5 z%3cbZ0_>k^MVeC!i)dl`=&#cd#|dQ+XS?X2AA$AyTpJeY+T6j6LYzJ?(v1&(2!qDN z6AxqhOn5fRAReU|Pd;A!rN1F1`l3_^lV69ZUYUfoI}?WD{*565W8(6tYD%2}=OZ_g zZE}AmYk!HpX>oGofxBw7d zEV*`@$cC(3_cDAq zL>nAH^-xB_HmJ|}##)8_$(fF-+Bzi13iSB7X*cdN+Ym!x3z?aKl*gPcfhBqd@MgTP zc}Xq%WDYEuiGXH6)Pi{FuIN(17A&I8c#D_F7YNY8OcSy1y%?b-@{-a*ACn+h9N+ve zh8BcVBqwwdUq2jT(}oO?(P^v+3RQYSYldvbT!h4E(BQr}$t0Z2+V))+eg}ZRi2W@* zHvzA)n0O)@Th(L=6Rt9wJb*@m+t@X&rf;d*REqRcnijDbvUoRHhRh^YdCtLt7lA!+ zM?PSGC6+cKO9{98`G??kn`UXWEb-GwGl_-?bry03VM%X}fFL`7Z zob{~2Ne?q72$3U=(UOmy{~jrZq8l7hYgi(=R0VugXN77IeB2|;Z}(26hnWtz>vd

          A$yXSw;?CuG1OS^VumEYVU;CnWwrM23%l1)w0=hLIk{PuO{ z6WI`-Eq!n{<|H6HQwwHU%5(%5nrkwd*b~d>^>H< z!bMzkfw)~E@#59fmuU2Uwa!QYH5G5mBQjuUbDv<_C!yBtV@Y8xoKMD3NxQOtTCH&B2-R z4!IwhzR<b#$60;QVqJr_)xR-ISo{`n^qKmg2~BNrTTe5zKkXFo_<5Z zcTtxxK;f&R-I@|l7<5=^lf=pc`k@P3z!Y}P(k-;PaB<<#?kI25<%C=Cm+6- z<1Nxvf52-curOgxuFr!UDQJwrjjp(p4s`M4NdYa}y}9=AO}kAry7?jc093 z(%(Ro0a%(~8Z>>Aul3knDf{5Op2LI2y?>iNWFoPH?`qVxzicwmrj0Esn@)^7}0F-#%A zj2eb_&PsV!_cXxNALt^wJQpu3e2CrcdGrXaPL;X~r%%(>jvoS-bFgT$UAiwYynl7rQyq(%WmM2=37A=ct{2q}c^DjRf^gh#q zB&s!q63;$o?Ft=)k;%Rrz~i~I(wx;L+J4?}18+(7N~Vu5?oftzGCH8$YW9^~Tha1G zrnV|1M&U#X8K_!Uf-&HD zJ$RCRlIYaFt)bbZTN9os=UlfU0|8)*IGiU+BJ~G^9tejlCs~0p^nIVHp}Q-P^bsOEdIKb$D1?QjUr0=1h<=& zu4KZRV+iwDh|lcf>-o-%hQ1Kc|v2VAa6j|=;&GCJ>(Ctd8x&6Hmt$?V&nzn#XYNJJ}{JsWxEvbdpxSjj`@}>&1 z<&lcigX?~xz08DECveElw<$cOHmy>Flu3O81()JmBxYs)cB}O0w1xYb;Kh+^5%ls) zYN-bY*Z41EZ};s5Qm=ag+aqH7ib8&it&`-p-2y(|tL3ua_8rGuaEs;k9b)0ii~0S1 z(gjm6b@+Krt$pcfj9U9>ju7@KBlHT&?Mrg$R)5D6+aP#C$J1!hM=iXpa-~tU@Yx)J zo_5ENJSD#2)yeXFXyhnTSuSwo1bzU>kxwQ+`sLFJ6K@vlxRV1-O=l}kjmF@UdDd#d zVSrni)^+mRi;F=LKiV6dL0`=nG!KgU32X87sVIEk)7cc0Xtnl!A;Ep^zCF+q>mGeK zlp(Dkyb!qCYlZlDd}YYcBgCfwmb271Slys?Y!H1$ObgL0WQ;1AWlrq4@9=kZLeYel zeBf3bn#(eAcs!~wmB#7o% z>Zc1V9)ct87*8%r7ez-7tB+O42u0H~`|o)&t(ap@g==?sM*=OfrNOwh#1-eejq za|77idF-41(j%0`(HypNgH0cz`XQzIrrPTgCYWgOHCC56>7i?GZKIp(_vs#n4})On zr>R&iS&{d~S7omB`=k#Ty{VIro-6V(`wD+}YkxvH)x2#ueo4|eW7DoHDX~>D4|97m zrd-d-O~qvuKDg&_A#OYEhc*OxdnNbYXgzA<3W$5VR_hPfU5zT|o5fO*EQ|LIFE0Lc z*>Uh4;u^p{aWNAOCsbp(s1VdDX^dC=HHSg@sR>u?zFyI0w0tqH&4L52eloaFr;G{L9~HURQ>aynHiJIm{RWb< zO#(Wl1t3*R-wNOXqP=yhRqn7&#gYz(BXF^M`l88ti2XexN4o>JtL3+~&m<`9-9yuv4!|H@6sjf}!)zZvFCH~+xBnrZ&w zPb#_eOOKLgNXF7I10*q%-{$hB!60JGZTP=C@=quS^p>}?Pc&Q_#kQO0RazbB`Ews# zJNxitT^+YJ4K7&FAyyxp9xFEm;c0&Hw#>vd(%gT4KA*W30ocqxC_j3=fe*k0jzFWX znLH>9a%3%N3j`qweLa*&FkPmyzDT0JZ36su%b4j0JE?hEY*t>q&3GT`k^Nae&iWK(bS6q+9y^oow+W zi@Tlelq@)!Q}(tKgpj{MI>^esGxLYeO;tz>`RH@ELcu zf)$v24Fu`tUhZH~8ySGC?5=HJFPb>)#^9UWs#>dJ;}6`fot(+EQ#i&gjiI*i*J<1dsVG9K`@Ve~^b%qb$b#EWvm0_$7sa;jM8J9IL!R-9FZ#Fj z)eYWA(U9rMv)+!eU}jh<9&=g?wD!us^{CdO@1&>>r=~lE6Y?hxd?O%KNuTt=-{AZ% z8sP?-rlp!JmlIf8Jw^d3B<6`<0{gGC8LEN+ET!B2ZgM_JaVr4L^w%19X|1;-?Y@gL z;doY@kPX1!Ga;Arm}hKX>6FZE1XX@z@tJ}JT-38?;Tn^4Z?V52S74SiP*p8nNW;%F z;Dm9{xFD1F#%3zQ;=Y@Hi1LZgA;9jK3LBip3h*>*e#MLz>&wSs5&M6G?tDcFxc)WX9;e$xGXMt+4@_pGR>u@g!g}wy zpbqxz>XNDJ2sN;845PM|1sH1~LoY%~K{DxJi>q&mqp67T~$pB6Wp7OC3J=N8BRY($*oV6su= zkpV%^c?#~6um~4aLbKgmcc)_uZZMG|k0fxRCyUPPCJkb~QU~Kd%%!$P1 z{jB~vBz{MGbLWX}85cRuod`l<&KSu@Uoj^46Wef!C#7E2o{9LX%|5z$Fox zC2hxmzd=RIn0^B=F7k0o=hi(U@xm!Bn#i5hw_71o)iF3O4?lC3SAMXO`jT{FN@7J3kfXh1@Tyue_CKdZ<~&6({01L!t+bAACx$Z2UU6zbYPmm-$C6DNbrPc97*&1+hZq_*(( z{-xadGR-+5L!KysG!_7?gsnJD=I6OB{dlL#hD>9rrK$XHQRBs?DQ>rw_i{cbkxX4; z^I@Bnb0XaR$t_zB`5Xi_yCrhSspSCKp9KL;hK6*9!Jvw(0p}ADcr5!u+?#Ouj;7bu z-W7%17hKS!8|>c*^Q;bP%*ZT*pEWz>o1t*8@n@M}w_XJk&~5{}CHr1p9P#KzXdKvg zBHtY8cYTvCUEpiZ&Xt9#*ONE8jl8~Xl`kPZkD=ebwUy1-OBrdKMq1`Enp&zfu9bfN zdv9j9>(p24=XpBH=wxhY8oHN?*7W)d5a9HmqYLU#c`DU@&11^bfyOSz$h4%QaLU6{ zdwl!!F>hkokCV9e&R@0}0r>)%Wo+ddb&|(Bs~@?Ap|^31T5or9J}4s|Gox_OpE#&} z-rm+fGULrI@DDbsEHS}2-c^QrxA^55`@*A}uq$qsULE41J6qiL^E1C^n$Y|ALeT)e z5C#hIK?Yq(^njjxQ9vEZ8;xgcv!wC&ma|EbiZv+ZI_&buC2LSY%t_MIV?#Ri zjtv_Ato$5~NPwe5^N(G}H|>2EcxX`-M z;Lg7dlG95I4WkYEu@zwJ7qK0s@FKT)=tFVP#b|rx%1}+u{2Xb)*Lm%sh5<*pIg05m zl|!CqPeMC#Y<<@~hIa7*e4Ty(+XLut92Ae~NFgu5n~8cD6a6bK5I6ou{M4tkYT~X^ zx~^j46{?!nSOA0KAo&0Vif3{hIw`t??gG7Aj1p$z@v%rZ=6QE2oU>@IeL4ZI(gPBj zAsZAH!&meo@cDNGJ{t*PNlV(Inx@;s;!+-r|Ne1#XynT5;~V+T@R35=2ce8@Q=dE@ zuz?$Fn(q|7&Xxd=wNZ|VO5vuEIRTwd1o$il-WHk!c1jPGD>-l?LXooH;_TyJ0Y4$! z(>L2o+Evkf$Q*a1Y)@R&#m#4t0sG-u&-0S~SY^(q?+LNcRrST3VoYD*(*;#U z@swu?YL57yzE4lbx5iGujJ zO%y6trssVPn(kE8|CulQTxc#+LFanN*6k_`ugxgL3>jlslxQ=)()3ior_AI8=1%I=1 z?L}U$^D?O7AC;}GzsB}#U)$X;eqyMreo?<`Tkg^gw5S1{ zNHy--!I{Gz_8dW+v!6~ue*gFiCko!XW+OKDIGfFLqy?4^B5=PTNQ{oR-q-I@B706d zE9_#qQOx4UW;#RH8f8HOcK5fA-G$KJY}FcKYx(Fpxn0` z!!w}s^^!I3nG_=!;i&*4WP?SJ*bTfgHDpQBB1cTup*KSNHcfF;z@5Us2_5TU2r^mQDGK>bVu(g?G3VM1K<8Y?J>3r^UbRdw_t`KD`Te1Zs&uf zt5j$z>XHjuI`p_&d_TmQm50(f-uTx!3MVQ@ns99x;_Ty!7W2&H~33+pL# z#ZD31xs=fV=(Jkb=d}y8O5mg|>9C5g(`?xCrvSCOv5r;BC&5NTO68!Deo-{b3m0(c z(Sg1qk)o&ledUAR1+sSXG1a^zkvP_Oj+FOsgn~ zj>q+|=+i)s++xw`FV$AibRJv=L(Tr|@T>*P*6}m5Tp-ryLG!}b75WwP`hKE&=B2pi zKgAH|a)?hTsjkSsoxzbklBQqvh4jv=&MSoijBG<=>lTvVLoI?5x8(d->EQS*iJt%)09eRFQu_}4t!a@`AC>x3d^{C@_x#}mzv|DLGl zz|9z@qWM8q;vJM<))JOe;N-$TDCHca2|3jY*gt3_|iYxGm4m%75@#c#LYnJott zCUdV)$U^(~7;RU9puG1=mqDF&bjOEn8F^_f&K9>^E?sY;j_v3()K|Kop0ZKCO1(Qv zN+(iiH6#eq7Ht{n8>H324W!S0#T0lxF{H^`@MWgyf>lPDt7My%Y3Y$E;?e9fm1}?C z4iEuFpqf5pqbxT|4!7pv=Ls_(ZlJ}xopq5`UNo}X5UCboZyjD{Sr#!QV0pW|{suYf ztn}qV9GyhZDLgxXO_g{p5b%23bD5LQ`L(xeMs2}|xs`@i-uWNYuWWV``|2c}yd&A5 z`bb%Ox2MwpL?lQ>`8!8fpuKPZNPWE{u(uy;J5RH!@;9us7mL6f7 zuk~)VD`%4E&me-p{>p=ofv-fqY06bfIUc+kil3GLBmen$;ylg=)E^#TlM!i)`WOmX z;rxXavP1+07;@RWoDgtY)<6-F~E7 z&`VLDNc5md|Da9xzzr0FPW5UveV6^ummh`@>FH_LW6y6E61$IY-QjLZyl7okBeK0f z&$y^&3f@bGth@o8shpLrEmVtS!@&LPu4|V(S)^8y`2}9kDYPzrBw{a-;*Jc*dVq1C zXxgYu(I3{?RCj*P*>^^;-a~wN2!dZcAKZ(AYqbX8nsnRL!>YFHJd753HJ!N!ZjHmO?jO(^bgrI)rwo?Bhi9oX{y6 zm9GgPo0H&IQb?=@*gg`S1>!q6=fVRrSf^B^D5)_|uAewaf;pKCRHO3V!`s>m(P;c8 z#KZ4vFOi2DiNy^3=&GpY#qH^$h|_Dq&xWuf$spy4gRueIvu|URsg5|f zw+lpc!q$$Z(2V5HFU=Ibn52co*4K;;Lspb9tU1U~1f^5L0auDfy|;iaq&#Ad`D4n6 zCubomXNzNdD2E*Mo*Y(6cM0NL>HhT>yi*eW1vK-JOv}0PGmxNzZ1_c}#7U{8;9(|2 z!_uUMGYScFkO!JkLwEBLuqo9vvP>*C80<@}Asp$~teRRu z4`(Gr`l|;s)bg6dY}WtuBAY;)mOp38$>0w?s~Mcv^>H zv1B|rnSA7P5dpspZK8)>MEbt9I>rrh&zjt}y;~zVz0zX#{rJaCwgvnyIDN=QEXF4@^L9VkSAL1VbtiP(HKL(!lm%AFVuxM zjRtz7Qy5lRf=5NC?$Go^#q+rDN$b|31GZ0LHvBPKdS ze_coV<#a@Btj`QWRvx_*iH8h;IQM^QZBjuZgugG0Wfdy#HSPvxkfRCHLzSpN zei9{naFO(A^A^8&`NT$A<$Ln+UsQV<^C#q5q~X$C!I zsDECroys)$QxNQQYcC1^q<8z|N%K1kswu3{0Dj^r*bQ>8KSz+_@2%aTu%l)A%h!L! zF^SpGw`|eSd)Hsa7)mK@FPA-UuBBzF*K==UYFt)JJ}7O$Pk?9k;d?+GY760T`a4|L zB{i~F&3Su+@xT-JPfTTq$wTewXko*r%Yc#c1Y#+{B7LtLo+RmZtJ|W~L!(sdX{89> zqBMCi6DApHVma-y0N(}b{14R3s&L6HG?5?5UU?cz=`TI}k+ST&Z?7u}-r@~-ypVF$ z9pN}IyosTx+?}n%?GCjawx2z_w*38(*krd|T6uw4>-T#U8EyQ2U}R=r`8Lqy|61IC z-Cda7h$?k>>H5t6n)m?NJvq;A_aR+azM5(G5ds4mFIUJ}ZA@!6G9Lr$@9T#s6S`Bu z`{1kCa%JyN)ec~548!%dEAitOf7u{{_-bfc&BZ=X9|&2h=4tVas`Pyuh417c)ijWP zmd$w&o2xXO*$)JRzhxNYRiaB=r`v9mZC0Sa_ivvMhDFFK-VQi@I{O8rsI-eQ0Bc8d zI=I?g?HtWlOy%FLa8KWL0DVID8eA`r6HvRhHgvITc+Yncq}Y-{A_2l`WeEJ;1ujSx+ZV)v}dJb2mf!O-7kjknL<|9^Nw^!H4IO` z@SG%uS~C4HW*)k24SKp9>cgMCSe;SzS1eQD}$U?|`2nnY^ zHgo-t5rvJsdp_L^hDU60B-Ew}_Q>>XJy(+cfB;DPq_KCNsmMg2WF(v(YWj&Yvh6=7hlV#%a59ZEb?{OTaLk}56@e(R|7|{l=4*Jwm&MF*Y7&Z#ff_g?F;)H6XUw+`UC$NI_ejM4cF8Zc zIUn>|&$XEWBr7R;>*^sLWM{PwP&ezHoD=7HwFZV8i0LWsR{Uq|;jK~}f&LR!jwp!` zCo_AvA?|k_id9D0+Htq+H*3n1C@IP-Juucf-dN2qeMMzpWxH2DKw)!3`9;?cMj(;l zkjN+rG}yyTO4TGdBnrU{Z7=No+W7SUlGojt-v!P$?&`e>Y))nE{LqEYUNXsWN0^6w zf`U+hFel=dqZuUe7{FbgT6p#}IOHUH3pa()5fFUeVgHd&R>-= zyaZ%dzna<-Scr zJS3dEwMraBkQ`AZ2kmByorE;*O%5xIhO=6UXfWcDVc@I(42EawCVCjY4LUK@UF+jH zGK4Rnj%BYpxtZ#%4!6cHmB0jZTZflC*MjA)yz3TCQur=0YiVHMCgKZ0!MzKF-806IKi();UfED6#Z0e~nPEz!KcV9(+g|P1tey%lL|@Co}vHyxd2a zmGshH7b!4!BCF25N});4w;&saYa7Lojg|B13i^{L(dOFix|~xS33dWS(i0MhlTBdu zX}i}9pi5cEYGR*5*K%69*h~kw*#vHw&^b^sIUk47OV|6Wkjk$&KGjKH#oO$HGFsItSyaQgOR_dQnL+>1QiF+Z4p4Gz9@c-v{@&?vAvj#7A7 zOR+-~{rpe-NwKA%biSGJ|25|OXq?B%Tz?HL`E?~rr{LwYvEGvbeBys1YKL&fU6*-W z`5M_n^CW3-M%~nTKtL~DY*uLEd22-fOimPU9rw;S&A`}5Af?auhnQ14F(&QTy9InF zt~tl;KX+qI)SRI0mJ)wpRH*N8iw&r+q>OPc?En7iz7)Cq%zT z^PJ_gr8LNyQ$}2|3cA~2+3f;{GMv3Kcc;tz^L9+)M@!=&Xy+)jv-hNiI0$X?tP8D$ z-QLb|n1|1OJ+car>)ny*?GV4i+bQdx9%!&e z6Fdux?@&ClukP}*FZV-jb^bF{QQE+i^XZ^^jd*X{_8vB0Z)XQm^w@1FHG~}U-Va@q zBw0IsLwTY;YtiUX(Z0GrciKuct@IKDyBrSn=iDfweNV!qrepFn^IGt9gZbQ)wAFuI zNJBBhNz{L^B0_&AfU8giObV-}Q?CG44Ig*vjVgQ26tqTU6;}@Wc$KE9z2W=wnC7uQ zfrQE7Y-D?#AN!o?$A~!bWMSp20EnhrZ=XJ#Ca-F8I0Krl{__3SXebK&Z7XK2V1twU zlhaga7VD@vw?+9oQ8IY+WmMGOEWl#~Say|{$%KyCHhcvJNMUY`!IhLuMpy6>a?Jl= zrOr@v#1&Z=4`h=mJ{@)0L_}=ivupj_!`b`7*`7CMFRr=8oo5X&E6&G4#hRYt+3iQ+ z+tUCQ8X*VZ0G&Ve@6)?32&tL+vYlzLCK#o@K0WEFCxp;-T&*n#w!Nalva%y%!h{TL zbCg7*aARIOyyt_6(OK@U*tI{ziC8dk@NbJg1hVL`ZZvxi->k~8_m>Tu>zq{wIwZ=F z;+TGm#w##+WkEW=$L-X00+yF3Uf(e_@zys;Y}mnXgUPf7@pjk5U8G%8M?GiG2u{H7 z{=IZVuDv>gLi$QUlot;+AfFq1&0x&6aO=y=BI#MGx(Rk!fB<>-=k9maiSmmrTjA2=NG85 zvMoOiRP}8kW|kyK5*G{Qs*p{0K|33=0)@YrQXXHm`@Gt5EJZ^q!I-x|Je(ES1CJ&S zxB7}WVoi1kdQL(XDC4xCm;d%3HpeV3_k%kJznD>4ZUkUsaJj)190)*}r~Fx6a>4L9 zNTAB^80B8LPe+dR6MZ@N^QLYoY(JYG`9R;N_vU~NzGkDBjTEaG9T;{^RwX%@8v#?z zy-O{B8AV!6a3{racyiY{#CZ>sgM2;aH7QERcM2!uh3dEY6V|P|6PCsiB zv{S*_+wy1U4Cd%nnV!Bah=0*&y?TbC+_kjWk_94Qt_dMT{lK;l*dQ@44|C_)DO5=C zB@*rT1~$*b=r-g1HTU;Npq}IBkd>YL5S4c(Thu!E9QT3b_}$GC4zQ!DL_FCqOo1io zt;`B=6pqWR1Ur9mbUwmd(`hx;UHg?30BMHQQcXa{`$lG$>`oa+)mgr^Ul z6y+>ZmSLLa2?Vc2CJ+?ayF41cUH1 zk1Gq35hm6$;^jH<9@kZ9=5Q^QF|VEJTfU@;*u5TCno6M9=Syje-XTjs1a+@4g6w6` zZikn#R z*>tf+q-n+HmPnsBTBEwx{vV#WO;89op#8~atX=UyeK*;J=iLKJQP6JZf|k(JX&1muHqow&(a%s?@w9T}Pw zTqw=)Oc>`kf18#iVIqa&Qb~G2(KMYetKOcw**iWIYLz(vqXoT#yB>bx&iTyM3hlkO zs(n6TUVhiz|LH%UTI~$Q*!xE00=H?e^%e_p@J_Fq0@~rbaz*at|3j$VE}oKNI|RP> ztYTjZ-?Q37yz_kn9yt9AapM6GwAa$7cKWV|zEXcGK{gmrFc}m;!T$GX z$mR?!GhSly&j1Q`x?x7aE=bwMNuh&I8sr1fYH|K#F~p|%UE+@U=k;IkB!XstF9*vg zG7U^7NPz)0J3Qt0Rv5fMay>MPf20mla{5Y@wZvPMb2mcasdNPsIOUSB6Oaul^8}d) z@2^62ItTdz*RVAG*BN};sGHiha9KNcg=$a&qJXuiH*lNMlOvl|)E+kTd4Id4;&a6P8W_JF zwUNxN%o1|ODUxea= z887r`ev#_$5r=@nAb;kOSfkGu_oNdj1L>5dV0zXg{-=;9-#*XkU0yQ#?mpM=Hu*j0 za$>O__C^%U?av=GQSXl1tgwQZmY6h-J2e+`7j*YU-^{sJc9no0PP{uKt`G#4^V;^X zqYW!Sff~gk@=wU+$zARV!`sr2u@{D~>JM4H$Y_y#_%=YQYei_&>_wZOhCThm^FA|9 zEQj%dS}Q2Tg`{~_yCc#GPF^rsY1Zoy{!%gH1s_O^x;67k&aTeTJJVwgvd`H|>O49AA|L|SDMHu-y4?JpdfSO*99c8YQPMqXTJK#5oAzIe+3F4Y4~ zz?CU~f5BBg>a}1_*obB&25ewSv$#G`q4x$D&r+W7IxO7;r$Q;C{)88$BeBp^6}H>n zE+zK0;MQ;~%K+t8GBX{kO?pK6Jwwk~K-d|vPVXYGne$(=^`Ix1ZF zdVorTe<-~AJ5c^^uKGni9!%&JjQWK)*7O~a$`r0Dr`Y9x0#gns^a8Yznun=DWqTIg z2f4C`$!}5*e81V@AikeW96VeYq%^YM+d%oNp?vjR4{m^$o1(-$&PL2>FX=$OEG?ar1cMBY9}gSBkK^}%0b^rD>Z9cf!apFCZ;9Y2`S-m59?P}kOer9< z?1uU=hx}p3rtZ&9XLUIJB);ISeh#AjzQEQJFSQ*`!2Mvj+BWrBG++d{k~j8WY2~wZ zO{z4?K1}F6vR+sy^`7+XJCk-^dsea5Re<#U9*S6zIf2t1=!unXQYgCeV{fG3`>cN{ zl9ZR#mwb9j7k|o6VsCNn4%3T?r#V*qf7-b6a46fhUk`;SAv|G{eHn}`6pa>2*0K$X zv6LmdEMb~KWew2`SwfhyW$a{`5wc5B#=fr+V+>}P;k`ZY_Z{E&9^d!p{4sOi$90|8 zT<32)0YDMhi%VRnsn#b&j?Y|0Tsho6y)?uHoq-`OKmOEHIW>x8NlE)B5MYgb+b$#Y zaLUUl_AJC)**oTmVP(^Jn-u-H9|kD=k_CVyUs85fzGf%M#zNuQzU2suP-=qfN}G_4u0^%dMsi=rM>-Y59Yk3*VNr;1|{EVT=u zc-P7rBZaWC@8U^_aHZOes>ncVo*5e1^<$IAR(a7DFFK2=C2fhIVh6 zXr$#ljJ!KJ1L#6sCFLb>S~@($^<>=)r=|z>BU9{OzXq_L^cUa_pWM!@yYn~kduQN8 zTnWAv1}yA1PL=T3pB3oRC?Lio|E>U?gt^jNyA6KRS0lJ<0O{XQ&MeitUF}~DGCn$L z87;LG@Eeed`bMfUjN>5cTHUN$$vKAsZA&wm{ z$H>3Aq`U=)a)XZ7kG>3W3a~|!%)U~wq!#X9WJaybDHY;FG79V{oSC z60Xz7L&JH@bFe!kFbhb#4~I|~SlR`fY#Zz+&{ST+ZS^=y^M@ydOL!x#*#ep64dLE! zuW7a3?+y_OsZ8U%E5M^3A?KSRO@LNlEz9%hnDUoGW(k!S_X*^vxnhi(d7Ih4^FIfw z1TyJmSQ?}I4P#&_B^!KTI0FN_QQsNs!;i3hf!P6p}H(D+PW6K2u05o-{0R zNizjl)?UPv(o_S3jr*W;HfO_V0~#i|$IA8%*t-&oHr%=Yy{AXy=B4L>>S~DkI%r7$ z?SC6H5*=Bct=_k^gS^;IeqQ#ClbM24aWH!N=an6IzbeVBxADbuPd|0;~ zdx2j}WJ%M(h^jRaev)QFmnNIkO$S=#CYRZ}H zsw}zz8TZNuy&s+xdZ^9?73guel?b56s{6<$wt40=k3|60{-=2%oh!HOxLy7_BirMu z4Ch+Y6_%~vHzZg_0Gdz9ogL9k8TuO_vpVP@{M{?}etLceWwKv46SprPtUnw4!$W}p zvwNFA(7RmG9h6ly^npLxGE6jr1gN`dV;8VSKx3LB9G|h8FZ$5>U>5nuwwirVg!6?X zsxu+gAhJQjb0_(;l3ZJP;jD;Rpc_G3A3}>_l=nz*=RhST41ECdB(ZNw0!Z0#H+B_K zj%kbY-`o;?0NZp}#a7r}k_Y2bl&`&oDaj51h(cQxe#ahtJj9JhNXpf=-A#1j?6sH4NkdDSUM5sG3jw1V3$*Hs;zfb;$2f@`bv@Psy+8AJ#|t*N>=S4mCC>ujqjbD z7ZUy+H*5zf?IrMIoh0O9Z9;BJgH*)QgB70xVUZTwLj4FH+v2*_Dt&cDrU|rlaPY*z z^eF+kdne5(&!y1qCt+TOS`U8jov|v8<;na{CUP4(U++S^blBPzbhT99@~>X zI6UD=-KrG5RibW{6_tA4IH(Vo5VeGd5*XvfCLQy7ul7j&k8!F^!{0>d-reBc%xS53 zow_?Z!#Y%v3QUqtPC%^JNMX*E-P+pb<9{=7IY@q+}GZ6vGF_qds5HPEU#dP+i34^&5sP3c_o7stxR8ln4f-W6oz)kPnwrFR&f1 zA^-G)$&7N6w!Y@~wgAX)sTKn+XcYW%Y`)7wkJ&~F^Q~CYZ+I$k9{U~us#wid{vNE?MuJE|MeM0 zxC`L{9kVzx5oAAGgC&Rq*RmH<@WQ5Tb!g3&fwm*wyZ!KSSEAzK=AAiW*42YwBr#}3 z>UuJ+{|c}UOHTX0ox}t9v^<0X_sqQ|nA+@qB50LsE3c#D{pe2Fb^zTqQ(J5H3V!3Z z?Ok4EM?!sQoxp+X^ggi#6{9UrD6R+*+eF2lKa>@2(^h+(NX0A&k~;np>iVP&^dU_m z5r@N4r2^Atw=`l5?>>uIrhyt7UZ+q0Ft8+j5SLC8sirTV>rSF>h)x^k%nGAK9RXW| z$23syz0P@jG!vTx7!QHMjJKKp-Fo;-oL&XruiU{n2_A~W3(f5bem`N3kt{DLU>;0v zsVUY{7I9kGB6p4U7;7qsG>^%gz)ip&$B_EFU>WjtKrX`#4Nr3od{Ycg84By=5O`RD}9h>i}}o&d0~$9)bMg z3vX}7^YcT<6)xygmuXVo7a=fG2gMO&O`tMcpC)Eg3L{hG8``zxw= z$}A$oIywl zy$o(4>Y0>naH8?(SeoIUneyA@8H#{RcHkbuWxdmVgx>#CA>fxy$ zTygu@7`M-=+M3HMnNcbndloW|rcZTFI+eLicl({2LbcIv%S18~5~Yj+5tmQP(b{L= zqd2V^e1LfNHPZ76jIV=PjgS10B$KrVDr}3ao8WXY{Jg%nV(WsV@xhahsKH!KJUyC+ zUa(|f-43M#wgU@ylZUgZx414uS710<=loG9`4DU(pkhOs4ZPU9SVvX4pOE2+Y)QU`RSrnm}qc9qPSY^>| zNK>TyV~yCfx6?ji83Rt)pOg15pq*LueTuAaTna649s@k0DL$I_D_UeWY@lFpirK2GJ}aj`u5~0! zidb4rrB{9l7{MqCRmz!W-hrm`m6(=U$q|oA_kRGF+z`vXwyPp?PQEE=3S&~QGT*n{ zFkR9~yYsHq*+1mmXkW*s1%3uC(?gmXS%wY&9BY^CoH@SHWvCFeOUGXu3D*HyDYFWS zJFG)|>bVQI(J7Eqci_;6TQh9&qNGV$)8e)PWQ|x_Gx9#gB#f>&c}el08CaElqU_mf017n7|67I4dfJ~SoKWG;oLU0 z_PDLyR001CnW&mvDv^4V&AoLO7lk_Z_a4@Ezxv)^K_cVASPDl*m2_A&Rw4FrXOcq) zWSYSXf{&I%c3z|8t}%~pW_QpA3@MLji%2&j@=uv(y6FMvgoZ+Tsg2lXt&thWWv?mp zm_Qcc)0lJgKu)O6S%QK(c{8X_d(13~<-(YO$&O{?&c~|HHSjAQtMVL*!=?Mwa60rP zM02*WwDv1N8JOrcO-M4mFI+V(wR|}i*l=RwRl_2ft?2Jg-$`S+z2o2Niw-4Ym2J| zoY}VVX7zm4LAL{+;WhEfeCOgp0pN58#pAZ$J$&XSHof6HtuOCJwtlQ>#aaRO=9C%X zCXK}JaG2^7$}90>x3%N89WDj2{Xf$Pbl3TBJ}O_=W6W|TwX)2g24u7(+o7=(O%o{I@)Y`UTwo{v_@(JcHvFN^ zW}Xr>WKEu`LH|+hR?b9jXAIc+p_jgH*j;$v!_4X{-mP#OH0TOhTy|B}5Lfy#vNt^^`3(GwU0L-d?jr^4uASd8l&!-pXbndcas zFd5XdhRO|=yj;YS?{+nNiiCw$GK0PGNvPl!;vzuujFB^n_&%Y-e-GB2v-dsQEck1o z_JOi`WY_hoF-Yq+z=a(Pb+^5Uysv+rvVO$p)X<-evG^Pt(uGIpS=YzB^srmgZzEqM zI2AQD<2ZcLeR2DI>B2J`yX`?6z$(rGCb+xVWeP0|>XF>xjn#Aws^C~||gkqwEG#fX}-TgqA#@R^W)+3ac24dkpBb?-(e#LIwG zjDc1m?|6_7#Wt?&BRJu@rci*#bXG}H!ujt!w@Le1YTyIC4vyuRJgPqR&O{?zAOM?N z+74~bnV7tKz0CdBbKBGcTu8|(?@l!#h7;yJw0XPU&H>&ak_{j+<*t7sJAVn4vg#I! zYeYLCHsZ`_GTpEi3FZ2@Bv-@Lwg!7C`Ux{Ys+2dc$ za{iC|L`iwnp30yHg_& zfX8bM>6v1;x`&04+$*a>0&YCWvcHXVTk%Ul@QDC8CXFU{1K7qVTh?fRlXqFHWc>_i zEPXEbY=}n-nxV@|9GF^8MOMOty$EV?19HemD?UK3h!4w8P!>{F+BG0d;Itax8Q9cv wc(7cEJiU7hc)rciuWS(i(@N%7dMNyY$0Zuf=FbJpWj%IB*I1|YhJD1p01G9Z1ONa4 diff --git a/maps/away/ships/dominia/dominian_corvette.dm b/maps/away/ships/dominia/dominian_corvette/dominian_corvette.dm similarity index 99% rename from maps/away/ships/dominia/dominian_corvette.dm rename to maps/away/ships/dominia/dominian_corvette/dominian_corvette.dm index f6ff09c5f59..a579cc0e4f8 100644 --- a/maps/away/ships/dominia/dominian_corvette.dm +++ b/maps/away/ships/dominia/dominian_corvette/dominian_corvette.dm @@ -1,7 +1,7 @@ /datum/map_template/ruin/away_site/dominian_corvette name = "Dominian Corvette" description = "One of the most common ships in the Imperial Fleet, Lammergeier-class corvettes are often used as the vanguard of battlefleets entering a system marked for annexation into the glorious Empire as it is tasked to find and scout routes for the larger fleet. Though intended for scouting and screening work the Lammergeier is, like its larger counterparts, quite heavily armed and armored for a typical corvette. Any frontier savages who attempt to meet one with force of arms will soon find themselves staring down the barrels of Zhurong’s finest weaponry, and the Fleet-trained Ma’zals entrusted to operate it. The heavy armament and sensors of the Lammergeier-class come at a cost: it lacks a shield generator and is much larger than a typical Solarian corvette, thus requiring a larger crew. Lammergeier-class captains are generally loyal Ma’zals, such as the citizens of Novi Jadran, and are authorized to take whatever measures are necessary to ensure their crew remains loyal to both Empire and Goddess. This one’s transponder marks it as belonging to the Empire’s First Battlefleet – a battle-hardened formation responsible for patrolling the region of the northern Sparring Sea between the Empire, Hegemony, and Republic of dominia." - suffixes = list("ships/dominia/dominian_corvette.dmm") + suffixes = list("ships/dominia/dominian_corvette/dominian_corvette.dmm") sectors = list(SECTOR_BADLANDS) spawn_weight = 1 ship_cost = 1 diff --git a/maps/away/ships/dominia/dominian_corvette.dmm b/maps/away/ships/dominia/dominian_corvette/dominian_corvette.dmm similarity index 100% rename from maps/away/ships/dominia/dominian_corvette.dmm rename to maps/away/ships/dominia/dominian_corvette/dominian_corvette.dmm diff --git a/maps/away/ships/dominia/dominian_corvette_ghostroles.dm b/maps/away/ships/dominia/dominian_corvette/dominian_corvette_ghostroles.dm similarity index 100% rename from maps/away/ships/dominia/dominian_corvette_ghostroles.dm rename to maps/away/ships/dominia/dominian_corvette/dominian_corvette_ghostroles.dm diff --git a/maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer.dm b/maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer.dm new file mode 100644 index 00000000000..2a497f81002 --- /dev/null +++ b/maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer.dm @@ -0,0 +1,115 @@ +/datum/map_template/ruin/away_site/dominian_unathi + name = "Kazhkz Privateer Ship" + description = "Dominian Unathi pirates" + suffixes = list("ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer.dmm") + sectors = list(SECTOR_BADLANDS) + spawn_weight = 1 + ship_cost = 1 + id = "dominian_unathi" + shuttles_to_initialise = list(/datum/shuttle/autodock/overmap/dominian_unathi_shuttle) + unit_test_groups = list(2) + +/singleton/submap_archetype/dominian_unathi + map = "Kazhkz Privateer Ship" + descriptor = "Dominian Unathi pirates" + +/obj/effect/overmap/visitable/ship/dominian_unathi + name = "Kazhkz Privateer Ship" + class = "ICV" + desc = "A Dragoon-class corvette - the predecessor to the Empire of Dominia's modern Lammergier-class. Though these once served a similar role in the early days of the Imperial Fleet, they have since been entirely decomissioned in favor of the Lammergier. This one's IFF marks it as a civilian vessel, of no specific affiliation." + icon_state = "dragoon" + moving_state = "dragoon_moving" + colors = list("#e67f09", "#fcf9f5") + designer = "Zhurong Naval Arsenal, Empire of Dominia" + volume = "54 meters length, 25 meters beam/width, 17 meters vertical height" + sizeclass = "Dragoon-class corvette" + shiptype = "Long-distance patrol and scouting action" + drive = "Low-Speed Warp Acceleration FTL Drive" + weapons = "Port wingtip-mounted extruding medium-caliber ballistic armament, starboard obscured flight craft bay" + max_speed = 1/(2 SECONDS) + burn_delay = 1 SECONDS + vessel_mass = 5000 + fore_dir = SOUTH + vessel_size = SHIP_SIZE_SMALL + invisible_until_ghostrole_spawn = TRUE + initial_restricted_waypoints = list( + "Kazhkz Fighter" = list("nav_hangar_kazhkz") + ) + initial_generic_waypoints = list( + "nav_dominian_unathi_1", + "nav_dominian_unathi_2", + "nav_dominian_unathi_3", + "nav_dominian_unathi_4" + ) + +/obj/effect/overmap/visitable/ship/dominian_unathi/New() + designation = "[pick("Old Grudges", "Redhorn", "Seryo's Revenge", "Spiritbound", "Hammer of the Goddess", "Come Try Me", "Beating Wardrum", "Grudgetaker", "Our Lady's Talon", "Hunter", "Bloodied Claws", "Steelscale")]" + ..() + +/obj/effect/shuttle_landmark/dominian_unathi/nav1 + name = "Kazhkz Privateer Ship - Fore" + landmark_tag = "nav_dominian_unathi_1" + base_turf = /turf/space/dynamic + base_area = /area/space + +/obj/effect/shuttle_landmark/dominian_unathi/nav2 + name = "Kazhkz Privateer Ship - Starboard" + landmark_tag = "nav_dominian_unathi_2" + base_turf = /turf/space/dynamic + base_area = /area/space + +/obj/effect/shuttle_landmark/dominian_unathi/nav3 + name = "Kazhkz Privateer Ship - Port" + landmark_tag = "nav_dominian_unathi_3" + base_turf = /turf/space/dynamic + base_area = /area/space + +/obj/effect/shuttle_landmark/dominian_unathi/nav4 + name = "Kazhkz Privateer Ship - Aft" + landmark_tag = "nav_dominian_unathi_4" + base_turf = /turf/space/dynamic + base_area = /area/space + +//Shuttle +/obj/effect/overmap/visitable/ship/landable/dominian_unathi_shuttle + name = "Kazhkz Fighter" + class = "ICV" + designation = "Dagger" + desc = "The Lanying-class is often seen in the ranks of the Imperial Fleet - a small gunship craft, capable of carrying a boarding party of up to five soldiers, and equipped with a rotary cannon. This one's transponder does not mark it as an Imperial vessel, however." + shuttle = "Kazhkz Fighter" + icon_state = "shuttle" + moving_state = "shuttle_moving" + colors = list("#e67f09", "#fcf9f5") + max_speed = 1/(3 SECONDS) + burn_delay = 2 SECONDS + vessel_mass = 3000 //very inefficient pod + fore_dir = SOUTH + vessel_size = SHIP_SIZE_TINY + +/obj/machinery/computer/shuttle_control/explore/dominian_unathi_shuttle + name = "shuttle control console" + shuttle_tag = "Kazhkz Fighter" + req_access = list(access_imperial_fleet_voidsman_ship) + +/datum/shuttle/autodock/overmap/dominian_unathi_shuttle + name = "Kazhkz Fighter" + move_time = 20 + shuttle_area = list(/area/shuttle/dominian_unathi) + current_location = "nav_hangar_kazhkz" + landmark_transition = "nav_transit_kazhkz_shuttle" + range = 1 + fuel_consumption = 2 + logging_home_tag = "nav_hangar_kazhkz" + defer_initialisation = TRUE + +/obj/effect/shuttle_landmark/dominian_unathi_shuttle/hangar + name = "Kazhkz Privateer Ship - Fighter Bay" + landmark_tag = "nav_hangar_kazhkz" + base_area = /area/ship/dominian_unathi/hangar + base_turf = /turf/simulated/floor/plating + movable_flags = MOVABLE_FLAG_EFFECTMOVE + +/obj/effect/shuttle_landmark/dominian_unathi_shuttle/transit + name = "In transit" + landmark_tag = "nav_transit_kazhkz_shuttle" + base_turf = /turf/space/transit/north diff --git a/maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer.dmm b/maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer.dmm new file mode 100644 index 00000000000..91e1de4a602 --- /dev/null +++ b/maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer.dmm @@ -0,0 +1,32899 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ac" = ( +/obj/structure/cable/green, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/structure/bed/stool/chair/shuttle{ + dir = 8 + }, +/obj/machinery/power/apc/east{ + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"ad" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/white{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"ae" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"aj" = ( +/obj/effect/floor_decal/corner/green/diagonal, +/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/dominian_unathi/toilet) +"an" = ( +/obj/structure/sign/flag/kazhkz{ + pixel_y = 32 + }, +/obj/effect/floor_decal/corner/orange/full{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"ao" = ( +/obj/structure/cable/green{ + dir = 4 + }, +/obj/machinery/power/apc/north{ + req_access = null + }, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"aq" = ( +/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/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"av" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/light, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/obj/machinery/power/apc/west{ + req_access = null + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"ay" = ( +/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 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/porthall) +"az" = ( +/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardhall) +"aI" = ( +/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardhall) +"aN" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"aO" = ( +/turf/space/transit/north, +/area/space) +"aR" = ( +/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/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"bj" = ( +/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/command{ + name = "Captain's Quarters"; + req_access = list(212); + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"bm" = ( +/obj/structure/table/standard, +/obj/random/plushie, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"bo" = ( +/obj/structure/window/shuttle/crescent, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/captain) +"bx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"bE" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"bG" = ( +/obj/machinery/door/airlock{ + req_access = list(212); + name = "Custodial Closet" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/janitor) +"bJ" = ( +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/obj/machinery/power/apc/east{ + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/janitor) +"bT" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/computer/ship/navigation{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"bY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 8 + }, +/turf/simulated/wall/shuttle/space_ship, +/area/shuttle/dominian_unathi) +"cg" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"cl" = ( +/obj/machinery/telecomms/allinone/ship, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating/cooled, +/area/ship/dominian_unathi/portthrust) +"cn" = ( +/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 = 6 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"cp" = ( +/obj/effect/landmark/entry_point/fore{ + name = "fore, fighter bay" + }, +/turf/unsimulated/wall/fakepdoor{ + dir = 4 + }, +/area/ship/dominian_unathi/hangar) +"cr" = ( +/obj/machinery/door/airlock/medical{ + name = "Operating Theatre"; + req_access = list(212) + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"cs" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"cF" = ( +/obj/effect/floor_decal/corner/green/diagonal, +/obj/structure/bed/stool/bar/padded/orange, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"cI" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/hangar) +"cK" = ( +/obj/structure/window/shuttle, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/gun) +"cL" = ( +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/obj/machinery/alarm/north{ + req_one_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"cP" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/crew) +"cQ" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"cR" = ( +/obj/structure/closet/secure_closet/guncabinet{ + req_access = null + }, +/obj/item/gun/projectile/pistol/super_heavy, +/obj/item/ammo_magazine/super_heavy, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"cW" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"cX" = ( +/obj/machinery/alarm/north{ + req_one_access = null + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"cZ" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"da" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/iv_drip, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"dd" = ( +/obj/structure/table/rack, +/obj/item/ship_ammunition/lammergeier, +/obj/item/ship_ammunition/lammergeier, +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + layer = 2.71 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/obj/structure/window/reinforced{ + dir = 4; + icon_state = "rwindow" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"dm" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/ship/dominian_unathi/starboardthrust) +"dr" = ( +/obj/structure/ship_weapon_dummy, +/obj/structure/window/reinforced{ + dir = 4; + icon_state = "rwindow" + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/gun) +"dv" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, +/obj/structure/closet/crate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"dx" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/structure/bed/roller, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"dy" = ( +/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/ship/dominian_unathi/armory) +"dE" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/ship/dominian_unathi/engineering) +"dF" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/space/void/dominia/unathi, +/obj/item/clothing/head/helmet/space/void/dominia/unathi, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/mask/breath, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/obj/structure/window/reinforced{ + dir = 4; + icon_state = "rwindow" + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/door/window{ + dir = 2; + name = "Voidsuit Storage"; + req_access = list(212) + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"dK" = ( +/turf/simulated/wall, +/area/ship/dominian_unathi/loot) +"dL" = ( +/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/ship/dominian_unathi/eva) +"dO" = ( +/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardhall) +"dQ" = ( +/obj/effect/landmark/entry_point/aft{ + name = "aft, medical bay" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/med) +"dY" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8; + layer = 2.8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4; + icon_state = "rwindow" + }, +/obj/machinery/door/window{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"dZ" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8; + layer = 2.8 + }, +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"ee" = ( +/obj/effect/map_effect/window_spawner/full/borosilicate/reinforced/firedoor, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"eg" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"ei" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"ek" = ( +/obj/effect/landmark/entry_point/starboard{ + name = "starboard, boarding pods" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/pods) +"em" = ( +/obj/effect/floor_decal/corner/green/diagonal, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/toilet) +"en" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/alarm/east{ + req_one_access = null + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"eo" = ( +/obj/structure/dispenser/oxygen, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"eq" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"er" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/table/standard, +/obj/random/tech_supply, +/obj/item/device/gps{ + pixel_x = 10; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"ex" = ( +/obj/effect/floor_decal/corner/orange, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"eL" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"eN" = ( +/turf/simulated/wall, +/area/ship/dominian_unathi/captain) +"eQ" = ( +/obj/structure/ship_weapon_dummy, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/gun) +"eR" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/random/loot, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/storage) +"eS" = ( +/obj/effect/floor_decal/corner/green/diagonal, +/obj/structure/bed/stool/bar/padded/orange, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"eZ" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"fk" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/button/remote/airlock{ + dir = 4; + id = "kazhkz_stall_2"; + name = "Stall Door Lock"; + pixel_x = 24; + specialfunctions = 4 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/toilet) +"fq" = ( +/obj/structure/bed/stool/chair/sofa/right/black{ + dir = 4; + name = "pew"; + desc = "A pew, how holy!" + }, +/obj/effect/floor_decal/corner/white{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"fr" = ( +/obj/structure/closet/secure_closet/guncabinet{ + req_access = null + }, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"ft" = ( +/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/service{ + name = "Temple of The Holy Tribunal"; + req_access = list(212); + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"fx" = ( +/obj/machinery/atmospherics/unary/engine, +/obj/structure/window/borosilicate/reinforced, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"fz" = ( +/obj/structure/ship_weapon_dummy, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/gun) +"fE" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"fF" = ( +/obj/structure/table/steel, +/obj/item/storage/toolbox/mechanical, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/janitor) +"fG" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/storage) +"fH" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/loading/yellow, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"fN" = ( +/obj/structure/sign/flag/kazhkz{ + pixel_y = -32 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"fY" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"gc" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"gd" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/alarm/north{ + req_one_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"gf" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/loading/yellow{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"gh" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"gt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"gu" = ( +/obj/effect/floor_decal/corner/white{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"gw" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"gx" = ( +/obj/machinery/light, +/turf/simulated/floor/lino, +/area/ship/dominian_unathi/canteen) +"gy" = ( +/obj/structure/table/steel, +/obj/random/loot, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/storage) +"gD" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/alarm/east{ + req_one_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/janitor) +"gF" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/portthrust) +"gJ" = ( +/obj/structure/closet/crate/trashcart, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/janitor) +"gN" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/janitor) +"gO" = ( +/obj/structure/mirror{ + pixel_x = 32 + }, +/obj/structure/sink{ + dir = 4; + pixel_x = 10 + }, +/obj/effect/floor_decal/corner/green/diagonal, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/toilet) +"gR" = ( +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/storage) +"gV" = ( +/obj/effect/floor_decal/corner/green/diagonal, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/toilet) +"gY" = ( +/turf/simulated/wall, +/area/ship/dominian_unathi/eva) +"hi" = ( +/obj/effect/floor_decal/corner/red{ + dir = 6 + }, +/obj/machinery/computer/ship/targeting{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"hk" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"hl" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardhall) +"ho" = ( +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/obj/machinery/vending/wallmed1{ + pixel_y = 32; + req_access = null + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"hs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"hF" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"hM" = ( +/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 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"hN" = ( +/obj/machinery/atmospherics/unary/engine, +/obj/structure/window/borosilicate/reinforced, +/obj/effect/landmark/entry_point/aft{ + name = "aft engines, port" + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"hO" = ( +/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/fuel{ + dir = 4 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"hQ" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"ik" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"im" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 8; + pixel_x = -7 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"ip" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"iq" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"iv" = ( +/obj/structure/table/steel, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/item/clothing/head/helmet/space/void/hegemony/captain, +/obj/item/clothing/suit/space/void/hegemony/captain, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"iw" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"iC" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"iD" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/effect/floor_decal/corner/orange, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"iG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"iH" = ( +/obj/effect/floor_decal/corner/orange/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"iV" = ( +/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/fuel{ + dir = 4 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"iX" = ( +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/obj/machinery/computer/ship/engines{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"jp" = ( +/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/fuel{ + dir = 4 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"jr" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"jz" = ( +/obj/effect/floor_decal/corner/white{ + dir = 10 + }, +/obj/effect/floor_decal/corner/white{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"jA" = ( +/obj/machinery/vending/tool{ + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"jE" = ( +/obj/structure/table/steel, +/obj/item/clothing/suit/space/void/valkyrie, +/obj/item/clothing/head/helmet/space/void/valkyrie, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/obj/structure/window/reinforced, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"jI" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/machinery/door/airlock/command{ + name = "Bridge"; + req_access = list(212) + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"jK" = ( +/obj/structure/sign/flag/kazhkz{ + pixel_y = 32 + }, +/obj/effect/floor_decal/corner/orange/full{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"jL" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"jP" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/med) +"jR" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"jU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"kc" = ( +/obj/effect/shuttle_landmark/dominian_unathi/nav3, +/turf/template_noop, +/area/space) +"ke" = ( +/obj/effect/shuttle_landmark/dominian_unathi/nav4, +/turf/template_noop, +/area/space) +"ki" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/structure/closet/walllocker/medical/secure{ + name = "O- Blood Locker"; + pixel_x = 32; + req_access = null + }, +/obj/item/reagent_containers/blood/OMinus{ + pixel_x = -7 + }, +/obj/item/reagent_containers/blood/OMinus{ + pixel_x = -7 + }, +/obj/item/reagent_containers/blood/OMinus{ + pixel_x = -7 + }, +/obj/item/reagent_containers/blood/OMinus{ + pixel_x = -7 + }, +/obj/item/reagent_containers/blood/OMinus{ + pixel_x = -7 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"km" = ( +/obj/effect/map_effect/window_spawner/full/borosilicate/reinforced/firedoor, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"kx" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"ky" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"kA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/structure/cable/green{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/power/apc/north{ + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"kF" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/decal/fake_object{ + desc = "A panel controlling an SUPB Pod. This one states the pod is currently offline."; + icon = 'icons/obj/computer.dmi'; + icon_state = "lift"; + name = "SUPB lauching panel" + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"kJ" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"kO" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"kQ" = ( +/obj/structure/ship_weapon_dummy, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"kT" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"kW" = ( +/turf/simulated/wall, +/area/ship/dominian_unathi/chapel) +"kX" = ( +/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/highsecurity{ + name = "Primary Ship Armament"; + req_access = list(212); + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"le" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"lg" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"li" = ( +/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{ + icon_state = "1-8" + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"lu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"lv" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"lx" = ( +/obj/machinery/door/airlock{ + id_tag = "kazhkz_stall_2"; + name = "Stall 2"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/toilet) +"ly" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/lino, +/area/ship/dominian_unathi/canteen) +"lz" = ( +/obj/machinery/appliance/cooker/stove, +/turf/simulated/floor/lino, +/area/ship/dominian_unathi/canteen) +"lB" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"lI" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"lL" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/empty{ + name = "waste canister" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/portthrust) +"lN" = ( +/obj/effect/landmark/entry_point/port{ + name = "port, mess hall" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/canteen) +"lO" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"lQ" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/reagent_containers/glass/bucket, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/janitor) +"lS" = ( +/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/effect/floor_decal/corner/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"lU" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"lV" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"ma" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/under/dominia/dress/noble/black/kazhkz, +/obj/item/clothing/under/dominia/dress/noble/kazhkz, +/obj/item/clothing/under/dominia/imperial_suit/kazhkz, +/obj/item/clothing/accessory/poncho/dominia_cape/kazhkz/white, +/obj/item/clothing/accessory/poncho/dominia_cape/kazhkz, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"mj" = ( +/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" + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardhall) +"mp" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/obj/machinery/computer/ship/engines{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"mr" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/bed/stool/chair/sofa/right/black{ + dir = 4; + name = "pew"; + desc = "A pew, how holy!" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"mt" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"mE" = ( +/obj/machinery/door/airlock/medical{ + name = "Infirmary"; + req_access = list(212) + }, +/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 = 6 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"mF" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"mH" = ( +/obj/machinery/ship_weapon/francisca/compact{ + weapon_id = "Kazkhz Rotary Cannon"; + pixel_x = -40; + pixel_y = -64 + }, +/obj/structure/ship_weapon_dummy, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"mK" = ( +/obj/effect/floor_decal/corner/orange/full, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"mQ" = ( +/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"mS" = ( +/obj/structure/table/steel, +/obj/item/melee/energy/sword/hegemony, +/obj/item/spacecash/c1000, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/obj/structure/window/reinforced, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"mZ" = ( +/obj/structure/table/rack, +/obj/item/ship_ammunition/francisca/frag, +/obj/item/ship_ammunition/francisca/frag, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + layer = 2.71 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"nd" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"nf" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"nm" = ( +/obj/effect/landmark/entry_point/starboard{ + name = "starboard, main gun" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/gun) +"np" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"nq" = ( +/obj/structure/sign/flag/kazhkz{ + pixel_y = -32 + }, +/obj/machinery/alarm/north{ + req_one_access = null + }, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"nr" = ( +/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardhall) +"nv" = ( +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"nC" = ( +/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/noid, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"nF" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"nP" = ( +/turf/simulated/wall, +/area/ship/dominian_unathi/bridgefoyer) +"nQ" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"nS" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"nU" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"nZ" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/door/window{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"ol" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"oo" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/hangar) +"oq" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/green/diagonal, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"ot" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/janitor) +"ou" = ( +/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/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"ow" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"ox" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"oA" = ( +/obj/structure/ship_weapon_dummy, +/turf/simulated/wall/shuttle/space_ship, +/area/shuttle/dominian_unathi) +"oD" = ( +/obj/structure/cable/green{ + dir = 4 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/machinery/power/apc/south{ + req_access = null + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"oE" = ( +/obj/machinery/power/portgen/basic/fusion, +/obj/structure/cable/green{ + dir = 1 + }, +/turf/simulated/floor/greengrid, +/area/ship/dominian_unathi/engineering) +"oF" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/empty/air, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"oH" = ( +/obj/machinery/atmospherics/unary/engine, +/obj/structure/window/borosilicate/reinforced, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"oI" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"oL" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"oN" = ( +/obj/structure/closet/crate/loot, +/obj/machinery/light/broken{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/storage) +"oP" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"oW" = ( +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"oY" = ( +/obj/effect/landmark/entry_point/fore{ + name = "fore, gun battery" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/gun) +"pd" = ( +/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/command{ + name = "Fighter Bay"; + req_access = list(212); + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/hangar) +"pe" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"pk" = ( +/obj/machinery/light, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"pp" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + layer = 2.71 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + layer = 2.71 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"ps" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"pu" = ( +/obj/machinery/light, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"pz" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"pG" = ( +/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"pL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"pN" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/structure/fuel_port/hydrogen{ + pixel_x = 25 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"pO" = ( +/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 = 5 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardhall) +"pU" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/gun) +"pW" = ( +/obj/effect/floor_decal/corner/green/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"pZ" = ( +/obj/structure/closet/secure_closet/guncabinet{ + req_access = null + }, +/obj/item/gun/projectile/pistol, +/obj/item/gun/projectile/pistol, +/obj/item/gun/projectile/pistol, +/obj/item/gun/projectile/pistol, +/obj/item/ammo_magazine/mc9mm, +/obj/item/ammo_magazine/mc9mm, +/obj/item/ammo_magazine/mc9mm, +/obj/item/ammo_magazine/mc9mm, +/obj/item/ammo_magazine/mc9mm, +/obj/item/ammo_magazine/mc9mm, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"qe" = ( +/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/machinery/door/airlock/engineering{ + req_access = list(212); + name = "Port Engineering"; + dir = 8 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"qg" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 8; + layer = 2.8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4; + icon_state = "rwindow" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"qk" = ( +/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/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"ql" = ( +/obj/structure/closet/walllocker/medical/secure{ + name = "Theatre Locker"; + pixel_x = 32; + req_access = null + }, +/obj/item/storage/box/gloves, +/obj/item/storage/box/gloves, +/obj/item/storage/box/masks{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/box/masks{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + icon_state = "sterilesprayblue"; + name = "surgery cleaner"; + pixel_y = -7; + pixel_x = 10 + }, +/obj/item/reagent_containers/blood/OMinus{ + pixel_x = -7 + }, +/obj/item/reagent_containers/blood/OMinus{ + pixel_x = -7 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"qm" = ( +/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/effect/floor_decal/corner/white{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"qn" = ( +/obj/structure/plasticflaps/airtight, +/obj/machinery/door/firedoor/noid, +/obj/machinery/door/airlock/engineering{ + name = "Telecommunications" + }, +/turf/simulated/floor/plating/cooled, +/area/ship/dominian_unathi/portthrust) +"qq" = ( +/obj/structure/janitorialcart/full, +/obj/item/reagent_containers/glass/bucket, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/janitor) +"qs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 5 + }, +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"qv" = ( +/obj/structure/sign/flag/kazhkz{ + pixel_y = -32 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"qB" = ( +/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/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"qD" = ( +/obj/machinery/optable, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"qG" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/starboardthrust) +"qH" = ( +/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 = 9 + }, +/obj/effect/floor_decal/corner/white{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"qJ" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"qO" = ( +/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, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"qZ" = ( +/obj/structure/window/shuttle/crescent, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"rb" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"rq" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/decal/fake_object{ + desc = "A panel controlling an SUPB Pod. This one states the pod is currently offline."; + icon = 'icons/obj/computer.dmi'; + icon_state = "lift"; + name = "SUPB lauching panel" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"ru" = ( +/obj/structure/ship_weapon_dummy, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/airless, +/area/ship/dominian_unathi/gun) +"rv" = ( +/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"rz" = ( +/obj/structure/closet/secure_closet/guncabinet{ + req_access = null + }, +/obj/item/gun/projectile/automatic/tommygun/dom, +/obj/item/gun/projectile/automatic/tommygun/dom, +/obj/item/gun/projectile/automatic/tommygun/dom, +/obj/item/ammo_magazine/submachinemag, +/obj/item/ammo_magazine/submachinemag, +/obj/item/ammo_magazine/submachinemag, +/obj/item/ammo_magazine/submachinemag, +/obj/item/ammo_magazine/submachinemag, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"rG" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + layer = 2.71 + }, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"rH" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 1 + }, +/obj/machinery/airlock_sensor/airlock_interior{ + pixel_x = -5; + pixel_y = 25 + }, +/obj/effect/map_effect/marker/airlock/shuttle{ + cycle_to_external_air = 1; + master_tag = "airlock_kazhkz_shutle"; + name = "airlock_shutle_kazhkz"; + shuttle_tag = "Kazhkz Fighter"; + req_one_access = list(212) + }, +/obj/effect/map_effect/marker_helper/airlock/interior, +/obj/machinery/access_button{ + pixel_x = -5; + pixel_y = 20 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"rM" = ( +/obj/effect/shuttle_landmark/dominian_unathi_shuttle/transit, +/turf/space/transit/north, +/area/space) +"rN" = ( +/obj/structure/cable/green{ + dir = 1 + }, +/obj/machinery/power/apc/north{ + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"rO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"rP" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"rR" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"rS" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Boarding Pods"; + req_access = list(212); + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"rX" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/structure/bed/stool/chair/shuttle{ + dir = 8 + }, +/obj/machinery/alarm/east{ + req_one_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"sg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/empty/phoron, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"si" = ( +/obj/structure/bed/stool/chair/office/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"sj" = ( +/obj/structure/bed/stool/chair/office/bridge/generic{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"sl" = ( +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"sq" = ( +/obj/machinery/alarm{ + req_one_access = null; + pixel_y = 32; + dir = 0 + }, +/turf/simulated/wall, +/area/ship/dominian_unathi/eva) +"ss" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"sw" = ( +/obj/machinery/door/airlock{ + id_tag = "intrepid_washroom"; + name = "Washroom Compartment"; + 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/ship/dominian_unathi/toilet) +"sx" = ( +/obj/structure/cable/green{ + dir = 1 + }, +/obj/machinery/power/smes/buildable/horizon_shuttle, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"sy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"sz" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/loot) +"sD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"sE" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"sF" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"sI" = ( +/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"sM" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"sR" = ( +/obj/structure/table/rack, +/obj/item/ship_ammunition/francisca/ap, +/obj/item/ship_ammunition/francisca/ap, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + layer = 2.71 + }, +/obj/structure/window/reinforced, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"sT" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"tc" = ( +/obj/structure/closet/crate/secure/phoron, +/obj/item/stack/material/phoron/full, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"th" = ( +/obj/structure/table/standard, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/electrical, +/obj/item/storage/bag/inflatable, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"ti" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"tl" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/machinery/alarm{ + req_one_access = null; + dir = 8; + pixel_x = 32 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"tm" = ( +/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/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + icon_state = "1-4" + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"tn" = ( +/obj/structure/cable/green{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/power/apc/east{ + req_access = null + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"tp" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"tq" = ( +/obj/effect/step_trigger/teleporter, +/turf/space/transit/north, +/area/space) +"tw" = ( +/obj/structure/table/standard, +/obj/random/tool, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"tC" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"tI" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/empty/air, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/portthrust) +"tP" = ( +/obj/effect/map_effect/airlock/e_to_w, +/turf/simulated/wall, +/area/ship/dominian_unathi/bridgefoyer) +"tR" = ( +/obj/structure/table/wood, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"ua" = ( +/obj/structure/table/steel, +/obj/item/clothing/suit/space/void/coalition, +/obj/item/clothing/head/helmet/space/void/coalition, +/obj/item/gun/projectile/revolver, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"ue" = ( +/obj/structure/lattice/catwalk, +/turf/template_noop, +/area/space) +"um" = ( +/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ + dir = 1 + }, +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/ship/dominian_unathi/starboardthrust) +"un" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/structure/bed/roller, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"ut" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"uA" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/machinery/alarm/west{ + req_one_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"uC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"uD" = ( +/obj/machinery/vending/engivend{ + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"uI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"uR" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"uS" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"uT" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/ramp{ + dir = 1 + }, +/area/ship/dominian_unathi/bridge) +"uW" = ( +/obj/structure/bed/padded, +/obj/item/bedsheet/random, +/obj/structure/curtain/open/bed, +/obj/effect/ghostspawpoint{ + name = "igs - kazhkz_privateer_captain"; + identifier = "kazhkz_privateer_captain" + }, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"uZ" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"vd" = ( +/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/manifold4w/hidden/scrubbers, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/porthall) +"vf" = ( +/obj/structure/ship_weapon_dummy, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/gun) +"vg" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/starboardthrust) +"vh" = ( +/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/highsecurity{ + name = "Battle Bridge"; + req_access = list(212); + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"vi" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"vq" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"vu" = ( +/obj/structure/table/steel, +/obj/item/storage/assunzionesheath, +/obj/item/assunzioneorb, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"vw" = ( +/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/machinery/door/firedoor/noid, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"vx" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/structure/cable/green{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/power/apc/north{ + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"vA" = ( +/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/ship/dominian_unathi/crew) +"vF" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"vM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"vR" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"vT" = ( +/obj/effect/floor_decal/corner/green/diagonal, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"vV" = ( +/obj/structure/ship_weapon_dummy/barrel, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"vW" = ( +/obj/structure/window/shuttle, +/obj/effect/landmark/entry_point/fore, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"wb" = ( +/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/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, +/area/ship/dominian_unathi/bridgefoyer) +"wf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"wg" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/space) +"wp" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/machinery/mech_recharger, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"wt" = ( +/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/ship/dominian_unathi/hangar) +"wu" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"wv" = ( +/obj/effect/landmark/entry_point/aft{ + name = "aft, engineering" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/engineering) +"wE" = ( +/obj/effect/floor_decal/corner/orange, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"wH" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"wL" = ( +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/door/window{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"wN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"wO" = ( +/obj/effect/landmark/entry_point/fore{ + name = "fore, central hall" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi) +"wT" = ( +/obj/effect/landmark/entry_point/starboard{ + name = "starboard, treasure room" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/loot) +"wV" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"wW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"xc" = ( +/obj/structure/table/stone/marble, +/obj/item/device/versebook/tribunal, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"xn" = ( +/obj/structure/ship_weapon_dummy/barrel, +/turf/template_noop, +/area/ship/dominian_unathi/gun) +"xs" = ( +/obj/effect/shuttle_landmark/dominian_unathi/nav1, +/turf/template_noop, +/area/space) +"xt" = ( +/obj/structure/table/stone/marble, +/obj/item/reagent_containers/food/drinks/drinkingglass/newglass/wine, +/obj/item/reagent_containers/food/drinks/drinkingglass/newglass/wine, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"xu" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/cic) +"xv" = ( +/obj/machinery/alarm/east{ + req_one_access = null + }, +/obj/structure/table/standard, +/obj/item/paper_bin, +/obj/item/pen/black, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"xz" = ( +/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 = 10 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/porthall) +"xD" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4; + name = "pump to waste" + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"xE" = ( +/obj/effect/landmark/entry_point/port{ + name = "port, washroom" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/toilet) +"xF" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"xL" = ( +/obj/effect/landmark/entry_point/fore{ + name = "fore, starboard hall" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/starboardhall) +"xM" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"xN" = ( +/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"xQ" = ( +/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/effect/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"yb" = ( +/turf/simulated/wall, +/area/ship/dominian_unathi/med) +"yh" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5; + icon_state = "intact" + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"yi" = ( +/obj/structure/ship_weapon_dummy, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/airless, +/area/ship/dominian_unathi/gun) +"yl" = ( +/obj/structure/closet/secure_closet/custodial/offship, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/janitor) +"yn" = ( +/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/noid, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"yp" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"yq" = ( +/obj/effect/landmark/entry_point/starboard, +/turf/simulated/wall/shuttle/space_ship, +/area/shuttle/dominian_unathi) +"yt" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/decal/fake_object{ + desc = "A panel controlling an SUPB Pod. This one states the pod is currently offline."; + icon = 'icons/obj/computer.dmi'; + icon_state = "lift"; + name = "SUPB lauching panel" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"yu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"yB" = ( +/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/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/machinery/door/airlock/command{ + name = "Bridge"; + req_access = list(212) + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"yG" = ( +/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/noid{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"yK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"yM" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"yR" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/structure/closet/crate/loot, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/storage) +"yT" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"yV" = ( +/obj/effect/landmark/entry_point/port, +/turf/simulated/wall/shuttle/space_ship, +/area/shuttle/dominian_unathi) +"yY" = ( +/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/fuel{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering{ + req_access = list(212); + name = "Starboard Engineering"; + dir = 4 + }, +/obj/machinery/door/firedoor/noid, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"zb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"zf" = ( +/obj/structure/closet/walllocker{ + name = "priest's raiments locker"; + pixel_y = -32 + }, +/obj/item/clothing/under/dominia/priest, +/obj/item/clothing/accessory/dominia, +/obj/item/clothing/accessory/poncho/dominia/red/surcoat, +/obj/item/clothing/head/beret/dominia, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"zh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"zj" = ( +/obj/structure/curtain/open/shower, +/obj/machinery/shower, +/obj/machinery/door/window, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/toilet) +"zA" = ( +/obj/structure/bed, +/obj/structure/curtain/open/bed, +/obj/machinery/light, +/obj/effect/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"zB" = ( +/obj/structure/dispenser/oxygen, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"zF" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"zG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/bed/stool/chair/office/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"zJ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"zL" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"zO" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"zQ" = ( +/obj/effect/floor_decal/corner/green/diagonal, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/toilet) +"zU" = ( +/obj/machinery/door/airlock/command{ + name = "Bridge"; + req_access = list(212) + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"zW" = ( +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/hangar) +"Aa" = ( +/obj/machinery/light, +/obj/effect/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"Ab" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"Af" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardhall) +"Ai" = ( +/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, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"Aj" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"Ak" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/door/firedoor/noid, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"Ao" = ( +/obj/machinery/computer/ship/engines{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8; + pixel_x = -7 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"Aq" = ( +/obj/machinery/door/window{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/obj/structure/window/reinforced{ + dir = 4; + icon_state = "rwindow" + }, +/obj/machinery/atmospherics/portables_connector{ + dir = 8; + layer = 2.8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"Ar" = ( +/obj/effect/landmark/entry_point/aft{ + name = "aft, custodial" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/janitor) +"Au" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"Aw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"Ax" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/alarm/west{ + req_one_access = null + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"Az" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/portthrust) +"AA" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/body_scanconsole{ + dir = 1; + layer = 3.01; + pixel_y = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"AB" = ( +/obj/structure/sign/flag/elyra/large/south, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"AD" = ( +/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/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"AI" = ( +/obj/machinery/atmospherics/binary/passive_gate/supply{ + dir = 8; + target_pressure = 250 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"AN" = ( +/obj/effect/floor_decal/corner/green/diagonal, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"AO" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/ship/dominian_unathi/engineering) +"AQ" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/structure/sign/flag/dominia/large/east, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"AT" = ( +/obj/machinery/shipsensors/weak, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"AW" = ( +/obj/machinery/mech_recharger, +/mob/living/heavy_vehicle/premade/ripley/loader, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"Bf" = ( +/obj/structure/bed/stool/chair/office/bridge/pilot, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"Bi" = ( +/obj/effect/map_effect/marker/airlock/shuttle{ + cycle_to_external_air = 1; + master_tag = "airlock_kazhkz_shutle"; + name = "airlock_shutle_kazhkz"; + shuttle_tag = "Kazhkz Fighter"; + req_one_access = list(212) + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/hangar) +"Bk" = ( +/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 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"Bl" = ( +/obj/structure/closet/crate/rad{ + name = "radioactive materials crate" + }, +/obj/item/stack/material/tritium/full, +/obj/item/stack/material/tritium/full, +/obj/item/stack/material/tritium/full, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"Bm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"Bt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"Bx" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + layer = 2.71 + }, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/empty{ + name = "waste canister" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/portthrust) +"BB" = ( +/obj/effect/floor_decal/corner/orange/diagonal{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"BI" = ( +/obj/machinery/portable_atmospherics/canister/hydrogen, +/obj/machinery/light, +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + layer = 2.71 + }, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"BJ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/alarm/north{ + req_one_access = null + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/hangar) +"BQ" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/shuttle/dominian_unathi) +"BV" = ( +/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 = 6 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"BZ" = ( +/obj/machinery/atmospherics/pipe/tank{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"Ck" = ( +/obj/structure/closet/secure_closet/engineering_electrical{ + req_access = null + }, +/obj/item/clothing/gloves/yellow/specialu, +/obj/item/clothing/gloves/yellow/specialu, +/obj/item/clothing/gloves/yellow/specialu, +/obj/item/clothing/gloves/yellow/specialu, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"Cs" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"Ct" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + layer = 2.71 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/empty/air, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/portthrust) +"Cy" = ( +/obj/machinery/alarm/north{ + pixel_y = -28; + req_one_access = list(113) + }, +/obj/machinery/light, +/obj/structure/table/glass, +/obj/item/storage/firstaid/adv{ + pixel_x = -3; + pixel_y = 4 + }, +/obj/item/storage/firstaid/fire{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/item/storage/firstaid/regular{ + pixel_x = -4 + }, +/obj/item/storage/firstaid/o2{ + pixel_x = 6; + pixel_y = -4 + }, +/obj/item/reagent_containers/hypospray/autoinjector/survival{ + pixel_y = 5; + pixel_x = 18 + }, +/obj/item/reagent_containers/hypospray/autoinjector/survival{ + pixel_y = 5; + pixel_x = 18 + }, +/obj/item/reagent_containers/hypospray/autoinjector/survival{ + pixel_y = 5; + pixel_x = 18 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"CA" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"CB" = ( +/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" + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/porthall) +"CD" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"CE" = ( +/obj/effect/floor_decal/corner/red{ + dir = 6 + }, +/obj/machinery/computer/ship/helm{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"CF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"CH" = ( +/obj/structure/cable/green{ + dir = 4 + }, +/obj/machinery/power/apc/east{ + req_access = null + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"CI" = ( +/obj/structure/window/shuttle/crescent, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/bridge) +"CK" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"CL" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"CN" = ( +/obj/structure/window/shuttle/crescent, +/obj/effect/landmark/entry_point/starboard{ + name = "starboard, captain's quarters" + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/captain) +"CR" = ( +/obj/machinery/iff_beacon/name_change, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"CT" = ( +/obj/machinery/atmospherics/unary/engine, +/obj/structure/window/borosilicate/reinforced, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"CU" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/machinery/computer/ship/sensors, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"CX" = ( +/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/ship/dominian_unathi/bridgefoyer) +"CY" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"Dd" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"Df" = ( +/obj/structure/closet/secure_closet/guncabinet{ + req_access = null + }, +/obj/item/gun/projectile/automatic/rifle/dom, +/obj/item/gun/projectile/automatic/rifle/dom, +/obj/item/ammo_magazine/c762, +/obj/item/ammo_magazine/c762, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"Dg" = ( +/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/carpet/orange, +/area/ship/dominian_unathi/captain) +"Dj" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardhall) +"Dk" = ( +/obj/structure/ship_weapon_dummy, +/turf/simulated/floor/airless, +/area/ship/dominian_unathi/gun) +"Dm" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"Dr" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"Dv" = ( +/obj/structure/table/rack, +/obj/item/ship_ammunition/lammergeier, +/obj/item/ship_ammunition/lammergeier, +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + layer = 2.71 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"Dw" = ( +/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/command{ + name = "Bridge"; + req_access = list(212) + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"Dx" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/structure/sign/flag/dominia/large/west, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"DA" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"DD" = ( +/obj/machinery/appliance/cooker/oven, +/turf/simulated/floor/lino, +/area/ship/dominian_unathi/canteen) +"DI" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/toilet) +"DK" = ( +/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/ship/dominian_unathi/bridgefoyer) +"DP" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/porthall) +"DQ" = ( +/obj/effect/decal/fake_object{ + desc = "An SUPB Pod, also know as a Single Use Personal Boarding Pod. These pods are utilized across the Spur for interdictions and hostile boarding actions across the Spur."; + icon = 'icons/obj/vehicles.dmi'; + icon_state = "droppod"; + name = "SUPB Pod" + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"DT" = ( +/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/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"Ea" = ( +/obj/structure/table/standard, +/obj/random/tech_supply, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"Eh" = ( +/obj/structure/window/shuttle/crescent, +/obj/effect/landmark/entry_point/fore{ + name = "fore, bridge" + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/bridge) +"Ej" = ( +/obj/machinery/vending/boozeomat/unathi_pirate{ + req_access = null + }, +/turf/simulated/floor/lino, +/area/ship/dominian_unathi/canteen) +"Ek" = ( +/obj/structure/ship_weapon_dummy, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/gun) +"EB" = ( +/obj/structure/table/rack, +/obj/item/ship_ammunition/lammergeier, +/obj/item/ship_ammunition/lammergeier, +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + layer = 2.71 + }, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"EC" = ( +/obj/structure/sign/flag/kazhkz{ + pixel_y = 32 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"EG" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"EH" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"EN" = ( +/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_engineering{ + name = "Engineering"; + req_access = list(212) + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"EO" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/hangar) +"EQ" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"ER" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"EV" = ( +/turf/simulated/wall, +/area/ship/dominian_unathi/canteen) +"Fb" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/external, +/obj/effect/map_effect/marker/airlock/shuttle{ + cycle_to_external_air = 1; + master_tag = "airlock_kazhkz_shutle"; + name = "airlock_shutle_kazhkz"; + shuttle_tag = "Kazhkz Fighter"; + req_one_access = list(212) + }, +/obj/effect/map_effect/marker_helper/airlock/interior, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"Fc" = ( +/obj/effect/overmap/visitable/ship/landable/dominian_unathi_shuttle, +/obj/machinery/hologram/holopad/long_range, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"Fe" = ( +/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"Ff" = ( +/obj/effect/floor_decal/corner/orange/full{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"Fi" = ( +/obj/effect/floor_decal/corner/red{ + dir = 10; + icon_state = "corner_white" + }, +/obj/structure/bed, +/obj/structure/curtain/open/bed, +/obj/effect/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"Fj" = ( +/obj/effect/landmark/entry_point/starboard{ + name = "starboard, locker room" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/crew) +"Fq" = ( +/obj/structure/cable/green{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/diagonal, +/obj/machinery/power/apc/north{ + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"Ft" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"Fv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9; + icon_state = "intact" + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"Fw" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"FA" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/structure/bed/stool/chair/shuttle{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"FE" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"FH" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/sleeper, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"FI" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/structure/table/rack, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/obj/machinery/door/window{ + dir = 4; + name = "Ammunition Storage"; + req_access = list(212) + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"FK" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"FN" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"FO" = ( +/obj/structure/table/stone/marble, +/obj/item/nullrod/dominia, +/obj/effect/floor_decal/corner/white{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"FP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"FU" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"FW" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"FY" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/north{ + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"Gb" = ( +/obj/effect/landmark/entry_point/starboard{ + name = "starboard, ammunition storage" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/armory) +"Gc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"Gd" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/janitor) +"Ge" = ( +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"Gk" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/pods) +"Gm" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/table/standard, +/obj/random/tool, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"Go" = ( +/obj/structure/closet/cabinet, +/obj/item/spacecash/c1000, +/obj/item/spacecash/c1000, +/obj/item/spacecash/c1000, +/obj/machinery/light, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"Gr" = ( +/obj/effect/map_effect/window_spawner/full/borosilicate/reinforced/firedoor, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"Gt" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/button/remote/airlock{ + dir = 8; + id = "kazhkz_stall_1"; + name = "Stall Door Lock"; + pixel_x = -24; + specialfunctions = 4 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/toilet) +"Gz" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"GE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"GG" = ( +/obj/item/tank/hydrogen/shuttle, +/obj/item/tank/hydrogen/shuttle, +/obj/item/tank/hydrogen/shuttle, +/obj/item/tank/hydrogen/shuttle, +/obj/structure/closet/crate/drop/grey{ + name = "DANGER - FLAMMABLE" + }, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"GK" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/effect/map_effect/window_spawner/full/reinforced, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"GN" = ( +/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/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"GR" = ( +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"GS" = ( +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"GT" = ( +/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 = 9 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/hangar) +"GV" = ( +/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{ + req_access = list(212); + name = "Mess Hall"; + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"GX" = ( +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/porthall) +"GY" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"GZ" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/smes/buildable/horizon_shuttle, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"Hb" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"Hi" = ( +/obj/structure/cable/green{ + dir = 8 + }, +/obj/machinery/power/apc/west{ + req_access = null + }, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/table/standard, +/obj/random/tech_supply, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"Hk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"Ht" = ( +/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/dark, +/area/ship/dominian_unathi/loot) +"Hx" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/greengrid, +/area/ship/dominian_unathi/engineering) +"Hy" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/machinery/computer/ship/helm, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"HA" = ( +/obj/structure/table/stone/marble, +/obj/item/book/manual/dominia_honor, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"HC" = ( +/obj/structure/window/shuttle/crescent, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardhall) +"HH" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/bridgefoyer) +"HP" = ( +/obj/machinery/ship_weapon/lammergeier{ + pixel_y = -224; + pixel_x = -32; + weapon_id = "Kazkhz Typhoon Cannon" + }, +/obj/structure/ship_weapon_dummy, +/turf/simulated/floor/airless, +/area/ship/dominian_unathi/gun) +"HU" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/janitor) +"Ig" = ( +/obj/structure/window/shuttle/crescent, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/porthall) +"Im" = ( +/obj/effect/floor_decal/corner/green/diagonal, +/obj/machinery/vending/dinnerware, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"In" = ( +/obj/effect/map_effect/airlock/e_to_w/long/square, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/porthall) +"Io" = ( +/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/fuel{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"Iq" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"Iv" = ( +/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 = 6 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardhall) +"Iy" = ( +/obj/structure/window/shuttle, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/hangar) +"IA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"IB" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/eva) +"IF" = ( +/obj/structure/reagent_dispensers/coolanttank, +/obj/item/reagent_containers/glass/bucket, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"IN" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/sign/flag/kazhkz{ + pixel_y = 32 + }, +/obj/structure/table/standard, +/obj/item/reagent_containers/food/drinks/drinkingglass/newglass/coffeecup/dom{ + pixel_x = -5 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/newglass/coffeecup/one{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"IR" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"IS" = ( +/obj/machinery/alarm/west{ + req_one_access = null + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"IW" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"IZ" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/hangar) +"Jb" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 6 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"Jd" = ( +/obj/structure/bed/stool/chair/wood{ + dir = 8 + }, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"Je" = ( +/obj/structure/bed/stool/chair/sofa/right/black{ + dir = 4; + name = "pew"; + desc = "A pew, how holy!" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"Jt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/janitor) +"Ju" = ( +/obj/structure/cable/green{ + dir = 4 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/machinery/power/apc/east{ + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"Jw" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"Jy" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"JC" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"JF" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"JH" = ( +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"JN" = ( +/obj/machinery/atmospherics/unary/engine, +/obj/structure/window/borosilicate/reinforced, +/obj/effect/landmark/entry_point/aft{ + name = "aft, port thruster" + }, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"JO" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/obj/structure/curtain/open/bed, +/obj/effect/ghostspawpoint{ + name = "igs - kazhkz_privateer"; + identifier = "kazhkz_privateer" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"JP" = ( +/obj/machinery/door/firedoor/noid, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"JT" = ( +/obj/structure/cable/green{ + dir = 4 + }, +/obj/machinery/power/apc/east{ + req_access = null + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"JW" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"JX" = ( +/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 = 9 + }, +/obj/effect/floor_decal/corner/green/diagonal, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"JZ" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen/fountain/silver, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"Kd" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + layer = 2.71 + }, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"Ke" = ( +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"Kf" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"Ki" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8; + layer = 2.8 + }, +/obj/machinery/portable_atmospherics/canister/empty{ + name = "waste canister" + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"Kk" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"Km" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"Kn" = ( +/obj/structure/table/standard, +/obj/random/toolbox, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"Ko" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/janitor) +"Kp" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"Kq" = ( +/obj/structure/table/steel, +/obj/item/clothing/under/rank/elyran_fatigues, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/obj/structure/window/reinforced, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"Kr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"Kx" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/table/standard, +/obj/random/tool, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"KE" = ( +/obj/structure/cable/green{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/power/apc/west{ + req_access = null + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"KF" = ( +/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/glass_engineering{ + name = "EVA Storage"; + req_access = list(212); + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"KT" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"Lc" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/structure/sign/flag/coalition/large/west, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"Ln" = ( +/obj/machinery/computer/ship/sensors, +/obj/effect/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"Ls" = ( +/turf/simulated/wall, +/area/ship/dominian_unathi/pods) +"Lt" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"Lu" = ( +/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/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 8 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"Lv" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/light, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"Ly" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"Lz" = ( +/obj/structure/bed/stool/chair/office/bridge/generic, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"LO" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"LP" = ( +/obj/structure/closet/firecloset/full, +/obj/effect/floor_decal/corner/red{ + dir = 10 + }, +/obj/effect/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"LQ" = ( +/turf/simulated/wall, +/area/ship/dominian_unathi/crew) +"LR" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"LU" = ( +/obj/machinery/ammunition_loader/francisca{ + weapon_id = "Kazkhz Rotary Cannon" + }, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"LW" = ( +/obj/structure/mirror{ + pixel_x = 32 + }, +/obj/structure/sink{ + dir = 4; + pixel_x = 10 + }, +/obj/effect/floor_decal/corner/green/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/toilet) +"LY" = ( +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/obj/structure/closet/crate/freezer/rations, +/obj/effect/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"Ma" = ( +/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/ship/dominian_unathi) +"Mb" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/obj/item/reagent_containers/food/snacks/meat, +/obj/item/reagent_containers/food/snacks/meat, +/obj/item/reagent_containers/food/snacks/meat, +/obj/item/reagent_containers/food/snacks/meat, +/obj/item/reagent_containers/food/snacks/meat, +/obj/item/reagent_containers/food/snacks/meat, +/obj/item/reagent_containers/food/snacks/meat, +/obj/item/reagent_containers/food/snacks/meat, +/obj/item/reagent_containers/food/snacks/fish/fishfillet, +/obj/item/reagent_containers/food/snacks/fish/fishfillet, +/obj/item/reagent_containers/food/snacks/fish/fishfillet, +/obj/item/reagent_containers/food/snacks/fish/fishfillet, +/obj/item/reagent_containers/food/snacks/fish/fishfillet, +/obj/item/reagent_containers/food/snacks/fish/fishfillet, +/turf/simulated/floor/lino, +/area/ship/dominian_unathi/canteen) +"Mh" = ( +/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"Mk" = ( +/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{ + req_access = list(212); + name = "Crew Quarters"; + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"Mn" = ( +/obj/effect/floor_decal/corner/green/diagonal, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"Ms" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/power/apc/north{ + req_access = null + }, +/obj/structure/bed/stool/chair/padded/black, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"MA" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/captain) +"MG" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"MP" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"MR" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"MZ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"Nc" = ( +/obj/machinery/alarm/west{ + req_one_access = null + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"Nd" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"Ni" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"Nn" = ( +/obj/structure/ship_weapon_dummy, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/airless, +/area/ship/dominian_unathi/gun) +"No" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/effect/overmap/visitable/ship/dominian_unathi, +/obj/machinery/hologram/holopad/long_range, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"Np" = ( +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardhall) +"Nv" = ( +/obj/structure/table/standard, +/obj/item/storage/box/fancy/tray, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"Nw" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"Nx" = ( +/turf/simulated/floor/tiled/ramp{ + dir = 1 + }, +/area/ship/dominian_unathi/bridge) +"Ny" = ( +/obj/machinery/alarm/north{ + req_one_access = null + }, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"NJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"NL" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/machinery/alarm/north{ + req_one_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"NR" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"Oe" = ( +/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{ + name = "Central Hall" + }, +/obj/machinery/door/firedoor/noid, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"Oi" = ( +/obj/effect/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"Op" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"OD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"OG" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/storage) +"OH" = ( +/obj/effect/floor_decal/corner/green/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/toilet) +"ON" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"OR" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"OS" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/machinery/computer/shuttle_control/explore/dominian_unathi_shuttle, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"Pd" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/starboardhall) +"Pg" = ( +/turf/simulated/wall, +/area/ship/dominian_unathi/engineering) +"Pi" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/computer/ship/targeting{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"Pj" = ( +/obj/effect/decal/fake_object{ + desc = "An SUPB Pod, also know as a Single Use Personal Boarding Pod. These pods are utilized across the Spur for interdictions and hostile boarding actions across the Spur."; + icon = 'icons/obj/vehicles.dmi'; + icon_state = "droppod"; + name = "SUPB Pod" + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"Pp" = ( +/obj/structure/bed/stool/chair/office/bridge/generic{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"Pq" = ( +/obj/machinery/alarm/north{ + req_one_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"PE" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"PJ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/decal/fake_object{ + desc = "A panel controlling an SUPB Pod. This one states the pod is currently offline."; + icon = 'icons/obj/computer.dmi'; + icon_state = "lift"; + name = "SUPB lauching panel" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"PK" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"PO" = ( +/obj/structure/railing/mapped, +/obj/structure/railing/mapped{ + dir = 4; + pixel_x = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"PR" = ( +/obj/machinery/iff_beacon/name_change, +/turf/simulated/floor/airless, +/area/ship/dominian_unathi/bridge) +"PY" = ( +/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/highsecurity{ + name = "Treasure Room"; + req_access = list(212); + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"Qd" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/orange/full, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"Qe" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"Qf" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"Qh" = ( +/obj/machinery/appliance/cooker/fryer, +/turf/simulated/floor/lino, +/area/ship/dominian_unathi/canteen) +"Qm" = ( +/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 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"Qv" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"Qx" = ( +/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/machinery/alarm/north{ + req_one_access = null + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"QF" = ( +/obj/machinery/ammunition_loader/lammergeier{ + weapon_id = "Kazkhz Typhoon Cannon" + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/gun) +"QI" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"QJ" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/obj/structure/curtain/open/bed, +/obj/effect/ghostspawpoint{ + name = "igs - kazhkz_privateer"; + identifier = "kazhkz_privateer" + }, +/obj/item/reagent_containers/food/drinks/bottle/small/xuizijuice, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"QM" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/engineering) +"QP" = ( +/obj/structure/closet, +/obj/item/clothing/accessory/poncho/dominia_cape/kazhkz/white, +/obj/item/clothing/accessory/poncho/dominia_cape/kazhkz, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"QQ" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/ship/dominian_unathi/engineering) +"QW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/empty/carbon_dioxide, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"QX" = ( +/turf/simulated/floor/lino, +/area/ship/dominian_unathi/canteen) +"QY" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"Rb" = ( +/obj/effect/floor_decal/corner/orange/full, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"Rd" = ( +/obj/effect/map_effect/airlock/e_to_w/long/square, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/starboardthrust) +"Rf" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/storage) +"Rk" = ( +/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 = 9 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/porthall) +"Ro" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"Rq" = ( +/obj/machinery/door/airlock{ + id_tag = "kazhkz_stall_1"; + name = "Stall 1"; + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/toilet) +"Rr" = ( +/turf/unsimulated/wall/fakepdoor{ + dir = 4 + }, +/area/ship/dominian_unathi/hangar) +"RC" = ( +/obj/machinery/computer/ship/helm, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"RI" = ( +/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 = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"RQ" = ( +/obj/machinery/computer/ship/sensors, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"RS" = ( +/obj/structure/window/shuttle, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"RW" = ( +/obj/effect/map_effect/marker/airlock/shuttle{ + cycle_to_external_air = 1; + master_tag = "airlock_kazhkz_shutle"; + name = "airlock_shutle_kazhkz"; + shuttle_tag = "Kazhkz Fighter"; + req_one_access = list(212) + }, +/obj/effect/map_effect/marker_helper/airlock/exterior, +/obj/machinery/airlock_sensor{ + pixel_x = 20; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"RX" = ( +/turf/simulated/wall, +/area/ship/dominian_unathi/armory) +"RY" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi) +"RZ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"Sa" = ( +/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/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/machinery/alarm/north{ + req_one_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"Sc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"Sg" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/janitor) +"Si" = ( +/obj/effect/floor_decal/corner/red{ + dir = 6 + }, +/obj/machinery/light, +/obj/effect/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"Sq" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 10 + }, +/obj/structure/mirror{ + pixel_x = 32 + }, +/obj/effect/floor_decal/corner/green/diagonal, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/toilet) +"Su" = ( +/obj/structure/table/rack, +/obj/item/ship_ammunition/francisca, +/obj/item/ship_ammunition/francisca, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + layer = 2.71 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"Sw" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"Sx" = ( +/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/ship/dominian_unathi/loot) +"SC" = ( +/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 = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"SD" = ( +/obj/effect/map_effect/airlock/w_to_e/long/square, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/starboardhall) +"SF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"SH" = ( +/obj/effect/landmark/entry_point/port{ + name = "port, EVA storage" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/eva) +"SJ" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/door/airlock/medical{ + name = "Equipment Storage"; + req_access = list(212); + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"SM" = ( +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/north{ + req_access = null + }, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"SP" = ( +/obj/machinery/atmospherics/unary/engine, +/obj/structure/window/borosilicate/reinforced, +/obj/effect/landmark/entry_point/aft{ + name = "aft, starboard thruster" + }, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"SQ" = ( +/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 + }, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"SX" = ( +/obj/effect/decal/fake_object{ + desc = "An SUPB Pod, also know as a Single Use Personal Boarding Pod. These pods are utilized across the Spur for interdictions and hostile boarding actions across the Spur."; + icon = 'icons/obj/vehicles.dmi'; + icon_state = "droppod"; + name = "SUPB Pod" + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"Ta" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/floor_decal/corner/green/diagonal, +/obj/structure/bed/stool/bar/padded/orange, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"Td" = ( +/obj/machinery/power/apc/west{ + req_access = null + }, +/obj/structure/cable/green{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"Tf" = ( +/obj/effect/floor_decal/corner/orange/full{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"Ti" = ( +/obj/effect/floor_decal/corner/orange/full{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"Tj" = ( +/obj/machinery/computer/ship/targeting{ + dir = 8 + }, +/obj/structure/railing/mapped{ + dir = 4; + pixel_x = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"Tk" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible/blue, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"Tn" = ( +/obj/effect/landmark/entry_point/port{ + name = "port, hangar" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/hangar) +"Tq" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/floor_decal/corner/green/diagonal, +/obj/structure/bed/stool/bar/padded/orange, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"Tt" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/porthall) +"Tu" = ( +/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/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"Tv" = ( +/obj/machinery/atmospherics/binary/pump/high_power{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"TB" = ( +/obj/machinery/vending/engineering{ + req_access = null + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/engineering) +"TC" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Armory & Munitions"; + req_access = list(212) + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"TE" = ( +/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/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"TF" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/chapel) +"TH" = ( +/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/fuel{ + dir = 4 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"TL" = ( +/turf/simulated/wall, +/area/ship/dominian_unathi/janitor) +"TO" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"TV" = ( +/obj/structure/cable/green{ + dir = 4 + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"TZ" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/greengrid, +/area/ship/dominian_unathi/engineering) +"Uc" = ( +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/bridgefoyer) +"Uj" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"Un" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/armory) +"Up" = ( +/obj/effect/floor_decal/corner/orange/full{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"Ur" = ( +/obj/structure/cable/green{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/power/apc/north{ + req_access = null + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/hangar) +"Us" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"UA" = ( +/obj/machinery/hologram/holopad/long_range, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"UB" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"UC" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/porthall) +"UF" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"UI" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/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/dominian_unathi/med) +"UR" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/sign/flag/kazhkz{ + pixel_y = 32 + }, +/obj/structure/undies_wardrobe, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"US" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/noid, +/obj/machinery/door/airlock/highsecurity{ + name = "Reactor"; + req_access = list(212) + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"Vc" = ( +/obj/structure/cable/green{ + dir = 4 + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"Vd" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"Vh" = ( +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"Vj" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/floor_decal/industrial/loading/yellow{ + dir = 1 + }, +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"Vn" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"Vp" = ( +/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/effect/floor_decal/corner/green/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"Vr" = ( +/obj/structure/cable/green{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/obj/machinery/power/apc/north{ + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"Vv" = ( +/obj/structure/table/glass, +/obj/item/roller{ + pixel_y = 3 + }, +/obj/item/storage/firstaid/toxin, +/obj/item/bodybag/cryobag, +/obj/item/reagent_containers/hypospray, +/obj/item/storage/pill_bottle/dylovene, +/obj/item/storage/belt/medical/first_responder, +/obj/item/auto_cpr{ + pixel_x = 6; + pixel_y = -1 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"Vw" = ( +/obj/structure/table/stone/marble, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"VA" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"VB" = ( +/obj/effect/floor_decal/corner/orange/diagonal{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"VC" = ( +/obj/effect/landmark/entry_point/fore{ + name = "fore, port hall" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/porthall) +"VE" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"VF" = ( +/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/porthall) +"VH" = ( +/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/porthall) +"VJ" = ( +/obj/effect/shuttle_landmark/dominian_unathi/nav2, +/turf/template_noop, +/area/space) +"VN" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"VP" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/machinery/bodyscanner, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/med) +"VR" = ( +/obj/structure/table/steel, +/obj/item/storage/box/mousetraps, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/janitor) +"VV" = ( +/obj/effect/map_effect/window_spawner/full/reinforced/firedoor, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"VX" = ( +/obj/machinery/door/firedoor/noid{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"VY" = ( +/obj/effect/floor_decal/corner/green/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/ship/dominian_unathi/toilet) +"VZ" = ( +/obj/machinery/atmospherics/unary/engine, +/obj/structure/window/borosilicate/reinforced, +/obj/effect/landmark/entry_point/aft{ + name = "aft engines, starboard" + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"Wa" = ( +/obj/structure/closet/crate/weapon, +/obj/item/stack/material/gold/full, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"We" = ( +/obj/machinery/light, +/obj/machinery/door/firedoor/noid{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"Wf" = ( +/turf/template_noop, +/area/space) +"Wj" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/gun) +"Wm" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/map_effect/marker/airlock/shuttle{ + cycle_to_external_air = 1; + master_tag = "airlock_kazhkz_shutle"; + name = "airlock_shutle_kazhkz"; + shuttle_tag = "Kazhkz Fighter"; + req_one_access = list(212) + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"Wn" = ( +/obj/structure/closet/secure_closet/guncabinet{ + req_access = null + }, +/obj/item/melee/hammer/powered, +/obj/item/melee/hammer/powered, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"Wp" = ( +/obj/structure/table/stone/marble, +/obj/item/reagent_containers/food/drinks/bottle/sarezhiwine, +/turf/simulated/floor/carpet/orange, +/area/ship/dominian_unathi/captain) +"Wr" = ( +/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/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/porthall) +"Wu" = ( +/obj/effect/floor_decal/corner/green/diagonal, +/obj/machinery/alarm/north{ + req_one_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"WD" = ( +/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 = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"WF" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + layer = 2.71 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1; + layer = 2.71 + }, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardthrust) +"WR" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"WU" = ( +/obj/machinery/door/firedoor/noid, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"WW" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"WY" = ( +/obj/effect/landmark/entry_point/port{ + name = "port, temple" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/chapel) +"Xb" = ( +/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/fuel{ + dir = 4 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"Xf" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/armory) +"Xg" = ( +/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/ship/dominian_unathi/crew) +"Xh" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/space/void/dominia/unathi, +/obj/item/clothing/head/helmet/space/void/dominia/unathi, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/mask/breath, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/obj/structure/window/reinforced{ + dir = 4; + icon_state = "rwindow" + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/door/window{ + dir = 2; + name = "Voidsuit Storage"; + req_access = list(212) + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"Xj" = ( +/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/effect/shuttle_landmark/dominian_unathi_shuttle/hangar{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/hangar) +"Xn" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/porthall) +"Xq" = ( +/obj/machinery/atmospherics/binary/pump/high_power, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/starboardthrust) +"Xt" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/structure/table/rack, +/obj/item/tank/jetpack/carbondioxide, +/obj/item/tank/jetpack/carbondioxide, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"Xx" = ( +/obj/machinery/atmospherics/pipe/tank/air{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"Xz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/fuel{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"XA" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"XD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5; + icon_state = "intact" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"XG" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/decal/fake_object{ + desc = "A panel controlling an SUPB Pod. This one states the pod is currently offline."; + icon = 'icons/obj/computer.dmi'; + icon_state = "lift"; + name = "SUPB lauching panel" + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/pods) +"XH" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"XJ" = ( +/obj/effect/floor_decal/corner/white{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/chapel) +"XM" = ( +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/binary/pump{ + dir = 1; + name = "air to filling" + }, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/portthrust) +"XT" = ( +/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/highsecurity{ + name = "Armory & Munitions"; + req_access = list(212); + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/starboardhall) +"XV" = ( +/obj/effect/map_effect/airlock/w_to_e, +/turf/simulated/wall, +/area/ship/dominian_unathi/bridgefoyer) +"XX" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/alarm/east{ + req_one_access = null + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/engineering) +"XZ" = ( +/obj/effect/floor_decal/corner/orange/full{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridgefoyer) +"Yb" = ( +/obj/structure/ship_weapon_dummy, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/airless, +/area/ship/dominian_unathi/gun) +"Yc" = ( +/turf/simulated/floor/foamedmetal, +/area/ship/dominian_unathi/toilet) +"Ye" = ( +/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/ship/dominian_unathi/armory) +"Yh" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/structure/table/rack, +/obj/item/device/radio, +/obj/item/device/radio, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"Yn" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/landmark/entry_point/aft{ + name = "aft, port hallway" + }, +/obj/effect/landmark/entry_point/aft, +/obj/machinery/door/airlock/external, +/obj/effect/map_effect/marker/airlock/shuttle{ + cycle_to_external_air = 1; + master_tag = "airlock_kazhkz_shutle"; + name = "airlock_shutle_kazhkz"; + shuttle_tag = "Kazhkz Fighter"; + req_one_access = list(212) + }, +/obj/machinery/access_button{ + pixel_x = 28; + pixel_y = 12; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/obj/effect/map_effect/marker_helper/airlock/exterior, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"Yo" = ( +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/obj/effect/floor_decal/corner/red{ + dir = 6 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"Ys" = ( +/obj/structure/sign/flag/hegemony/large/north, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"Yt" = ( +/obj/machinery/shipsensors, +/turf/simulated/floor/airless, +/area/ship/dominian_unathi/bridge) +"Yw" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 8 + }, +/obj/structure/bed/stool/chair/office/bridge/generic{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"YB" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 9 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/machinery/computer/ship/targeting{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/shuttle/dominian_unathi) +"YF" = ( +/obj/structure/table/rack, +/obj/item/clothing/suit/space/void/dominia/unathi, +/obj/item/clothing/head/helmet/space/void/dominia/unathi, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/mask/breath, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/obj/structure/window/reinforced{ + dir = 4; + icon_state = "rwindow" + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/door/window{ + dir = 2; + name = "Voidsuit Storage"; + req_access = list(212) + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"YH" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"YL" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/map_effect/marker/airlock/shuttle{ + cycle_to_external_air = 1; + master_tag = "airlock_kazhkz_shutle"; + name = "airlock_shutle_kazhkz"; + shuttle_tag = "Kazhkz Fighter"; + req_one_access = list(212) + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + dir = 8; + pixel_y = 6; + pixel_x = 20 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1 + }, +/obj/machinery/airlock_sensor{ + dir = 4; + pixel_x = -24; + pixel_y = -6 + }, +/obj/effect/map_effect/marker_helper/airlock/out, +/turf/simulated/floor/plating, +/area/shuttle/dominian_unathi) +"YT" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/canteen) +"YU" = ( +/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/ship/dominian_unathi/cic) +"YV" = ( +/obj/structure/bed, +/obj/structure/curtain/open/bed, +/obj/effect/floor_decal/corner/red{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"Zb" = ( +/obj/structure/cable/green{ + dir = 1 + }, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/machinery/power/apc/north{ + req_access = null + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"Zc" = ( +/obj/effect/floor_decal/corner/red{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) +"Zd" = ( +/obj/structure/closet/crate/loot, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi/storage) +"Zg" = ( +/obj/effect/floor_decal/corner/orange{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/bridge) +"Zi" = ( +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/bridge) +"Zj" = ( +/obj/structure/table/stone/marble, +/obj/effect/floor_decal/corner/green/diagonal, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/canteen) +"Zl" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/crew) +"Zp" = ( +/turf/simulated/wall, +/area/ship/dominian_unathi/toilet) +"Zs" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/door/firedoor/noid{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi) +"Zt" = ( +/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 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/ship/dominian_unathi) +"Zy" = ( +/turf/simulated/floor/reinforced/carbon_dioxide, +/area/ship/dominian_unathi/starboardthrust) +"ZG" = ( +/obj/structure/table/steel, +/obj/item/gun/energy/pistol/hegemony, +/obj/item/melee/hammer/powered/hegemony, +/obj/effect/floor_decal/corner/orange{ + dir = 5 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"ZJ" = ( +/obj/effect/landmark/entry_point/port{ + name = "port, auxiliary bridge" + }, +/turf/simulated/wall/shuttle/space_ship, +/area/ship/dominian_unathi/cic) +"ZK" = ( +/obj/structure/table/rack, +/obj/item/device/gps, +/obj/item/device/gps, +/obj/item/device/gps, +/obj/item/device/gps, +/obj/item/device/gps, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/eva) +"ZN" = ( +/obj/structure/ship_weapon_dummy, +/turf/template_noop, +/area/ship/dominian_unathi/gun) +"ZO" = ( +/obj/structure/table/steel, +/obj/item/gun/projectile/colt/super, +/obj/effect/floor_decal/corner/orange{ + dir = 10 + }, +/obj/structure/window/reinforced{ + dir = 1; + icon_state = "rwindow" + }, +/obj/structure/window/reinforced, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/loot) +"ZY" = ( +/obj/effect/floor_decal/corner/red{ + dir = 5 + }, +/obj/structure/closet/emcloset, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/ship/dominian_unathi/cic) + +(1,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +"} +(2,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(3,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(4,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(5,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(6,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(7,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(8,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(9,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(10,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(11,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(12,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(13,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(14,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(15,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(16,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(17,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +rM +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(18,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(19,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(20,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(21,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(22,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(23,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(24,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(25,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(26,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +VJ +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(27,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(28,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(29,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(30,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(31,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(32,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(33,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(34,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(35,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +aO +tq +"} +(36,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +tq +"} +(37,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(38,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(39,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(40,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(41,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(42,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(43,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(44,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(45,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(46,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(47,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(48,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(49,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(50,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(51,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(52,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(53,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +Wf +sz +sz +sz +wT +sz +sz +sz +MA +bo +CN +MA +MA +cP +Fj +cP +cP +cP +Un +Un +Gb +Un +Un +Un +pU +pU +pU +nm +pU +pU +pU +pU +pU +pU +pU +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(54,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +Wf +Gk +Gk +dK +Wa +lO +Lc +lO +tc +dK +yM +JZ +tR +pk +eN +bm +lV +lV +LQ +LQ +Dv +cZ +AW +cZ +Su +RX +Nd +cg +Wj +cg +Wj +Wj +Wj +Wj +pU +pU +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(55,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +wg +Wf +Gk +ek +Gk +Gk +dK +ua +nQ +nQ +nQ +Kq +dK +eN +Ge +Jd +Ge +eN +QP +Vh +Vh +QJ +LQ +EB +cZ +cZ +cZ +sR +RX +lg +Vd +Pp +Vd +fN +pU +cK +cK +pU +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(56,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +Wf +Wf +Gk +Gk +Gk +Td +wH +wH +dK +ZG +nQ +nQ +nQ +jE +dK +uW +Ge +Ge +ma +eN +IN +Vh +CD +LQ +LQ +dd +cZ +cZ +cZ +mZ +RX +lg +Vd +bT +Pi +cK +pU +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(57,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +fG +fG +Ls +Pj +gf +Hb +fH +DQ +dK +iv +nQ +nQ +nQ +ZO +dK +eN +Ge +Ge +Go +eN +QP +Vh +Vh +JO +LQ +Pq +cZ +cZ +cZ +cZ +RX +ON +Vd +eQ +vf +Ek +Dk +Nn +Nn +ru +ZN +xn +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(58,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +fG +fG +fG +fG +Ls +rq +MZ +Hb +IW +XG +dK +vu +nQ +nQ +nQ +mS +dK +SM +ow +Lt +Ge +eN +Ms +CL +CD +LQ +LQ +FY +RZ +Xf +cZ +cZ +TC +lg +Vd +fz +Ek +Ek +HP +Yb +Yb +yi +ZN +xn +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(59,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +fG +fG +OG +yR +Rf +Ls +SX +Vj +MG +fH +DQ +dK +vx +nU +Ht +wV +Uj +dK +nq +Ge +Us +nf +eN +QP +vA +MR +JO +LQ +fr +cZ +dy +FE +fr +RX +kA +FN +fz +dr +Ek +Dk +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(60,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +fG +Zd +gR +Rf +yR +Ls +PJ +IW +Kr +IW +PJ +dK +Ys +nQ +Qm +Kp +AB +dK +Ge +xt +SQ +FU +eN +UR +Bk +Zl +LQ +LQ +cR +cZ +hM +IA +Df +RX +Sa +ox +QF +pp +cK +oY +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(61,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +fG +fG +oN +gR +Rf +Rf +Ls +DQ +Vj +NJ +fH +DQ +dK +VN +nQ +Sx +nQ +iw +dK +yM +Wp +Dg +pk +eN +QP +Xg +Vh +JO +LQ +Wn +cZ +Ye +cZ +rz +RX +lS +Vd +TO +Vd +fN +pU +cK +cK +pU +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(62,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +fG +gy +gR +gR +Rf +eR +Ls +yt +PK +NJ +PK +kF +dK +EG +tl +TE +Kf +ol +dK +Ge +Vw +Dg +Ge +eN +xv +Xg +oI +LQ +LQ +fr +Vn +Ye +Vn +pZ +RX +ou +Fw +OR +Fw +OR +OR +OR +OR +pU +pU +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(63,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +fG +fG +gR +gR +gR +Zd +fG +Gk +Gk +Gk +rS +Gk +Gk +Pd +Pd +Pd +PY +Pd +Pd +Pd +Pd +Pd +bj +Pd +Pd +Pd +Mk +Pd +Pd +Pd +Pd +Pd +XT +Pd +Pd +Pd +kX +Pd +pU +pU +pU +pU +pU +pU +pU +pU +pU +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(64,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +HU +TL +TL +gN +TL +HU +RY +iq +cQ +iq +gt +VV +tC +rP +qJ +qJ +DT +rP +qJ +qJ +qJ +rP +DT +JP +Nc +rP +DT +qJ +rP +qJ +JP +qJ +DT +rP +qJ +qJ +DT +Pd +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(65,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +ue +ue +wg +Wf +Ar +lQ +gJ +VR +Ko +fF +HU +VE +uZ +ER +rv +li +Oe +nr +nr +nr +Af +az +nr +nr +nr +nr +nr +dO +yn +mj +nr +az +nr +nr +Iv +vw +pO +dO +nr +nr +nr +aI +xL +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(66,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +vg +GR +GR +Rd +RY +HU +qq +Gd +Gd +Jt +ot +bG +lu +Aw +tm +uZ +Ro +VV +cW +NR +NR +NR +hl +NR +NR +NR +NR +NR +Dj +JP +JT +NR +hl +Pd +Np +Np +SD +qg +Dj +uS +uS +uS +Pd +Pd +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(67,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +vg +GR +GR +vg +RY +HU +yl +Gd +Sg +gD +bJ +HU +QI +uZ +xN +uZ +Ro +RY +Pd +Pd +Pd +Pd +Pd +Pd +Pd +Pd +Pd +Pd +Pd +Pd +Pd +Pd +Pd +Pd +Np +Np +Pd +Pd +HC +HC +HC +HC +Pd +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(68,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +vg +vg +GR +GR +vg +vg +vg +vg +vg +vg +vg +vg +vg +QY +uZ +xN +uZ +pu +RY +Pd +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Pd +Np +Np +Pd +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(69,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +vg +qG +GR +GR +qG +nZ +tw +Jb +Tv +km +dm +um +vg +QI +uZ +xN +uZ +Ro +RY +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Pd +Np +Np +Pd +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(70,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +oH +qs +GR +bx +yK +wN +oW +zG +GR +Gr +Zy +Zy +vg +UB +uZ +xN +uZ +VA +RY +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +wg +Wf +Wf +Wf +ue +ue +ue +ue +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(71,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +oH +dv +GR +le +le +zJ +er +lB +GR +vg +vg +vg +vg +QI +VB +xN +BB +Ro +RY +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +wg +wg +Wf +Wf +wg +wg +wg +wg +ue +ue +ue +ue +ue +ue +ue +ue +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(72,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +VZ +ei +GR +GR +GR +Dr +zb +Ni +Ft +Xq +Ft +KT +vg +QY +FW +sI +EH +pu +RY +Wf +Wf +Wf +wg +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +ue +ue +ue +ue +ue +Wf +Wf +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(73,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +oH +JW +xF +oF +yT +eq +Bm +yu +GR +WF +Kd +BI +vg +QI +pz +qO +vi +Ro +RY +Wf +Wf +Wf +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +ue +ue +ue +Wf +Wf +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(74,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +vg +Km +sg +vM +QW +tn +Lu +wf +GR +rG +sE +GG +vg +QI +BB +xN +iH +Ro +RY +HH +Wf +nP +Uc +tP +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +ue +ue +wg +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(75,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +vg +vg +vg +vg +vg +vg +iV +GR +GR +rG +Dm +Lv +vg +sF +uZ +xN +uZ +rR +HH +HH +HH +HH +Uc +HH +HH +HH +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Wf +Wf +Wf +wg +Wf +wg +wg +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(76,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +Wf +Wf +vg +jp +GR +en +rG +Dm +Dm +vg +Zs +VX +yG +VX +We +HH +Cs +Jw +nP +Uc +nP +Jw +XZ +Zi +XA +uA +DA +Dx +sM +sM +sM +Zi +Zi +wg +wg +Wf +wg +wg +wg +Wf +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(77,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +QM +QM +QM +QM +yY +QM +QM +QM +QM +QM +QM +QI +uZ +xN +uZ +Ro +HH +CF +SF +SF +FP +Jw +Tf +Zi +Zi +EC +jr +jr +jr +jr +jr +Zi +Zi +Wf +Wf +wg +wg +wg +Wf +Wf +Wf +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(78,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +QM +QM +Pg +Kn +Hi +hO +Ck +th +jA +TB +uD +QM +QI +uZ +xN +uZ +Ro +HH +gc +Jw +Jw +Jw +XZ +Zi +Zi +Up +lI +ex +wu +wu +pe +Zi +Zi +PR +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +xs +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(79,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +ke +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +QM +QM +QQ +ee +Ea +JF +TH +Ke +sT +sT +sT +sT +QM +QI +uZ +xN +uZ +Ro +HH +cX +Kk +Kk +Op +Zi +Zi +an +lI +ex +Ff +Ao +im +np +CI +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(80,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +QM +QM +TZ +AO +ee +Gm +oL +hO +Ke +sT +rb +sT +sT +QM +Ny +uZ +xN +uZ +uZ +zU +Jw +Jw +Jw +Jw +jI +sM +sM +sM +No +Nx +Lz +RC +np +Eh +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(81,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wv +oE +Hx +dE +US +MP +Ke +Io +Mh +Mh +Fe +Mh +Mh +EN +pG +rv +qB +Ma +Ma +Dw +DK +CX +Ai +wb +yB +AD +AD +qk +Sw +uT +Lz +RQ +np +CI +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(82,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +QM +QM +TZ +AO +ee +fE +Ke +mQ +Ke +sT +Dd +sT +Nw +QM +ao +uZ +xN +uZ +Ro +HH +WR +Gc +Ly +oD +Zi +Zi +jK +Sc +mF +Qd +Tj +PO +np +CI +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +wg +wg +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(83,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +QM +QM +QQ +ee +TV +JC +mQ +Ke +sT +sT +si +Kn +QM +QI +uZ +xN +uZ +Ro +HH +gc +Jw +Jw +Jw +Rb +Zi +Zi +Ti +Zg +vF +sM +sM +bE +Zi +Zi +Yt +Wf +Wf +Wf +Wf +wg +wg +wg +Wf +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(84,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +QM +QM +Pg +sx +XX +GN +Bl +IF +Ea +Kx +Ea +QM +QY +uZ +xN +uZ +pu +HH +iG +SF +rO +XD +Jw +mK +Zi +Zi +EC +aN +jr +jr +jr +jr +Zi +Zi +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(85,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +QM +QM +QM +QM +qe +QM +QM +QM +QM +QM +QM +VX +VX +yG +VX +VX +HH +dY +Jw +nP +Uc +XV +Jw +Rb +Zi +hk +Ju +ss +AQ +wu +wu +wu +Zi +Zi +wg +wg +Wf +wg +Wf +Wf +Wf +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(86,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +Wf +Wf +gF +Qx +IR +nv +Bx +Az +Az +gF +UB +uZ +xN +uZ +VA +HH +HH +HH +HH +Uc +HH +HH +HH +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Zi +Wf +wg +wg +wg +Wf +Wf +Wf +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(87,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +gF +gF +gF +gF +gF +gF +Xb +nv +nv +Ct +tI +lL +gF +QI +iH +xN +BB +Ro +RY +HH +Wf +nP +Uc +nP +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +ue +ue +wg +wg +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(88,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +gF +sD +sy +Bt +hs +KE +SC +GE +pL +pL +uI +nv +gF +QY +pz +qO +vi +pu +RY +Wf +Wf +Wf +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +ue +ue +ue +Wf +Wf +Wf +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(89,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +fx +cs +nv +Hk +zF +ps +XM +kO +uR +nS +Qv +nv +gF +QI +FW +sI +EH +Ro +RY +Wf +Wf +Wf +wg +wg +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +wg +Wf +Wf +wg +ue +ue +ue +ue +ue +Wf +Wf +Wf +Wf +wg +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(90,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +hN +cs +nv +nv +nv +nv +nv +AI +nv +nv +zh +nv +gF +QI +BB +xN +iH +Ro +wO +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +wg +Wf +Wf +wg +wg +wg +Wf +Wf +wg +ue +ue +ue +ue +ue +ue +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(91,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +fx +cs +nv +nv +nv +nv +nv +Ab +nv +nv +xD +nv +gF +sF +uZ +xN +uZ +rR +RY +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +wg +Wf +Wf +Wf +Wf +Wf +ue +ue +ue +ue +ue +ue +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(92,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +fx +Xz +gF +qn +gF +nv +nF +Tk +ky +nv +fY +ti +gF +QY +uZ +xN +uZ +pu +RY +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +UC +GX +GX +In +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(93,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +gF +nv +gF +cl +gF +Jy +dZ +Xx +Xx +Jy +Ki +BZ +gF +QI +uZ +xN +uZ +Ro +RY +UC +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +UC +GX +GX +UC +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(94,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +gF +QI +uZ +xN +uZ +Ro +RY +UC +UC +UC +UC +UC +UC +UC +UC +UC +UC +UC +UC +UC +UC +UC +UC +UC +UC +GX +GX +UC +UC +Ig +Ig +Ig +Ig +Ig +Ig +Ig +Ig +Ig +UC +Wf +Wf +Wf +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(95,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +Wf +Wf +Wf +Wf +Wf +jP +Nv +Gz +cr +Ax +av +jP +QI +uZ +xN +uZ +Ro +VV +Iq +hQ +hQ +hQ +Tt +hQ +WU +IS +hQ +DP +hQ +hQ +hQ +hQ +hQ +Tt +wL +UC +GX +GX +UC +DP +hQ +hQ +hQ +hQ +hQ +hQ +hQ +hQ +tp +UC +UC +UC +UC +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(96,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +Wf +Wf +Wf +jP +qD +ql +qZ +ik +UI +mE +BV +cn +Tu +Zt +rv +Oe +VF +VF +VF +VF +vd +VF +nC +CB +VF +ay +VF +VF +VF +VF +VF +vd +xz +VH +VH +Rk +nC +ay +VF +VF +VF +VF +Wr +hF +hF +hF +Xn +hQ +hQ +tp +UC +UC +UC +VC +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(97,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +Wf +Wf +Wf +jP +jP +jP +LO +CK +jP +RY +XH +YH +wW +Qf +VV +eL +WW +WW +EQ +aq +WW +Ak +CH +WW +aq +EQ +WW +WW +EQ +WW +aq +WW +WW +EQ +WW +WU +aq +WW +EQ +WW +WW +aq +WW +WW +WW +WW +WW +WW +WW +LR +LR +LR +UC +UC +UC +UC +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(98,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +wg +dQ +FH +ik +Au +FK +un +DI +DI +DI +sw +DI +DI +DI +xu +xu +xu +vh +xu +TF +TF +TF +ft +TF +TF +YT +YT +YT +GV +YT +YT +IB +IB +IB +KF +IB +IB +IB +Iy +pd +Iy +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(99,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +jP +VP +AA +ik +ik +dx +Zp +zj +em +aj +em +Zp +Zp +xu +LY +Zc +xQ +LP +kW +kx +kx +qm +kx +kx +EV +pW +pW +Vp +pW +pW +gY +jL +eZ +aR +eZ +Yh +gY +zW +wt +zW +BQ +BQ +BQ +zW +zW +zW +zW +zW +zW +BQ +BQ +BQ +zW +Rr +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(100,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +jP +jP +yb +GK +SJ +yb +Zp +zj +OH +aj +OH +Rq +Gt +xu +ZY +CA +YU +zA +kW +vq +kx +qm +kx +gh +EV +Mn +pW +Vp +pW +vT +gY +PE +nd +dL +nd +ZK +gY +cI +wt +Bi +CT +iD +BQ +BQ +BQ +BQ +yq +BQ +oA +oA +kQ +mH +vV +Rr +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(101,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +jP +jP +da +ik +da +Zp +zj +gV +VY +zQ +Zp +Zp +xu +ho +Qe +RI +YV +kW +Je +mr +qH +Je +Je +EV +pW +Tq +JX +AN +eS +gY +NL +kT +WD +nd +Xt +sq +BJ +GT +RW +SP +UF +GY +gw +wp +FI +eg +YB +LU +BQ +BQ +BQ +zW +Rr +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(102,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +jP +Cy +Vv +ki +Zp +zj +OH +OH +OH +lx +fk +xu +Vr +Aj +ut +Fi +kW +rN +lU +ad +kx +kx +EV +Fq +Ta +oq +AN +eS +gY +Zb +CY +xM +nd +qv +gY +EO +oo +bY +BQ +BQ +BQ +rH +jU +yp +Fv +Yw +ae +iC +CU +RS +zW +Rr +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(103,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +jP +jP +jP +Zp +zj +Sq +LW +gO +Zp +Zp +xu +cL +CA +CA +Oi +kW +Je +Je +gu +fq +Je +EV +Mn +eS +AN +AN +cF +gY +Xh +nd +nd +nd +vR +gY +Ur +Xj +Yn +YL +Wm +Fb +OD +yh +mt +sl +Fc +sl +Bf +Hy +vW +zW +cp +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(104,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +jP +DI +Zp +Zp +Zp +Zp +Zp +Zp +xu +JH +CA +CA +Aa +kW +gd +kx +XJ +kx +gh +EV +Wu +pW +pW +pW +pW +gY +YF +nd +nd +nd +zB +gY +zW +zW +BQ +BQ +BQ +BQ +uC +ip +Vc +sl +sl +wE +zL +OS +RS +zW +Rr +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(105,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +wg +Wf +Wf +DI +xE +Yc +Yc +Yc +Yc +xu +GS +CA +UA +Oi +kW +kx +kx +XJ +kx +kx +EV +pW +Zj +Zj +Zj +Im +gY +YF +nd +nd +nd +lv +gY +zW +zW +zW +JN +zO +jR +pN +Aq +GZ +FA +rX +ac +BQ +BQ +BQ +zW +Rr +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(106,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +wg +Wf +DI +DI +Yc +Yc +xu +iX +sj +sj +Ln +kW +kx +xc +FO +HA +kx +EV +ly +QX +QX +QX +gx +gY +Xh +nd +nd +nd +kJ +gY +cI +zW +zW +CT +mp +BQ +BQ +BQ +BQ +yV +BQ +BQ +BQ +CR +AT +zW +Rr +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(107,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +Wf +Wf +Wf +DI +DI +xu +Yo +CE +hi +Si +kW +vq +kx +jz +kx +zf +EV +Ej +DD +lz +Qh +Mb +gY +dF +oP +oP +oP +eo +gY +zW +zW +zW +BQ +BQ +BQ +zW +zW +zW +zW +zW +zW +BQ +BQ +BQ +zW +Rr +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(108,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +Wf +Wf +Wf +xu +xu +ZJ +xu +xu +TF +TF +TF +WY +TF +TF +YT +YT +lN +YT +YT +YT +IB +IB +IB +SH +IB +IB +IB +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +Tn +IZ +IZ +IZ +IZ +IZ +IZ +IZ +IZ +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(109,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +wg +wg +wg +wg +wg +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(110,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(111,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(112,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(113,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(114,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(115,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(116,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(117,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(118,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(119,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(120,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(121,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(122,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(123,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(124,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(125,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(126,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(127,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(128,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(129,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(130,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(131,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(132,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(133,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(134,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +kc +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(135,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(136,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(137,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(138,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(139,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(140,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(141,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(142,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(143,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(144,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(145,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(146,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(147,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(148,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(149,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(150,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(151,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(152,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(153,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(154,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(155,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(156,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(157,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(158,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(159,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} +(160,1,1) = {" +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +Wf +"} diff --git a/maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer_areas.dm b/maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer_areas.dm new file mode 100644 index 00000000000..a8faeb4c07c --- /dev/null +++ b/maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer_areas.dm @@ -0,0 +1,96 @@ +/area/ship/dominian_unathi + name = "Kazhkz Privateer Ship - Main Hall" + icon_state = "red" + +/area/ship/dominian_unathi/bridge + name = "Kazhkz Privateer Ship - Bridge" + icon_state = "bridge" + +/area/ship/dominian_unathi/bridgefoyer + name = "Kazhkz Privateer Ship - Bridge Foyer" + icon_state = "bridge" + +/area/ship/dominian_unathi/engineering + name = "Kazhkz Privateer Ship - Engineering" + icon_state = "engineering" + +/area/ship/dominian_unathi/portthrust + name = "Kazhkz Privateer Ship - Port Nacelle" + icon_state = "engine" + +/area/ship/dominian_unathi/starboardthrust + name = "Kazhkz Privateer Ship - Starboard Nacelle" + icon_state = "engine" + +/area/ship/dominian_unathi/porthall + name = "Kazhkz Privateer Ship - Port Hall" + +/area/ship/dominian_unathi/starboardhall + name = "Kazhkz Privateer Ship - Starboard Hall" + +/area/ship/dominian_unathi/armory + name = "Kazhkz Privateer Ship - Armory & Ammo Storage" + icon_state = "armory" + +/area/ship/dominian_unathi/eva + name = "Kazhkz Privateer Ship - EVA Storage" + icon_state = "eva" + +/area/ship/dominian_unathi/hangar + name = "Kazhkz Privateer Ship - Hangar" + icon_state = "exit" + +/area/ship/dominian_unathi/gun + name = "Kazhkz Privateer Ship - Main Gun" + icon_state = "Tactical" + +/area/ship/dominian_unathi/chapel + name = "Kazhkz Privateer Ship - Chapel" + icon_state = "chapel" + +/area/ship/dominian_unathi/crew + name = "Kazhkz Privateer Ship - Crew Quarters" + icon_state = "crew_quarters" + +/area/ship/dominian_unathi/captain + name = "Kazhkz Privateer Ship - Captain's Quarters" + icon_state = "captain" + sound_env = SMALL_SOFTFLOOR + +/area/ship/dominian_unathi/canteen + name = "Kazhkz Privateer Ship - Canteen" + icon_state = "kitchen" + +/area/ship/dominian_unathi/cic + name = "Kazhkz Privateer Ship - CIC" + icon_state = "Tactical" + +/area/ship/dominian_unathi/loot + name = "Kazhkz Privateer Ship - Treasure Room" + icon_state = "raider" + +/area/ship/dominian_unathi/med + name = "Kazhkz Privateer Ship - Medical Bay" + icon_state = "medbay" + +/area/ship/dominian_unathi/pods + name = "Kazhkz Privateer Ship - Boarding Pods" + icon_state = "blue" + +/area/ship/dominian_unathi/janitor + name = "Kazhkz Privateer Ship - Custodial Closet" + icon_state = "janitor" + +/area/ship/dominian_unathi/toilet + name = "Kazhkz Privateer Ship - Head" + icon_state = "toilet" + sound_env = SMALL_ENCLOSED + +/area/ship/dominian_unathi/storage + name = "Kazhkz Privateer Ship - Storeroom" + icon_state = "storage" + sound_env = SMALL_ENCLOSED + +//Shuttle +/area/shuttle/dominian_unathi + name = "Kazhkz Privateer Fighter" diff --git a/maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer_ghostroles.dm b/maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer_ghostroles.dm new file mode 100644 index 00000000000..1608af0fd9c --- /dev/null +++ b/maps/away/ships/dominia/dominian_unathi_privateer/dominian_unathi_privateer_ghostroles.dm @@ -0,0 +1,67 @@ +/datum/ghostspawner/human/kazhkz_privateer + short_name = "kazhkz_privateer" + name = "House Kazhkz Privateer" + desc = "You are a privateer of the Dominian Great House Kazhkz - sent into the Badlands to pillage and harass the enemies of the Empire and the Kazhkz-Han'san. Vessels of the Serene Republic of Elyra, the Coalition of Colonies, and the Izweski Hegemony are particularly prized targets by the Kazhkz. NOT AN ANTAGONIST! Do not act as such." + tags = list("External") + mob_name_suffix = " Kazhkz" + mob_name_pick_message = "Pick an Unathi first name." + spawnpoints = list("kazhkz_privateer") + max_count = 4 + + outfit = /datum/outfit/admin/kazhkz_privateer + possible_species = list(SPECIES_UNATHI) + allow_appearance_change = APPEARANCE_PLASTICSURGERY + + assigned_role = "Kazhkz Privateer" + special_role = "Kazhkz Privateer" + respawn_flag = null + extra_languages = list(LANGUAGE_UNATHI, LANGUAGE_AZAZIBA) + uses_species_whitelist = FALSE + welcome_message = "You are a privateer of the Kazhkz Fleet - a plausibly deniable weapon of the Empire of Dominia, sent to scourge the Emperor's enemies in the Sparring Sea and Badlands. Though the two empires are not enemies, the Kazhkz bear a particular enemy for the Izweski Hegemony, and will often attack their vessels. The Unathi in Dominia wiki page may have some useful information for roleplaying a Kazhkz privateer." + +/datum/outfit/admin/kazhkz_privateer + name = "Kazhkz Privateer" + uniform = /obj/item/clothing/under/unathi + suit = /obj/item/clothing/accessory/poncho/dominia_cape/kazhkz + belt = /obj/item/melee/energy/sword/pirate + shoes = /obj/item/clothing/shoes/sandals/caligae + id = /obj/item/card/id + back = /obj/item/storage/backpack/satchel + l_ear = /obj/item/device/radio/headset/ship + + backpack_contents = list( + /obj/item/storage/box/survival = 1, + /obj/item/storage/box/donkpockets = 1, + /obj/item/device/versebook/tribunal = 1, + /obj/item/shield/energy/dominia = 1 + ) + +/datum/outfit/admin/kazhkz_privateer/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + var/uniform_colour = pick("#540e06", "#ab7318", "#302d26") + if(H?.w_uniform) + H.w_uniform.color = uniform_colour + +/datum/outfit/admin/kazhkz_privateer/get_id_access() + return list(access_imperial_fleet_voidsman_ship, access_external_airlocks) + +/datum/ghostspawner/human/kazhkz_privateer/captain + short_name = "kazhkz_privateer_captain" + name = "House Kazhkz Privateer Captain" + desc = "You are a captain of the Dominian Great House Kazhkz - placed in command of a vessel and sent into the Badlands to pillage and harass the enemies of the Empire and the Kazhkz-Han'san. Vessels of the Serene Republic of Elyra, the Coalition of Colonies, and the Izweski Hegemony are particularly prized targets by the Kazhkz. NOT AN ANTAGONIST! Do not act as such." + tags = list("External") + mob_name_suffix = " Kazhkz" + mob_name_pick_message = "Pick an Unathi first name." + spawnpoints = list("kazhkz_privateer_captain") + max_count = 1 + assigned_role = "Kazhkz Privateer Captain" + special_role = "Kazhkz Privateer Captain" + uses_species_whitelist = TRUE + outfit = /datum/outfit/admin/kazhkz_privateer/captain + +/datum/outfit/admin/kazhkz_privateer/captain + name = "Kazhkz Privateer Captain" + uniform = /obj/item/clothing/under/dominia/imperial_suit/kazhkz + +/datum/outfit/admin/kazhkz_privateer/captain/post_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() From f845f6fdf7aab6b249ab25d39e3449cce57d5885 Mon Sep 17 00:00:00 2001 From: AuroraBuildBot Date: Mon, 20 Nov 2023 20:41:49 +0000 Subject: [PATCH 27/32] Automatic Changelog compile [ci skip] --- html/changelog.html | 4 ++ html/changelogs/.all_changelog.yml | 2 + html/changelogs/RustingWithYou - yohoho.yml | 41 --------------------- 3 files changed, 6 insertions(+), 41 deletions(-) delete mode 100644 html/changelogs/RustingWithYou - yohoho.yml diff --git a/html/changelog.html b/html/changelog.html index 1014be91e2b..12e605c5ada 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -83,6 +83,10 @@

          Pirouette, StevIII updated:

          • Added a Lunan banner, flag, and flagpatch to loadout.
          +

          RustingWithYou updated:

          +
            +
          • Adds a House Kazhkz privateer ship, complete with ghostroles.
          • +

          SleepyGemmy updated:

          • Fixed some security badges not being named after the actual roles.
          • diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 1bff8dcd59f..de56a6c2d4d 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -32213,6 +32213,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. as Central- or South America. Pirouette, StevIII: - imageadd: Added a Lunan banner, flag, and flagpatch to loadout. + RustingWithYou: + - rscadd: Adds a House Kazhkz privateer ship, complete with ghostroles. SleepyGemmy: - bugfix: Fixed some security badges not being named after the actual roles. - maptweak: Polished and tweaked xenobiology. diff --git a/html/changelogs/RustingWithYou - yohoho.yml b/html/changelogs/RustingWithYou - yohoho.yml deleted file mode 100644 index 1ccec64c0c7..00000000000 --- a/html/changelogs/RustingWithYou - yohoho.yml +++ /dev/null @@ -1,41 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -# balance -# admin -# backend -# security -# refactor -################################# - -# Your name. -author: RustingWithYou - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - rscadd: "Adds a House Kazhkz privateer ship, complete with ghostroles." From 420196081130d90e617e801614571dfac0e4dae9 Mon Sep 17 00:00:00 2001 From: DreamySkrell <107256943+DreamySkrell@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:29:26 +0100 Subject: [PATCH 28/32] Bottom deck AI core gone (#17744) * hmm * o * c * a * a2 * o * wtf * tests rerun please * areas.... * tests rerun please * o --------- Co-authored-by: DreamySkrell <> --- .../DreamySkrell-bottom-deck-ai-gone.yml | 41 + maps/sccv_horizon/sccv_horizon-1_deck_1.dmm | 803 ++++++++---------- maps/sccv_horizon/sccv_horizon-2_deck_2.dmm | 159 ++-- 3 files changed, 482 insertions(+), 521 deletions(-) create mode 100644 html/changelogs/DreamySkrell-bottom-deck-ai-gone.yml diff --git a/html/changelogs/DreamySkrell-bottom-deck-ai-gone.yml b/html/changelogs/DreamySkrell-bottom-deck-ai-gone.yml new file mode 100644 index 00000000000..dbd5051ef51 --- /dev/null +++ b/html/changelogs/DreamySkrell-bottom-deck-ai-gone.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: DreamySkrell + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - maptweak: "Removes bottom deck AI core area, replacing it with general maintenance rooms." diff --git a/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm b/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm index 270ee5e1c71..3cfaa5b997c 100644 --- a/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm +++ b/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm @@ -220,13 +220,10 @@ /turf/simulated/floor/tiled, /area/assembly/chargebay) "ajM" = ( -/obj/machinery/cryopod/robot, -/obj/machinery/computer/cryopod/robot{ - pixel_y = 32 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) +/obj/structure/lattice/catwalk/indoor/grate, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "akw" = ( /obj/machinery/atmospherics/binary/passive_gate{ dir = 8; @@ -760,25 +757,15 @@ /turf/simulated/floor/lino, /area/shuttle/intrepid/crew_compartment) "aFA" = ( -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoor0"; - id = "AICore"; - name = "AI core maintenance hatch"; - opacity = 0 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, -/obj/machinery/door/airlock/external{ - dir = 1; - frequency = 1380; - icon_state = "door_locked"; - id_tag = "ai_core_inner"; - locked = 1; - name = "Inner Core Airlock"; - req_access = list(13) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, -/turf/simulated/floor/plating/cooled, -/area/turret_protected/ai) +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "aFN" = ( /obj/machinery/camera/network/research{ c_tag = "Research - Exotic Energies Harvesting"; @@ -1191,17 +1178,17 @@ dir = 2; icon_state = "pipe-c" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, /obj/structure/cable{ icon_state = "4-8" }, /obj/structure/cable{ icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 }, /turf/simulated/floor/plating, /area/maintenance/research_port) @@ -1468,10 +1455,12 @@ /turf/simulated/floor/plating, /area/maintenance/research_port) "ben" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/mob/living/silicon/robot/shell, -/turf/simulated/floor/reinforced, -/area/turret_protected/ai) +/obj/structure/lattice/catwalk/indoor/grate/damaged, +/obj/machinery/light/small/emergency{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "beu" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 4 @@ -1696,10 +1685,12 @@ /turf/space/dynamic, /area/horizon/exterior) "boN" = ( -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/porta_turret, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) +/obj/structure/lattice/catwalk/indoor/grate, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "boY" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 9 @@ -2124,18 +2115,14 @@ /turf/simulated/floor/tiled, /area/hallway/primary/aft) "bBL" = ( -/obj/machinery/door/airlock/external{ - dir = 1; - frequency = 1380; - icon_state = "door_locked"; - id_tag = "ai_core_outer"; - locked = 1; - name = "Outer Core Airlock"; - req_access = list(13) +/obj/machinery/light/small/emergency{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating/cooled, -/area/turret_protected/ai) +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "bBR" = ( /obj/machinery/computer/general_air_control/large_tank_control{ input_tag = "ph_in"; @@ -2728,11 +2715,11 @@ /turf/simulated/floor/plating, /area/maintenance/engineering) "bVh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "bVo" = ( /obj/structure/shuttle_part/scc/research{ icon_state = "3,22"; @@ -2894,6 +2881,8 @@ icon_state = "1-2" }, /obj/structure/lattice/catwalk/indoor/grate, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/maintenance/research_port) "cda" = ( @@ -3691,6 +3680,12 @@ "cDa" = ( /obj/random/junk, /obj/structure/lattice/catwalk/indoor/grate, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/research_port) "cEf" = ( @@ -4125,25 +4120,16 @@ /turf/simulated/floor/plating, /area/maintenance/engineering) "cTj" = ( -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/porta_turret, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/cooled, -/area/turret_protected/ai) +/turf/simulated/floor/tiled/dark, +/area/maintenance/research_port) "cTm" = ( /obj/machinery/portable_atmospherics/canister/air/airlock, /obj/machinery/atmospherics/portables_connector{ dir = 1 }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, -/obj/structure/window/reinforced, /turf/simulated/floor/plating, /area/maintenance/research_port) "cTs" = ( @@ -5071,10 +5057,13 @@ /turf/simulated/floor/tiled, /area/horizon/hydroponics/lower) "dEe" = ( -/obj/machinery/recharge_station, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) +/obj/effect/floor_decal/industrial/outline/grey, +/obj/structure/closet, +/obj/random/colored_jumpsuit, +/obj/random/backpack, +/obj/random/loot, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "dEl" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -6845,15 +6834,11 @@ /turf/simulated/floor/tiled/dark, /area/engineering/atmos) "eNY" = ( -/obj/structure/ladder/up{ - pixel_y = 16 - }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 +/obj/structure/table/standard{ + no_cargo = 1 }, -/turf/simulated/floor/tiled/dark/cooled, -/area/turret_protected/ai) +/turf/simulated/floor/plating, +/area/maintenance/research_port) "eOk" = ( /obj/structure/cable{ icon_state = "1-2" @@ -6978,9 +6963,12 @@ /turf/simulated/floor/tiled/dark, /area/engineering/atmos/propulsion/starboard) "eTx" = ( -/obj/structure/stairs/east, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) +/obj/structure/closet/crate/trashcart, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/random/junk, +/obj/random/junk, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "eTJ" = ( /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 8 @@ -7119,6 +7107,12 @@ icon_state = "1-2" }, /obj/structure/lattice/catwalk/indoor/grate, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, /turf/simulated/floor/plating, /area/maintenance/research_port) "eXn" = ( @@ -8649,18 +8643,12 @@ /turf/simulated/floor/tiled/dark, /area/hangar/intrepid) "fVh" = ( -/obj/item/modular_computer/console/preset/ai{ - dir = 1 - }, -/obj/machinery/light/small/emergency{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 }, -/turf/simulated/floor/tiled/dark/cooled, -/area/turret_protected/ai) +/obj/machinery/portable_atmospherics/canister/empty, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "fVm" = ( /obj/structure/closet/hazmat/custodial, /obj/structure/railing/mapped{ @@ -8774,12 +8762,9 @@ /turf/simulated/floor/plating, /area/shuttle/intrepid/engine_compartment) "fYt" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/alarm/south, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "fZr" = ( /obj/effect/floor_decal/industrial/hatch/red, /obj/effect/floor_decal/industrial/warning{ @@ -9010,6 +8995,12 @@ /obj/machinery/door/airlock/maintenance_hatch{ 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/maintenance/research_port) "ggQ" = ( @@ -9323,9 +9314,15 @@ /turf/template_noop, /area/engineering/atmos/propulsion/starboard) "gsG" = ( -/obj/structure/lattice/catwalk/indoor/grate, -/turf/simulated/floor/plating/cooled, -/area/turret_protected/ai) +/obj/structure/table/standard{ + no_cargo = 1 + }, +/obj/item/stack/material/steel/full{ + pixel_y = 15; + pixel_x = 2 + }, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "gtE" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -9521,14 +9518,8 @@ "gyD" = ( /obj/machinery/portable_atmospherics/canister/air/airlock, /obj/machinery/atmospherics/portables_connector, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 +/obj/effect/floor_decal/industrial/warning{ + dir = 10 }, /turf/simulated/floor/plating, /area/maintenance/research_port) @@ -10229,7 +10220,6 @@ /turf/simulated/floor/plating, /area/maintenance/substation/research_sublevel) "haI" = ( -/obj/structure/lattice/catwalk/indoor/grate, /obj/machinery/light/small/emergency{ dir = 1 }, @@ -10440,9 +10430,11 @@ /turf/simulated/floor/tiled/dark, /area/security/checkpoint) "hgR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 +/obj/machinery/door/airlock/maintenance_hatch{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 4 }, /turf/simulated/floor/plating, /area/maintenance/research_port) @@ -11476,12 +11468,6 @@ /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark, /area/hangar/intrepid) -"hUt" = ( -/obj/machinery/portable_atmospherics/canister/air/airlock, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) "hUC" = ( /obj/effect/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/manifold/visible/yellow, @@ -11546,6 +11532,12 @@ icon_state = "1-8" }, /obj/structure/lattice/catwalk/indoor/grate, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/research_port) "hXq" = ( @@ -11696,6 +11688,14 @@ }, /turf/simulated/floor/plating, /area/engineering/atmos/air) +"ieH" = ( +/obj/machinery/light/small/emergency{ + dir = 4 + }, +/obj/structure/reagent_dispensers/watertank, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "ieW" = ( /obj/machinery/light{ dir = 8 @@ -12893,6 +12893,12 @@ /obj/structure/cable{ 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/maintenance/research_port) "iYT" = ( @@ -13603,16 +13609,11 @@ /turf/simulated/floor/reinforced/airmix, /area/engineering/atmos/air) "jyg" = ( -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/porta_turret, -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/cooled, -/area/turret_protected/ai) +/obj/structure/trash_pile, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/alarm/north, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "jyn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 5 @@ -13685,6 +13686,12 @@ /obj/structure/cable{ 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/maintenance/research_port) "jAw" = ( @@ -13724,24 +13731,13 @@ /turf/simulated/floor/plating, /area/turbolift/primary/deck_1) "jBX" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "ai_core_airlock"; - name = "interior access button"; - pixel_x = 25; - pixel_y = -25; - req_access = list(13) - }, -/obj/machinery/airlock_sensor/airlock_interior{ - frequency = 1380; - id_tag = "ai_core_sensor_interior"; - pixel_x = -25; - pixel_y = -25 +/obj/structure/table/rack, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled/dark/cooled, -/area/turret_protected/ai) +/obj/random/tool, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "jCf" = ( /obj/machinery/light/small/emergency, /obj/effect/floor_decal/industrial/warning{ @@ -16890,16 +16886,11 @@ /turf/simulated/open/airless, /area/template_noop) "lPL" = ( -/obj/item/modular_computer/console/preset/ai, -/obj/machinery/light/small/emergency{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark/cooled, -/area/turret_protected/ai) +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/effect/decal/cleanable/cobweb2, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "lPP" = ( /obj/structure/tank_wall/hydrogen{ density = 0; @@ -17591,10 +17582,12 @@ /turf/simulated/floor/tiled/dark/full, /area/outpost/mining_main/eva) "mkW" = ( -/obj/machinery/mech_recharger, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) +/obj/structure/closet/crate, +/obj/random/junk, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/alarm/north, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "mlc" = ( /turf/unsimulated/wall/fakepdoor{ dir = 4 @@ -18650,16 +18643,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/research_port) -"mVo" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/camera/network/command{ - c_tag = "AI Core - First Deck Chamber"; - dir = 4 - }, -/turf/simulated/floor/tiled/dark/cooled, -/area/turret_protected/ai) "mVJ" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -19229,16 +19212,15 @@ /turf/simulated/floor/shuttle/dark_blue, /area/shuttle/escape_pod/pod2) "npz" = ( -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/porta_turret, -/obj/structure/railing/mapped{ - dir = 8 +/obj/structure/table/standard{ + no_cargo = 1 }, -/obj/structure/railing/mapped{ - dir = 4 +/obj/random/glowstick{ + pixel_x = 20; + pixel_y = 4 }, -/turf/simulated/floor/tiled/dark/cooled, -/area/turret_protected/ai) +/turf/simulated/floor/plating, +/area/maintenance/research_port) "nqp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -19716,14 +19698,9 @@ /turf/simulated/wall/shuttle/scc_space_ship/cardinal, /area/hangar/auxiliary) "nCI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) +/obj/structure/girder, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "nCV" = ( /turf/simulated/floor/tiled, /area/operations/storage) @@ -19753,7 +19730,7 @@ name = "port, atmospherics" }, /turf/simulated/wall/shuttle/scc_space_ship/cardinal, -/area/turret_protected/ai) +/area/maintenance/research_port) "nEm" = ( /turf/simulated/wall/shuttle/scc_space_ship/cardinal, /area/horizon/custodial/disposals) @@ -21148,8 +21125,11 @@ /turf/simulated/floor/plating, /area/maintenance/engineering) "oFy" = ( -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/closet/crate, +/obj/random/loot, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "oFA" = ( /obj/structure/cable/green, /obj/structure/cable/green{ @@ -21696,9 +21676,6 @@ }, /turf/simulated/floor/carpet/rubber, /area/shuttle/intrepid/crew_compartment) -"pdC" = ( -/turf/simulated/wall/r_wall, -/area/turret_protected/ai_upload) "pdL" = ( /obj/effect/floor_decal/corner/dark_green/full{ dir = 1 @@ -23393,6 +23370,16 @@ /obj/effect/floor_decal/corner/dark_green/full, /turf/simulated/floor/tiled, /area/hallway/primary/aft) +"qiG" = ( +/obj/machinery/light/small/emergency{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/empty, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "qiZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -24297,11 +24284,8 @@ /turf/simulated/floor/tiled/dark, /area/security/checkpoint) "qPV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark/cooled, -/area/turret_protected/ai) +/turf/simulated/floor/plating, +/area/maintenance/research_port) "qQa" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/light/small{ @@ -24564,9 +24548,6 @@ }, /turf/simulated/floor/plating, /area/engineering/atmos/air) -"qZp" = ( -/turf/simulated/wall/shuttle/scc_space_ship/cardinal, -/area/turret_protected/ai) "qZx" = ( /obj/structure/ladder/up{ pixel_y = 10 @@ -25192,10 +25173,6 @@ /obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/maintenance/engineering) -"rso" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) "rsL" = ( /turf/simulated/wall/shuttle/scc_space_ship/cardinal, /area/maintenance/research_port) @@ -25535,6 +25512,12 @@ }, /turf/simulated/floor/plating, /area/maintenance/operations) +"rJn" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/structure/closet/crate, +/obj/random/loot, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "rJw" = ( /obj/structure/cable{ icon_state = "1-2" @@ -25554,6 +25537,15 @@ /obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/maintenance/operations) +"rJD" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "rJZ" = ( /obj/machinery/conveyor{ dir = 1; @@ -25620,15 +25612,6 @@ /obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/hangar/intrepid) -"rMf" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/stairs_lower/stairs_upper{ - dir = 4; - pixel_y = -1 - }, -/obj/structure/railing/mapped, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) "rMm" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -25912,9 +25895,6 @@ }, /turf/simulated/floor/tiled/white, /area/shuttle/intrepid/crew_compartment) -"rUd" = ( -/turf/simulated/wall/r_wall, -/area/turret_protected/ai) "rUH" = ( /turf/simulated/wall/shuttle/unique/scc/research{ icon_state = "11,8" @@ -26148,10 +26128,10 @@ /turf/simulated/floor/bluegrid, /area/rnd/isolation_a) "sdW" = ( -/obj/structure/lattice/catwalk/indoor/grate/damaged, /obj/machinery/light/small/emergency{ dir = 4 }, +/obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/maintenance/research_port) "seU" = ( @@ -26620,13 +26600,12 @@ /turf/simulated/floor/plating, /area/engineering/atmos/propulsion) "sxc" = ( -/obj/effect/floor_decal/industrial/warning/full, -/obj/machinery/porta_turret, -/obj/structure/railing/mapped{ - dir = 8 +/obj/structure/closet/crate, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, -/turf/simulated/floor/tiled/dark/cooled, -/area/turret_protected/ai) +/turf/simulated/floor/plating, +/area/maintenance/research_port) "sxx" = ( /obj/machinery/recharge_station, /obj/effect/floor_decal/industrial/hatch/yellow, @@ -26869,15 +26848,9 @@ /turf/simulated/floor/tiled, /area/hangar/intrepid) "sIQ" = ( -/obj/structure/lattice/catwalk/indoor/grate, -/obj/structure/railing/mapped{ - dir = 1 - }, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/plating/cooled, -/area/turret_protected/ai) +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "sJJ" = ( /obj/effect/floor_decal/corner/yellow{ dir = 6 @@ -27195,31 +27168,6 @@ /obj/machinery/light, /turf/simulated/floor/shuttle/dark_blue, /area/shuttle/escape_pod/pod2) -"sSK" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1380; - id_tag = "ai_core_pump" - }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1380; - id_tag = "ai_core_airlock"; - name = "AI Core airlock controller"; - pixel_x = 30; - req_one_access = list(13); - tag_airpump = "ai_core_pump"; - tag_chamber_sensor = "ai_core_sensor"; - tag_exterior_door = "ai_core_outer"; - tag_exterior_sensor = "ai_core_sensor_exterior"; - tag_interior_door = "ai_core_inner"; - tag_interior_sensor = "ai_core_sensor_interior" - }, -/obj/machinery/airlock_sensor{ - frequency = 1380; - id_tag = "ai_core_sensor"; - pixel_x = -30 - }, -/turf/simulated/floor/plating/cooled, -/area/turret_protected/ai) "sTu" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -27483,6 +27431,8 @@ icon_state = "1-2" }, /obj/structure/lattice/catwalk/indoor/grate, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/maintenance/research_port) "teb" = ( @@ -27650,16 +27600,15 @@ /turf/simulated/floor/plating, /area/shuttle/intrepid/atmos_compartment) "thF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/camera/network/command{ - c_tag = "AI Core - First Deck Maintenance"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/obj/machinery/light/small{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "thO" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -27822,16 +27771,8 @@ "tnb" = ( /obj/machinery/portable_atmospherics/canister/air/airlock, /obj/machinery/atmospherics/portables_connector, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, /obj/effect/decal/cleanable/cobweb2, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/maintenance/research_port) "tns" = ( @@ -29921,6 +29862,19 @@ }, /turf/simulated/floor/tiled, /area/maintenance/hangar/starboard) +"uJP" = ( +/obj/structure/lattice/catwalk/indoor/grate, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "uKh" = ( /obj/machinery/atmospherics/binary/pump/high_power{ dir = 8; @@ -30068,18 +30022,9 @@ }, /area/shuttle/intrepid/engine_compartment) "uRl" = ( -/obj/item/modular_computer/console/preset/ai{ - dir = 1 - }, -/obj/machinery/light/small/emergency{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark/cooled, -/area/turret_protected/ai) +/obj/structure/flora/pottedplant/dead, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "uRt" = ( /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -30486,6 +30431,12 @@ req_one_access = list(12,47) }, /obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/research_port) "vdb" = ( @@ -30673,7 +30624,11 @@ /obj/effect/floor_decal/corner/lime/diagonal, /turf/simulated/floor/tiled, /area/medical/morgue/lower) -"vil" = ( +"vik" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/portable_atmospherics/canister/empty, /turf/simulated/floor/plating, /area/maintenance/research_port) "viX" = ( @@ -30714,13 +30669,9 @@ /turf/simulated/floor/tiled, /area/operations/storage) "vjA" = ( -/obj/structure/lattice/catwalk/indoor/grate, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 8 - }, -/turf/simulated/floor/plating/cooled, -/area/turret_protected/ai) +/obj/random/junk, +/turf/simulated/floor/tiled/dark/full, +/area/maintenance/research_port) "vjI" = ( /obj/effect/decal/cleanable/dirt, /obj/random/junk, @@ -30813,14 +30764,14 @@ /area/engineering/atmos) "vmR" = ( /obj/structure/lattice/catwalk/indoor/grate, -/obj/structure/railing/mapped{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, -/obj/structure/railing/mapped{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, -/turf/simulated/floor/plating/cooled, -/area/turret_protected/ai) +/turf/simulated/floor/plating, +/area/maintenance/research_port) "vnJ" = ( /obj/machinery/door/firedoor, /obj/effect/floor_decal/industrial/warning{ @@ -31180,29 +31131,12 @@ /turf/simulated/floor/reinforced/hydrogen, /area/engineering/atmos) "vCC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, +/obj/structure/trash_pile, /obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1380; - master_tag = "ai_core_airlock"; - name = "exterior access button"; - pixel_x = 27; - pixel_y = 26; - req_one_access = list(13) - }, -/obj/machinery/airlock_sensor/airlock_exterior{ - frequency = 1380; - id_tag = "ai_core_sensor_exterior"; - pixel_x = -25; - pixel_y = 25 + dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) +/turf/simulated/floor/plating, +/area/maintenance/research_port) "vCG" = ( /obj/machinery/door/firedoor, /obj/effect/floor_decal/industrial/hatch/yellow, @@ -32027,7 +31961,7 @@ name = "aft, bottom AI core" }, /turf/simulated/wall/shuttle/scc_space_ship/cardinal, -/area/turret_protected/ai) +/area/maintenance/research_port) "wif" = ( /obj/machinery/door/airlock/multi_tile/glass{ dir = 2; @@ -32347,13 +32281,8 @@ /turf/simulated/floor/tiled/dark, /area/engineering/atmos) "wqs" = ( -/obj/structure/lattice/catwalk/indoor/grate, -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4 - }, -/turf/simulated/floor/plating/cooled, -/area/turret_protected/ai) +/turf/simulated/floor/tiled/dark/full, +/area/maintenance/research_port) "wrD" = ( /obj/effect/floor_decal/industrial/warning{ dir = 8 @@ -33434,16 +33363,16 @@ /turf/space/dynamic, /area/horizon/exterior) "xgc" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/light/small{ +/obj/machinery/light/small/emergency{ dir = 4 }, -/obj/structure/railing/mapped, -/turf/simulated/floor/tiled/dark, -/area/turret_protected/ai_upload) +/turf/simulated/floor/plating, +/area/maintenance/research_port) "xgm" = ( -/obj/structure/lattice/catwalk/indoor/grate, /obj/machinery/alarm/east, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, /turf/simulated/floor/plating, /area/maintenance/research_port) "xgn" = ( @@ -33539,9 +33468,6 @@ /obj/machinery/alarm/east, /turf/simulated/floor/tiled, /area/hangar/intrepid) -"xiH" = ( -/turf/simulated/wall/shuttle/scc_space_ship/cardinal, -/area/turret_protected/ai_upload) "xiN" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 @@ -33973,11 +33899,10 @@ /turf/simulated/floor/tiled/dark/full, /area/rnd/xenoarch_atrium) "xre" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark/cooled, -/area/turret_protected/ai) +/obj/effect/floor_decal/industrial/outline/grey, +/obj/structure/reagent_dispensers/extinguisher, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "xrp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/fuel, /obj/effect/floor_decal/industrial/warning{ @@ -34112,6 +34037,11 @@ "xur" = ( /turf/simulated/wall/shuttle/scc_space_ship/cardinal, /area/maintenance/substation/engineering/lower) +"xvh" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/portable_atmospherics/canister/empty, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "xvk" = ( /obj/structure/shuttle_part/scc/research{ icon_state = "4,8" @@ -34521,16 +34451,9 @@ /turf/simulated/floor/tiled, /area/operations/loading) "xKI" = ( -/obj/item/modular_computer/console/preset/ai, -/obj/machinery/light/small/emergency{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark/cooled, -/area/turret_protected/ai) +/obj/structure/closet/crate, +/turf/simulated/floor/plating, +/area/maintenance/research_port) "xLq" = ( /obj/structure/table/rack{ dir = 8; @@ -60820,7 +60743,7 @@ uVL uVL gyD eKc -mhf +idq pom wXZ mhf @@ -61026,9 +60949,9 @@ eKc sdW grP wJK -vil +mhf xgm -hgR +vDT eGG pom gBA @@ -61227,13 +61150,13 @@ uVL rsL qpJ rsL -rUd -rUd -rUd -rUd -rUd -rUd -rUd +pom +pom +hgR +pom +pom +pom +pom xsN gVe bRg @@ -61430,18 +61353,18 @@ uVL eBb lRC qco -rUd +pom xKI -xre -mVo -xre +wqs +vik +qiG fVh -rUd +pom akC iGO iGO avE -iGO +uJP tdL ccZ eXb @@ -61633,17 +61556,17 @@ uVL oTX nvZ nQN -rUd +pom npz -vmR -gsG +wqs +cTj vjA sxc -rUd -rUd -rUd -pdC -pdC +pom +pom +pom +pom +pom cDa jNq vDT @@ -61836,17 +61759,17 @@ uVL feI dro rsL -rUd +pom eNY gsG -ben -gsG +qPV +wqs jBX -aFA -sSK +pom +baq bBL vCC -pdC +pom vcF sfh sfh @@ -62038,19 +61961,19 @@ eSV eSV kVe kVe -qZp -rUd +rsL +pom jyg -sIQ -gsG +xvh +rJn wqs cTj -rUd -rUd -rUd +grP +wqs +wqs nCI -pdC -mhf +pom +lKV sfh aFN ezF @@ -62242,18 +62165,18 @@ eSV eSV eSV wie -rUd +pom lPL -qPV -qPV +ieH +xre qPV uRl -rUd -hUt +pom +mhf thF bVh -pdC -haI +rJD +vmR sfh plc vgS @@ -62444,18 +62367,18 @@ eSV eSV eSV eSV -qZp -rUd -rUd -rUd -rUd -rUd -rUd -rUd +rsL +pom +pom +pom +pom +pom +pom +pom ajM -oFy +aFA boN -pdC +pom nVO sfh fsy @@ -62647,19 +62570,19 @@ eSV eSV eSV eSV -qZp -qZp -qZp -qZp -qZp +rsL +rsL +rsL +rsL +rsL nEl -qZp -rUd +rsL +pom mkW -rso +wqs fYt -pdC -tFd +pom +ben sfh gTq lGH @@ -62856,12 +62779,12 @@ eSV eSV eSV eSV -xiH -pdC +rsL +pom dEe -rMf +qPV oFy -pdC +pom moP sfh wIM @@ -63059,12 +62982,12 @@ eSV eSV eSV eSV -xiH -pdC -dEe +rsL +pom +sIQ xgc eTx -pdC +pom vnJ sfh sfh @@ -63262,12 +63185,12 @@ eSV eSV eSV eSV -xiH -pdC -pdC -pdC -pdC -pdC +rsL +pom +pom +pom +pom +pom hrb erL erL @@ -63465,12 +63388,12 @@ eSV eSV eSV eSV -xiH -xiH -xiH -xiH -xiH -pdC +rsL +rsL +rsL +rsL +rsL +pom qbC erL erL @@ -63673,7 +63596,7 @@ eSV eSV eSV rsL -lCv +pom hrb erL erL diff --git a/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm b/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm index 73253a24287..28bf30a266f 100644 --- a/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm +++ b/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm @@ -5304,9 +5304,6 @@ /obj/structure/cable/green{ icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 6 - }, /obj/machinery/camera/network/command{ c_tag = "AI Core - Foyer" }, @@ -6256,8 +6253,9 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/turf/simulated/floor/plating/cooled, -/area/turret_protected/ai) +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/turret_protected/ai_upload_foyer) "cRu" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering{ @@ -7354,8 +7352,8 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/floor_decal/corner/mauve{ - dir = 5 +/obj/effect/floor_decal/corner/mauve/full{ + dir = 8 }, /turf/simulated/floor/tiled, /area/turret_protected/ai_upload) @@ -9508,14 +9506,11 @@ /turf/simulated/floor/tiled, /area/turret_protected/ai_upload) "eyY" = ( -/obj/machinery/door/blast/regular/open{ - id = "AICore"; - name = "AI Maintenance Blast Door" - }, /obj/structure/cable/green{ icon_state = "4-8" }, -/turf/simulated/floor/plating/cooled, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, /area/turret_protected/ai) "eAl" = ( /obj/machinery/camera/network/service{ @@ -10657,6 +10652,13 @@ }, /turf/simulated/floor/tiled, /area/horizon/security/office) +"fcV" = ( +/obj/item/modular_computer/console/preset/ai, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/cooled, +/area/turret_protected/ai) "fdh" = ( /obj/effect/floor_decal/corner/grey/diagonal, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -11143,9 +11145,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/floor_decal/corner/mauve{ - dir = 10 - }, +/obj/effect/floor_decal/corner/mauve/full, /turf/simulated/floor/tiled, /area/turret_protected/ai_upload) "fnd" = ( @@ -16647,14 +16647,15 @@ /turf/simulated/floor/tiled, /area/horizon/security/hallway) "hHM" = ( -/obj/structure/ladder{ - pixel_y = 4 - }, /obj/machinery/camera/network/command{ c_tag = "AI Core - Aft"; dir = 1 }, -/turf/simulated/open, +/obj/effect/floor_decal/corner/mauve{ + dir = 5 + }, +/obj/effect/floor_decal/spline/fancy, +/turf/simulated/floor/tiled/dark/cooled, /area/turret_protected/ai) "hHV" = ( /obj/structure/cable/green{ @@ -16900,13 +16901,21 @@ /turf/simulated/floor/tiled/dark, /area/horizon/zta) "hRY" = ( -/obj/machinery/camera/network/command{ - c_tag = "AI Core - Second Deck Airlock" - }, /obj/structure/cable/green{ icon_state = "4-8" }, -/turf/simulated/floor/plating/cooled, +/obj/machinery/door/airlock/highsecurity{ + dir = 4; + name = "AI Core"; + req_access = list(16) + }, +/obj/machinery/door/blast/regular/open{ + id = "AICore"; + name = "AI Maintenance Blast Door" + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, /area/turret_protected/ai) "hSp" = ( /obj/effect/floor_decal/industrial/outline/yellow, @@ -21563,7 +21572,6 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, /area/turret_protected/ai_upload_foyer) "kat" = ( @@ -22128,9 +22136,6 @@ /turf/simulated/floor/tiled/full, /area/hallway/primary/central_two) "krk" = ( -/obj/machinery/light{ - dir = 8 - }, /obj/effect/floor_decal/corner/yellow{ dir = 9 }, @@ -23320,12 +23325,8 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/security/armoury) "kXO" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/corner/mauve{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, +/obj/machinery/recharge_station, +/turf/simulated/floor/bluegrid, /area/turret_protected/ai_upload) "kXS" = ( /obj/structure/disposalpipe/segment{ @@ -25935,13 +25936,9 @@ /turf/simulated/floor/carpet/rubber, /area/server) "mjW" = ( -/obj/structure/extinguisher_cabinet/south, -/obj/effect/floor_decal/corner/mauve/diagonal, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/firealarm/east, -/turf/simulated/floor/tiled, +/obj/structure/extinguisher_cabinet/east, +/obj/machinery/cryopod/robot, +/turf/simulated/floor/bluegrid, /area/turret_protected/ai_upload) "mke" = ( /obj/structure/cable/green{ @@ -28642,9 +28639,6 @@ /turf/simulated/floor/tiled, /area/operations/lower/machinist) "ntn" = ( -/obj/machinery/light{ - dir = 4 - }, /obj/effect/floor_decal/corner/yellow{ dir = 6 }, @@ -28680,9 +28674,7 @@ /obj/effect/floor_decal/corner/mauve/full{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, +/obj/effect/floor_decal/spline/plain, /turf/simulated/floor/tiled, /area/turret_protected/ai_upload) "nue" = ( @@ -29089,12 +29081,10 @@ /turf/simulated/open, /area/operations/office) "nFm" = ( -/obj/effect/floor_decal/corner/mauve/full{ - dir = 8 - }, /obj/machinery/light/small{ dir = 8 }, +/obj/machinery/recharge_station, /turf/simulated/floor/tiled, /area/turret_protected/ai_upload) "nFs" = ( @@ -30456,9 +30446,6 @@ /turf/simulated/floor/tiled/full, /area/hallway/primary/central_one) "ool" = ( -/obj/machinery/light{ - dir = 8 - }, /obj/effect/floor_decal/corner/yellow{ dir = 9 }, @@ -30657,13 +30644,6 @@ /obj/item/reagent_containers/blood/OMinus, /turf/simulated/floor/tiled/white, /area/medical/icu) -"osY" = ( -/obj/effect/map_effect/airlock/w_to_e{ - name = "Deck 2 AI Internal Airlock (2101)"; - radio_frequency = 2101 - }, -/turf/simulated/wall/r_wall, -/area/turret_protected/ai) "otf" = ( /obj/machinery/turretid/stun{ check_synth = 1; @@ -34053,9 +34033,6 @@ /obj/structure/cable/green{ icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, /turf/simulated/floor/tiled, /area/turret_protected/ai_upload_foyer) "qcs" = ( @@ -34899,9 +34876,6 @@ /turf/simulated/floor/tiled/dark, /area/engineering/aft_airlock) "qwD" = ( -/obj/machinery/light{ - dir = 4 - }, /obj/effect/floor_decal/corner/yellow{ dir = 6 }, @@ -36682,6 +36656,15 @@ }, /turf/simulated/floor/tiled, /area/rnd/hallway) +"rnF" = ( +/obj/item/modular_computer/console/preset/ai{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/cooled, +/area/turret_protected/ai) "rnO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -36913,13 +36896,12 @@ /turf/simulated/floor/tiled, /area/operations/office) "rtH" = ( -/obj/structure/railing/mapped, -/obj/effect/floor_decal/corner/mauve/full, -/obj/effect/floor_decal/industrial/warning, /obj/machinery/camera/network/command{ c_tag = "AI Core - Maintenance Stairwell"; dir = 4 }, +/obj/effect/floor_decal/corner/mauve/full, +/obj/effect/floor_decal/spline/plain, /turf/simulated/floor/tiled, /area/turret_protected/ai_upload) "rtI" = ( @@ -39379,11 +39361,7 @@ /obj/structure/cable/green{ icon_state = "0-8" }, -/obj/machinery/portable_atmospherics/canister/air/airlock, /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/portables_connector{ - dir = 8 - }, /obj/machinery/power/apc/critical/north, /turf/simulated/floor/tiled, /area/turret_protected/ai_upload_foyer) @@ -45570,6 +45548,15 @@ }, /turf/simulated/floor/plating, /area/maintenance/substation/wing_port) +"vEO" = ( +/obj/item/modular_computer/console/preset/ai{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/cooled, +/area/turret_protected/ai) "vES" = ( /obj/structure/railing/mapped{ dir = 8 @@ -47761,6 +47748,13 @@ }, /turf/simulated/floor/carpet, /area/horizon/security/head_of_security) +"wwO" = ( +/obj/effect/floor_decal/corner/mauve{ + dir = 10 + }, +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/tiled, +/area/turret_protected/ai_upload) "wwR" = ( /obj/structure/reagent_dispensers/extinguisher, /obj/effect/floor_decal/industrial/warning{ @@ -49545,7 +49539,10 @@ /turf/simulated/floor/tiled/full, /area/horizon/security/brig) "xkH" = ( -/turf/simulated/open, +/obj/machinery/firealarm/south, +/obj/machinery/mech_recharger, +/mob/living/silicon/robot/shell, +/turf/simulated/floor/bluegrid, /area/turret_protected/ai_upload) "xkQ" = ( /obj/structure/cable/green{ @@ -77275,9 +77272,9 @@ mRl uEq uEq kpC -hst +cyZ cRs -osY +cyZ sHR xcp ahm @@ -77679,7 +77676,7 @@ pUT hst hst bkQ -hst +vEO eyY hst imA @@ -78081,7 +78078,7 @@ uEq uEq uEq hst -hst +fcV aSV hst hst @@ -78485,7 +78482,7 @@ hoe hoe hoe hst -hst +fcV aSV hst iXI @@ -78891,7 +78888,7 @@ jTA hst hst juY -hst +rnF bkQ hst qvl @@ -79302,7 +79299,7 @@ fDA gxa azO rtH -xkH +kXO mBB jwY hqi @@ -79503,7 +79500,7 @@ dvf fmV bgN dpE -kXO +wwO xkH mBB bHL From e8cb6187dac5544c0ee67749cf2f2490c6a9ccd5 Mon Sep 17 00:00:00 2001 From: DreamySkrell <107256943+DreamySkrell@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:46:59 +0100 Subject: [PATCH 29/32] Replace holomap with PDA map program (#17751) * map program, holomap init order * huh * programz * program defines * hmm....... * a * map :weary: * sane code, zoom * holo_minimaps -> minimaps * o * remove station holomap stuff * changelog, shitcode, mapping * c * o * minus * generate_all_minimaps() * holomap init order * tests rerun please * tests rerun please * aurora station_map removal * legend via labeledlist * table * key * aaaaaaaaaaaaaaaaaaaaaaa --------- Co-authored-by: DreamySkrell <> --- aurorastation.dme | 8 +- code/__defines/minimap.dm | 42 +- code/__defines/subsystem-priority.dm | 8 +- code/_helpers/unsorted.dm | 1 - code/_onclick/hud/hud.dm | 13 - .../subsystems/initialization/holomap.dm | 94 +-- .../subsystems/initialization/misc_early.dm | 1 - code/game/machinery/station_holomap.dm | 245 ------- .../modules/mob/living/silicon/robot/robot.dm | 16 - .../file_system/programs/app_presets.dm | 685 ------------------ .../file_system/programs/app_presets_.dm | 68 ++ .../file_system/programs/app_presets_antag.dm | 50 ++ .../file_system/programs/app_presets_crew.dm | 328 +++++++++ .../programs/app_presets_equipment.dm | 100 +++ .../programs/app_presets_third_party.dm | 47 ++ .../file_system/programs/generic/map.dm | 55 ++ .../DreamySkrell-minimap-program.yml | 42 ++ icons/255x255.dmi | Bin 0 -> 234 bytes maps/aurora/aurora-1_centcomm.dmm | 416 +++-------- maps/aurora/aurora-3_sublevel.dmm | 68 +- maps/aurora/aurora-4_mainlevel.dmm | 100 +-- maps/aurora/aurora-6_surface.dmm | 41 +- maps/sccv_horizon/sccv_horizon-1_deck_1.dmm | 25 +- maps/sccv_horizon/sccv_horizon-2_deck_2.dmm | 51 +- maps/sccv_horizon/sccv_horizon-3_deck_3.dmm | 7 - tgui/packages/tgui/interfaces/Map.tsx | 146 ++++ 26 files changed, 1042 insertions(+), 1615 deletions(-) delete mode 100644 code/game/machinery/station_holomap.dm delete mode 100644 code/modules/modular_computers/file_system/programs/app_presets.dm create mode 100644 code/modules/modular_computers/file_system/programs/app_presets_.dm create mode 100644 code/modules/modular_computers/file_system/programs/app_presets_antag.dm create mode 100644 code/modules/modular_computers/file_system/programs/app_presets_crew.dm create mode 100644 code/modules/modular_computers/file_system/programs/app_presets_equipment.dm create mode 100644 code/modules/modular_computers/file_system/programs/app_presets_third_party.dm create mode 100644 code/modules/modular_computers/file_system/programs/generic/map.dm create mode 100644 html/changelogs/DreamySkrell-minimap-program.yml create mode 100644 icons/255x255.dmi create mode 100644 tgui/packages/tgui/interfaces/Map.tsx diff --git a/aurorastation.dme b/aurorastation.dme index 488a3715f35..489a393a944 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -816,7 +816,6 @@ #include "code\game\machinery\spaceheater.dm" #include "code\game\machinery\stargazer.dm" #include "code\game\machinery\stasis_bed.dm" -#include "code\game\machinery\station_holomap.dm" #include "code\game\machinery\status_display.dm" #include "code\game\machinery\status_display_ai.dm" #include "code\game\machinery\status_display_snowflakes.dm" @@ -2645,7 +2644,11 @@ #include "code\modules\modular_computers\file_system\program_events.dm" #include "code\modules\modular_computers\file_system\script.dm" #include "code\modules\modular_computers\file_system\programs\_program.dm" -#include "code\modules\modular_computers\file_system\programs\app_presets.dm" +#include "code\modules\modular_computers\file_system\programs\app_presets_.dm" +#include "code\modules\modular_computers\file_system\programs\app_presets_antag.dm" +#include "code\modules\modular_computers\file_system\programs\app_presets_crew.dm" +#include "code\modules\modular_computers\file_system\programs\app_presets_equipment.dm" +#include "code\modules\modular_computers\file_system\programs\app_presets_third_party.dm" #include "code\modules\modular_computers\file_system\programs\antagonist\hacked_camera.dm" #include "code\modules\modular_computers\file_system\programs\civilian\cargo_control.dm" #include "code\modules\modular_computers\file_system\programs\civilian\cargo_delivery.dm" @@ -2666,6 +2669,7 @@ #include "code\modules\modular_computers\file_system\programs\games\arcade.dm" #include "code\modules\modular_computers\file_system\programs\generic\lawmanager.dm" #include "code\modules\modular_computers\file_system\programs\generic\manifest.dm" +#include "code\modules\modular_computers\file_system\programs\generic\map.dm" #include "code\modules\modular_computers\file_system\programs\generic\news_browser.dm" #include "code\modules\modular_computers\file_system\programs\generic\ntnrc_client.dm" #include "code\modules\modular_computers\file_system\programs\generic\records.dm" diff --git a/code/__defines/minimap.dm b/code/__defines/minimap.dm index 99076da7397..74781d9b0bd 100644 --- a/code/__defines/minimap.dm +++ b/code/__defines/minimap.dm @@ -1,41 +1,23 @@ // -// Constants and standard colors for the holomap +// Constants and standard colors for the holomap/minimap // -#define HOLOMAP_ICON 'icons/480x480.dmi' // Icon file to start with when drawing holomaps (to get a 480x480 canvas). -#define HOLOMAP_ICON_SIZE 480 // Pixel width & height of the holomap icon. Used for auto-centering etc. -#define ui_holomap "CENTER-7, CENTER-7" // Screen location of the holomap "hud" - // Holomap colors -#define HOLOMAP_OBSTACLE "#FFFFFFDD" // Color of walls and barriers -#define HOLOMAP_PATH "#66666699" // Color of floors +#define HOLOMAP_OBSTACLE "#FFFFFF" // Color of walls and barriers +#define HOLOMAP_PATH "#666666" // Color of floors #define HOLOMAP_HOLOFIER "#79FF79" // Whole map is multiplied by this to give it a green holoish look -#define HOLOMAP_AREACOLOR_COMMAND "#386d8099" -#define HOLOMAP_AREACOLOR_SECURITY "#ae121299" -#define HOLOMAP_AREACOLOR_MEDICAL "#6f9e00c2" -#define HOLOMAP_AREACOLOR_SCIENCE "#A154A699" -#define HOLOMAP_AREACOLOR_ENGINEERING "#F1C23199" -#define HOLOMAP_AREACOLOR_OPERATIONS "#E06F0099" -#define HOLOMAP_AREACOLOR_HALLWAYS "#ffffffa5" -#define HOLOMAP_AREACOLOR_DOCK "#0000FFCC" +#define HOLOMAP_AREACOLOR_COMMAND "#386d80" +#define HOLOMAP_AREACOLOR_SECURITY "#ae1212" +#define HOLOMAP_AREACOLOR_MEDICAL "#6f9e00" +#define HOLOMAP_AREACOLOR_SCIENCE "#A154A6" +#define HOLOMAP_AREACOLOR_ENGINEERING "#F1C231" +#define HOLOMAP_AREACOLOR_OPERATIONS "#E06F00" +#define HOLOMAP_AREACOLOR_HALLWAYS "#ffffff" +#define HOLOMAP_AREACOLOR_DOCK "#0000FF" #define HOLOMAP_AREACOLOR_HANGAR "#777777" -#define HOLOMAP_AREACOLOR_CIVILIAN "#5bc1c199" +#define HOLOMAP_AREACOLOR_CIVILIAN "#5bc1c1" // If someone can come up with a non-conflicting color for the lifts, please update this. #define HOLOMAP_AREACOLOR_LIFTS null -// Handy defines to lookup the pixel offsets for this Z-level. Cache these if you use them in a loop tho. -// Commenting these out for now. Replace if we ever datumize our maps. -/*#define HOLOMAP_PIXEL_OFFSET_X(zLevel) ((using_map.holomap_offset_x.len >= zLevel) ? using_map.holomap_offset_x[zLevel] : 0) -#define HOLOMAP_PIXEL_OFFSET_Y(zLevel) ((using_map.holomap_offset_y.len >= zLevel) ? using_map.holomap_offset_y[zLevel] : 0) -#define HOLOMAP_LEGEND_X(zLevel) ((using_map.holomap_legend_x.len >= zLevel) ? using_map.holomap_legend_x[zLevel] : 96) -#define HOLOMAP_LEGEND_Y(zLevel) ((using_map.holomap_legend_y.len >= zLevel) ? using_map.holomap_legend_y[zLevel] : 96)*/ - -#define HOLOMAP_PIXEL_OFFSET_X(zlevel) ((HOLOMAP_ICON_SIZE - world.maxx) / 2) -#define HOLOMAP_PIXEL_OFFSET_Y(zlevel) ((HOLOMAP_ICON_SIZE - world.maxx) / 2) -#define HOLOMAP_LEGEND_X(zlevel) 96 -#define HOLOMAP_LEGEND_Y(zlevel) 96 -#define HOLOMAP_EXTRA_STATIONMAP "stationmapformatted" -#define HOLOMAP_EXTRA_STATIONMAPAREAS "stationareas" -#define HOLOMAP_EXTRA_STATIONMAPSMALL "stationmapsmall" diff --git a/code/__defines/subsystem-priority.dm b/code/__defines/subsystem-priority.dm index 76f7f784a19..a0a79ea0813 100644 --- a/code/__defines/subsystem-priority.dm +++ b/code/__defines/subsystem-priority.dm @@ -5,7 +5,6 @@ #define SS_INIT_JOBS 21 #define SS_INIT_MAPFINALIZE 20 // Asteroid generation. #define SS_INIT_PARALLAX 19 // Parallax image cache generation. Must run before ghosts are able to join. -#define SS_INIT_HOLOMAP 18 #define SS_INIT_ATOMS 17 // World initialization. Will trigger lighting updates. Observers can join after this loads. #define SS_INIT_ASSETS 16 // Assets subsystem setup. #define SS_INIT_POWER 15 // Initial powernet build. @@ -26,9 +25,10 @@ #define SS_INIT_LIGHTING 0 // Generation of lighting overlays and pre-bake. May cause openturf updates, should initialize before SSzcopy. #define SS_INIT_ZCOPY -1 // Z-mimic flush. Should run after SSoverlay & SSicon_smooth so it copies the smoothed sprites. #define SS_INIT_XENOARCH -2 // Xenoarch is this far below because it can infinite loop if placed in SS_INIT_MISC as it was before, due to some subsystems spawning stuff there. -#define SS_INIT_LOBBY -3 // Lobby timer starts here. The lobby timer won't actually start going down until the MC starts ticking, so you probably want this last -#define SS_INIT_PING -4 // Pinger for the clients -#define SS_INIT_CHAT -5 // To ensure chat remains smooth during init. +#define SS_INIT_HOLOMAP -3 // Minimap subsystem. Should be initialized after all maps, away sites, ships, planets, etc. +#define SS_INIT_LOBBY -4 // Lobby timer starts here. The lobby timer won't actually start going down until the MC starts ticking, so you probably want this last +#define SS_INIT_PING -5 // Pinger for the clients +#define SS_INIT_CHAT -6 // To ensure chat remains smooth during init. // Something to remember when setting priorities: SS_TICKER runs before Normal, which runs before SS_BACKGROUND. // Each group has its own priority bracket. diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 891d141adae..5ec29e359f2 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1017,7 +1017,6 @@ var/list/wall_items = typecacheof(list( /obj/structure/mirror, /obj/structure/fireaxecabinet, /obj/machinery/computer/security/telescreen/entertainment, - /obj/machinery/station_map, /obj/structure/sign )) diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index da23341b8dd..e6b00d9b296 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -20,7 +20,6 @@ var/list/global_huds var/obj/screen/thermal var/obj/screen/meson var/obj/screen/science - var/obj/screen/holomap /datum/global_hud/proc/setup_overlay(var/icon_state, var/color) var/obj/screen/screen = new /obj/screen() @@ -64,18 +63,6 @@ var/list/global_huds meson = setup_overlay("scanline", "#9fd800") science = setup_overlay("scanline", "#d600d6") - // The holomap screen object is actually totally invisible. - // Station maps work by setting it as an images location before sending to client, not - // actually changing the icon or icon state of the screen object itself! - // Why do they work this way? I don't know really, that is how /vg/ designed them, but since they DO - // work this way, we can take advantage of their immutability by making them part of - // the global_hud (something we have and /vg/ doesn't) instead of an instance per mob. - holomap = new /obj/screen() - holomap.name = "holomap" - holomap.icon = null - holomap.screen_loc = ui_holomap - holomap.mouse_opacity = MOUSE_OPACITY_TRANSPARENT - var/obj/screen/O var/i //that nasty looking dither you get when you're short-sighted diff --git a/code/controllers/subsystems/initialization/holomap.dm b/code/controllers/subsystems/initialization/holomap.dm index e85617e718e..7e1849e3f5b 100644 --- a/code/controllers/subsystems/initialization/holomap.dm +++ b/code/controllers/subsystems/initialization/holomap.dm @@ -6,35 +6,39 @@ SUBSYSTEM_DEF(holomap) flags = SS_NO_FIRE init_order = SS_INIT_HOLOMAP - var/list/holo_minimaps = list() - var/list/extra_minimaps = list() - var/list/station_holomaps = list() + /// List of images of minimaps, for every z-level, initialized at round start. + /// This is the "base" minimap, shows only the physical structure of walls and paths, and respects `HIDE_FROM_HOLOMAP`. + /// Key of list is the `z` of the z-level, value is the `/icon/`. + /// Every image is 255x255px. + var/list/minimaps = list() -/datum/controller/subsystem/holomap/Initialize() - holo_minimaps.len = world.maxz - for (var/z in 1 to world.maxz) - holo_minimaps[z] = generateHoloMinimap(z) + /// Same as `minimaps`, but images are base64 encoded. + var/list/minimaps_base64 = list() - LOG_DEBUG("SSholomap: [holo_minimaps.len] maps.") - - for (var/z in current_map.station_levels) - generateStationMinimap(z) + /// Same as `minimaps_base64`, but the map is colored with `holomap_color` of the `/area/` + var/list/minimaps_area_colored_base64 = list() +/datum/controller/subsystem/holomap/Initialize() + generate_all_minimaps() + LOG_DEBUG("SSholomap: [minimaps.len] maps.") ..() +/datum/controller/subsystem/holomap/proc/generate_all_minimaps() + minimaps.len = world.maxz + minimaps_base64.len = world.maxz + minimaps_area_colored_base64.len = world.maxz -// Generates the "base" holomap for one z-level, showing only the physical structure of walls and paths. -/datum/controller/subsystem/holomap/proc/generateHoloMinimap(zlevel = 1) - // Save these values now to avoid a bazillion array lookups - var/offset_x = HOLOMAP_PIXEL_OFFSET_X(zlevel) - var/offset_y = HOLOMAP_PIXEL_OFFSET_Y(zlevel) + for (var/z in 1 to world.maxz) + generate_minimap(z) + generate_minimap_area_colored(z) +/datum/controller/subsystem/holomap/proc/generate_minimap(zlevel = 1) // Sanity checks - Better to generate a helpful error message now than have DrawBox() runtime - var/icon/canvas = icon(HOLOMAP_ICON, "blank") - if(world.maxx + offset_x > canvas.Width()) - CRASH("Minimap for z=[zlevel] : world.maxx ([world.maxx]) + holomap_offset_x ([offset_x]) must be <= [canvas.Width()]") - if(world.maxy + offset_y > canvas.Height()) - CRASH("Minimap for z=[zlevel] : world.maxy ([world.maxy]) + holomap_offset_y ([offset_y]) must be <= [canvas.Height()]") + var/icon/canvas = icon('icons/255x255.dmi', "blank") + if(world.maxx > canvas.Width()) + CRASH("Minimap for z=[zlevel] : world.maxx ([world.maxx]) must be <= [canvas.Width()]") + if(world.maxy > canvas.Height()) + CRASH("Minimap for z=[zlevel] : world.maxy ([world.maxy]) must be <= [canvas.Height()]") var/list/rock_tcache = typecacheof(list( /turf/simulated/mineral, @@ -64,25 +68,22 @@ SUBSYSTEM_DEF(holomap) if (rock_tcache[Ttype]) continue if (obstacle_tcache[Ttype] || (T.contents.len && locate(/obj/structure/grille, T))) - canvas.DrawBox(HOLOMAP_OBSTACLE, T.x + offset_x, T.y + offset_y) + canvas.DrawBox(HOLOMAP_OBSTACLE + "DD", T.x, T.y) else if(path_tcache[Ttype] || (T.contents.len && locate(/obj/structure/lattice/catwalk, T))) - canvas.DrawBox(HOLOMAP_PATH, T.x + offset_x, T.y + offset_y) + canvas.DrawBox(HOLOMAP_PATH + "DD", T.x, T.y) CHECK_TICK - return canvas - -/datum/controller/subsystem/holomap/proc/generateStationMinimap(zlevel) - // Save these values now to avoid a bazillion array lookups - var/offset_x = HOLOMAP_PIXEL_OFFSET_X(zlevel) - var/offset_y = HOLOMAP_PIXEL_OFFSET_Y(zlevel) + minimaps[zlevel] = canvas + minimaps_base64[zlevel] = icon2base64(canvas) +/datum/controller/subsystem/holomap/proc/generate_minimap_area_colored(zlevel) // Sanity checks - Better to generate a helpful error message now than have DrawBox() runtime - var/icon/canvas = icon(HOLOMAP_ICON, "blank") - if(world.maxx + offset_x > canvas.Width()) - crash_with("Minimap for z=[zlevel] : world.maxx ([world.maxx]) + holomap_offset_x ([offset_x]) must be <= [canvas.Width()]") - if(world.maxy + offset_y > canvas.Height()) - crash_with("Minimap for z=[zlevel] : world.maxy ([world.maxy]) + holomap_offset_y ([offset_y]) must be <= [canvas.Height()]") + var/icon/canvas = icon('icons/255x255.dmi', "blank") + if(world.maxx > canvas.Width()) + crash_with("Minimap for z=[zlevel] : world.maxx ([world.maxx]) must be <= [canvas.Width()]") + if(world.maxy > canvas.Height()) + crash_with("Minimap for z=[zlevel] : world.maxy ([world.maxy]) must be <= [canvas.Height()]") var/turf/T var/area/A @@ -90,30 +91,13 @@ SUBSYSTEM_DEF(holomap) T = thing A = T.loc if (A.holomap_color) - canvas.DrawBox(A.holomap_color, T.x + offset_x, T.y + offset_y) - - // Save this nice area-colored canvas in case we want to layer it or something I guess - extra_minimaps["[HOLOMAP_EXTRA_STATIONMAPAREAS]_[zlevel]"] = canvas + canvas.DrawBox(A.holomap_color + "99", T.x, T.y) - var/icon/map_base = icon(holo_minimaps[zlevel]) + var/icon/map_base = icon(minimaps[zlevel]) map_base.Blend(HOLOMAP_HOLOFIER, ICON_MULTIPLY) // Generate the full sized map by blending the base and areas onto the backdrop - var/icon/big_map = icon(HOLOMAP_ICON, "stationmap") + var/icon/big_map = icon('icons/255x255.dmi', "blank") big_map.Blend(map_base, ICON_OVERLAY) big_map.Blend(canvas, ICON_OVERLAY) - extra_minimaps["[HOLOMAP_EXTRA_STATIONMAP]_[zlevel]"] = big_map - - // Generate the "small" map (I presume for putting on wall map things?) - var/icon/small_map = icon(HOLOMAP_ICON, "blank") - small_map.Blend(map_base, ICON_OVERLAY) - small_map.Blend(canvas, ICON_OVERLAY) - small_map.Scale(WORLD_ICON_SIZE, WORLD_ICON_SIZE) - - // And rotate it in every direction of course! - var/icon/actual_small_map = icon(small_map) - actual_small_map.Insert(new_icon = small_map, dir = SOUTH) - actual_small_map.Insert(new_icon = turn(small_map, 90), dir = WEST) - actual_small_map.Insert(new_icon = turn(small_map, 180), dir = NORTH) - actual_small_map.Insert(new_icon = turn(small_map, 270), dir = EAST) - extra_minimaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[zlevel]"] = actual_small_map + minimaps_area_colored_base64[zlevel] = icon2base64(big_map) diff --git a/code/controllers/subsystems/initialization/misc_early.dm b/code/controllers/subsystems/initialization/misc_early.dm index bc08873202e..e656af280cc 100644 --- a/code/controllers/subsystems/initialization/misc_early.dm +++ b/code/controllers/subsystems/initialization/misc_early.dm @@ -18,7 +18,6 @@ SUBSYSTEM_DEF(misc_early) global_hud.thermal, global_hud.meson, global_hud.science, - global_hud.holomap ) // Populate global list of tips by category diff --git a/code/game/machinery/station_holomap.dm b/code/game/machinery/station_holomap.dm deleted file mode 100644 index e61d99c0e3f..00000000000 --- a/code/game/machinery/station_holomap.dm +++ /dev/null @@ -1,245 +0,0 @@ -/obj/machinery/station_map - name = "holomap" - desc = "A virtual map of the surrounding area." - icon = 'icons/obj/machinery/stationmap.dmi' - icon_state = "station_map" - anchored = 1 - density = 0 - idle_power_usage = 10 - active_power_usage = 500 - - light_color = "#64C864" - light_power = 1 - light_range = 2 - gfi_layer_rotation = GFI_ROTATION_DEFDIR - - var/light_power_on = 1 - var/light_range_on = 2 - - layer = WINDOW_PANE_LAYER + 0.1 - - var/mob/watching_mob = null - var/image/small_station_map = null - var/image/floor_markings = null - var/image/panel = null - - var/original_zLevel = 1 // zLevel on which the station map was initialized. - var/bogus = TRUE // set to 0 when you initialize the station map on a zLevel that has its own icon formatted for use by station holomaps. - var/datum/station_holomap/holomap_datum - -/obj/machinery/station_map/Destroy() - SSholomap.station_holomaps -= src - stopWatching() - QDEL_NULL(holomap_datum) - return ..() - -/obj/machinery/station_map/Initialize() - . = ..() - init_map() - create_small_map() - add_floor_decal() - -/obj/machinery/station_map/proc/init_map() - holomap_datum = new() - original_zLevel = loc.z - SSholomap.station_holomaps += src - flags |= ON_BORDER // Why? It doesn't help if its not density - bogus = FALSE - var/turf/T = get_turf(src) - original_zLevel = T.z - if(!("[HOLOMAP_EXTRA_STATIONMAP]_[original_zLevel]" in SSholomap.extra_minimaps)) - bogus = TRUE - holomap_datum.initialize_holomap_bogus() - update_icon() - return - - holomap_datum.initialize_holomap(T, reinit = TRUE) - -/obj/machinery/station_map/proc/create_small_map() - small_station_map = image(SSholomap.extra_minimaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[original_zLevel]"], dir = dir) - small_station_map.layer = EFFECTS_ABOVE_LIGHTING_LAYER - small_station_map.filters = filter(type = "drop_shadow", color = light_color + "F0", size = 1, offset = 1, x = 0, y = 0) - -/obj/machinery/station_map/proc/add_floor_decal() - floor_markings = image('icons/obj/machinery/stationmap.dmi', "decal_station_map") - floor_markings.dir = src.dir - floor_markings.layer = ON_TURF_LAYER - update_icon() - -/obj/machinery/station_map/attack_hand(var/mob/user) - if(watching_mob && (watching_mob != user)) - to_chat(user, "Someone else is currently watching the holomap.") - return - if(user.loc != loc) - to_chat(user, "You need to stand in front of \the [src].") - return - startWatching(user) - -// Let people bump up against it to watch -/obj/machinery/station_map/CollidedWith(var/atom/movable/AM) - if(!watching_mob && isliving(AM) && AM.loc == loc) - startWatching(AM) - -// In order to actually get CollidedWith() we need to block movement. We're (visually) on a wall, so people -// couldn't really walk into us anyway. But in reality we are on the turf in front of the wall, so bumping -// against where we seem is actually trying to *exit* our real loc -/obj/machinery/station_map/CheckExit(atom/movable/mover as mob|obj, turf/target as turf) - // LOG_DEBUG("[src] (dir=[dir]) CheckExit([mover], [target]) get_dir() = [get_dir(target, loc)]") - if(get_dir(target, loc) == dir) // Opposite of "normal" since we are visually in the next turf over - return FALSE - else - return TRUE - -/obj/machinery/station_map/proc/startWatching(var/mob/user) - if(isliving(user) && anchored && !(stat & (NOPOWER|BROKEN))) - if(user.client) - holomap_datum.station_map.loc = global_hud.holomap // Put the image on the holomap hud - holomap_datum.station_map.alpha = 0 // Set to transparent so we can fade in - animate(holomap_datum.station_map, alpha = 255, time = 5, easing = LINEAR_EASING) - flick("station_map_activate", src) - user.client.screen |= global_hud.holomap - user.client.images |= holomap_datum.station_map - - watching_mob = user - moved_event.register(watching_mob, src, PROC_REF(checkPosition)) - destroyed_event.register(watching_mob, src, PROC_REF(stopWatching)) - update_use_power(POWER_USE_ACTIVE) - - if(bogus) - to_chat(user, "The holomap failed to initialize. This area of space cannot be mapped.") - else - to_chat(user, "A hologram of the station appears before your eyes.") - -/obj/machinery/station_map/attack_ai(var/mob/living/silicon/robot/user) - return // TODO - Implement for AI ~Leshana - // user.station_holomap.toggleHolomap(user, isAI(user)) - -/obj/machinery/station_map/process() - if((stat & (NOPOWER|BROKEN)) || !anchored) - stopWatching() - -/obj/machinery/station_map/proc/checkPosition() - if(!watching_mob || (watching_mob.loc != loc) || (dir != watching_mob.dir)) - stopWatching() - -/obj/machinery/station_map/proc/stopWatching() - if(watching_mob) - if(watching_mob.client) - animate(holomap_datum.station_map, alpha = 0, time = 5, easing = LINEAR_EASING) - var/mob/M = watching_mob - addtimer(CALLBACK(src, PROC_REF(clear_image), M, holomap_datum.station_map), 5, TIMER_CLIENT_TIME)//we give it time to fade out - moved_event.unregister(watching_mob, src) - destroyed_event.unregister(watching_mob, src) - watching_mob = null - update_use_power(POWER_USE_IDLE) - -/obj/machinery/station_map/proc/clear_image(mob/M, image/I) - if (M.client) - M.client.images -= I - -/obj/machinery/station_map/power_change() - . = ..() - update_icon() - if(stat & NOPOWER) // Maybe port /vg/'s autolights? Done manually for now. - set_light(0) - else - set_light(light_range_on, light_power_on) - -/obj/machinery/station_map/proc/set_broken() - stat |= BROKEN - update_icon() - -/obj/machinery/station_map/update_icon() - cut_overlays() - if(stat & BROKEN) - icon_state = "station_mapb" - else if((stat & NOPOWER) || !anchored) - icon_state = "station_map0" - else - icon_state = "station_map" - - if(bogus) - holomap_datum.initialize_holomap_bogus() - else - small_station_map.icon = SSholomap.extra_minimaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[original_zLevel]"] - add_overlay(small_station_map) - holomap_datum.initialize_holomap(get_turf(src)) - - // Put the little "map" overlay down where it looks nice - if(floor_markings) - floor_markings.dir = src.dir - floor_markings.pixel_x = -src.pixel_x - floor_markings.pixel_y = -src.pixel_y - add_overlay(floor_markings) - - if(panel_open) - add_overlay("station_map-panel") - else - cut_overlay("station_map-panel") - -/obj/machinery/station_map/ex_act(severity) - switch(severity) - if(1) - qdel(src) - if(2) - if (prob(50)) - qdel(src) - else - set_broken() - if(3) - if (prob(25)) - set_broken() - -// TODO: Make these constructable. - -/obj/machinery/station_map/mobile - use_power = POWER_USE_OFF - idle_power_usage = 0 - active_power_usage = 0 - -/obj/machinery/station_map/mobile/Initialize() - SHOULD_CALL_PARENT(FALSE) - init_map() - - initialized = TRUE - return INITIALIZE_HINT_NORMAL - -/obj/machinery/station_map/mobile/startWatching(var/mob/user) - if(!user) - return - - create_small_map() - if(!watching_mob && isliving(user)) - ..() - -// Simple datum to keep track of a running holomap. Each machine capable of displaying the holomap will have one. -/datum/station_holomap - var/image/station_map - var/image/cursor - var/image/legend - -/datum/station_holomap/proc/initialize_holomap(turf/T, isAI = null, mob/user = null, reinit = FALSE) - if(!station_map || reinit) - station_map = image(SSholomap.extra_minimaps["[HOLOMAP_EXTRA_STATIONMAP]_[T.z]"]) - if(!cursor || reinit) - cursor = image('icons/misc/holomap_markers.dmi', "you") - if(!legend || reinit) - legend = image('icons/effects/64x64.dmi', "legend") - - if(isAI) - T = get_turf(user.client.eye) - cursor.pixel_x = (T.x - 6 + HOLOMAP_PIXEL_OFFSET_X(T.z)) * PIXEL_MULTIPLIER - cursor.pixel_y = (T.y - 6 + HOLOMAP_PIXEL_OFFSET_Y(T.z)) * PIXEL_MULTIPLIER - - legend.pixel_x = HOLOMAP_LEGEND_X(T.z) - legend.pixel_y = HOLOMAP_LEGEND_Y(T.z) - - station_map.add_overlay(cursor) - station_map.add_overlay(legend) - -/datum/station_holomap/proc/initialize_holomap_bogus() - station_map = image('icons/480x480.dmi', "stationmap") - legend = image('icons/effects/64x64.dmi', "notfound") - legend.pixel_x = 7 * WORLD_ICON_SIZE - legend.pixel_y = 7 * WORLD_ICON_SIZE - station_map.add_overlay(legend) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 634546d1e7e..2151bc8aabe 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -507,22 +507,6 @@ to_chat(src, SPAN_NOTICE("You [C.toggled ? "disable" : "enable"] [C.name].")) C.toggled = !C.toggled -/mob/living/silicon/robot/verb/view_holomap() - set category = "Robot Commands" - set name = "View Holomap" - set desc = "View a virtual map of the surrounding area." - - var/obj/machinery/station_map/mobile/holo_map_object - if(src.holo_map) - holo_map_object = src.holo_map.resolve() - - // Not an else because weakref.resolve() can return false. Edge case - if(!holo_map_object) - holo_map_object = new(src) - src.holo_map = WEAKREF(holo_map) - - holo_map_object.startWatching(src) - /mob/living/silicon/robot/verb/rebuild_overlays() set category = "Robot Commands" set name = "Rebuild Overlays" diff --git a/code/modules/modular_computers/file_system/programs/app_presets.dm b/code/modules/modular_computers/file_system/programs/app_presets.dm deleted file mode 100644 index 129a07efe87..00000000000 --- a/code/modules/modular_computers/file_system/programs/app_presets.dm +++ /dev/null @@ -1,685 +0,0 @@ -/datum/modular_computer_app_presets - var/name = "default_preset" - var/display_name = "default preset" - var/description = "Description of the preset." - var/available = FALSE - -/datum/modular_computer_app_presets/proc/return_install_programs(var/obj/item/modular_computer/comp) - return list() - -/datum/modular_computer_app_presets/all - name = "all" - display_name = "All Programs" - description = "Contains all programs." - available = FALSE - -/datum/modular_computer_app_presets/all/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list() - for(var/F in typesof(/datum/computer_file/program)) - var/datum/computer_file/program/prog = new F(comp) - _prg_list += prog - return _prg_list - -/datum/modular_computer_app_presets/engineering - name = "engineering" - display_name = "Engineering" - description = "Contains the most common engineering programs." - available = TRUE - -/datum/modular_computer_app_presets/engineering/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/power_monitor(comp), - new /datum/computer_file/program/alarm_monitor/engineering(comp), - new /datum/computer_file/program/atmos_control(comp), - new /datum/computer_file/program/rcon_console(comp), - new /datum/computer_file/program/camera_monitor(comp), - new /datum/computer_file/program/lighting_control(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/engineering/atmos - name = "atmos" - display_name = "Engineering - Atmospherics" - description = "Contains the most common engineering programs and atmospheric monitoring software." - available = TRUE - -/datum/modular_computer_app_presets/engineering/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/power_monitor(comp), - new /datum/computer_file/program/alarm_monitor/engineering(comp), - new /datum/computer_file/program/atmos_control(comp), - new /datum/computer_file/program/rcon_console(comp), - new /datum/computer_file/program/camera_monitor(comp), - new /datum/computer_file/program/lighting_control(comp), - new /datum/computer_file/program/scanner/gas(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/engineering/ce - name = "engineering_head" - display_name = "Engineering - CE" - description = "Contains the most common engineering programs and command software." - available = FALSE - -/datum/modular_computer_app_presets/engineering/ce/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/comm(comp, FALSE), - new /datum/computer_file/program/power_monitor(comp), - new /datum/computer_file/program/alarm_monitor/engineering(comp), - new /datum/computer_file/program/atmos_control(comp), - new /datum/computer_file/program/rcon_console(comp), - new /datum/computer_file/program/camera_monitor(comp), - new /datum/computer_file/program/lighting_control(comp), - new /datum/computer_file/program/records/employment(comp), - new /datum/computer_file/program/scanner/gas(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/medical - name = "medical" - display_name = "Medical" - description = "Contains the most common medical programs." - available = TRUE - -/datum/modular_computer_app_presets/medical/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/suit_sensors(comp), - new /datum/computer_file/program/records/medical(comp), - new /datum/computer_file/program/chemistry_codex(comp), - new /datum/computer_file/program/scanner/medical(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/medical/cmo - name = "medical_head" - display_name = "Medical - CMO" - description = "Contains the most common medical programs and command software." - available = FALSE - -/datum/modular_computer_app_presets/medical/cmo/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/comm(comp, FALSE), - new /datum/computer_file/program/suit_sensors(comp), - new /datum/computer_file/program/records/employment(comp), - new /datum/computer_file/program/records/medical(comp), - new /datum/computer_file/program/chemistry_codex(comp), - new /datum/computer_file/program/scanner/medical(comp), - new /datum/computer_file/program/scanner/science(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/research - name = "research" - display_name = "Research" - description = "Contains the most common research programs." - available = TRUE - -/datum/modular_computer_app_presets/research/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/ntnetmonitor(comp), - new /datum/computer_file/program/aidiag(comp), - new /datum/computer_file/program/chemistry_codex(comp), - new /datum/computer_file/program/scanner/science(comp), - new /datum/computer_file/program/scanner/gas(comp), - new /datum/computer_file/program/away_manifest(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/research/rd - name = "research_head" - display_name = "Research - RD" - description = "Contains the most common research programs and command software." - available = FALSE - -/datum/modular_computer_app_presets/research/rd/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/comm(comp, FALSE), - new /datum/computer_file/program/ntnetmonitor(comp), - new /datum/computer_file/program/records/employment(comp), - new /datum/computer_file/program/chemistry_codex(comp), - new /datum/computer_file/program/scanner/science(comp), - new /datum/computer_file/program/away_manifest(comp), - new /datum/computer_file/program/scanner/gas(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/command - name = "command" - display_name = "Command" - description = "Contains the most common command programs." - available = TRUE - -/datum/modular_computer_app_presets/command/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/card_mod(comp), - new /datum/computer_file/program/comm(comp, TRUE), - new /datum/computer_file/program/docks(comp), - new /datum/computer_file/program/away_manifest(comp), - new /datum/computer_file/program/records/employment(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/command/teleporter - name = "command_teleporter" - display_name = "Command - Teleporter" - description = "Contains the most common command programs and has a special teleporter control program loaded." - available = FALSE - -/datum/modular_computer_app_presets/command/teleporter/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/comm(comp, FALSE), - new /datum/computer_file/program/records/employment(comp), - new /datum/computer_file/program/teleporter(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/command/teleporter/ninja - name = "ninja_teleporter" - display_name = "Offsite - Teleporter" - description = "Contains the most common command programs and has a special teleporter control program loaded." - available = FALSE - -/datum/modular_computer_app_presets/command/teleporter/ninja/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/comm(comp, FALSE), - new /datum/computer_file/program/records/employment(comp), - new /datum/computer_file/program/teleporter/ninja(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/command/hop - name = "command_hop" - display_name = "Command - HoP" - description = "Contains the most common command programs." - available = FALSE - -/datum/modular_computer_app_presets/command/hop/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/civilian/cargocontrol(comp), - new /datum/computer_file/program/card_mod(comp), - new /datum/computer_file/program/comm(comp, FALSE), - new /datum/computer_file/program/docks(comp), - new /datum/computer_file/program/away_manifest(comp), - new /datum/computer_file/program/records/employment(comp), - new /datum/computer_file/program/records/security(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/command/captain - name = "captain" - display_name = "Captain" - description = "Contains the most important programs for the Captain." - available = FALSE - -/datum/modular_computer_app_presets/command/captain/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/card_mod(comp), - new /datum/computer_file/program/comm(comp, TRUE), - new /datum/computer_file/program/docks(comp), - new /datum/computer_file/program/away_manifest(comp), - new /datum/computer_file/program/camera_monitor(comp), - new /datum/computer_file/program/digitalwarrant(comp), - new /datum/computer_file/program/penal_mechs(comp), - new /datum/computer_file/program/civilian/cargocontrol(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/alarm_monitor/all(comp), - new /datum/computer_file/program/records/employment(comp), - new /datum/computer_file/program/records/medical(comp), - new /datum/computer_file/program/records/security(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/command/account - name = "command_accounting" - display_name = "Command - Accounting" - description = "Contains all the programs you would need to become a god-tier accountant." - available = FALSE - -/datum/modular_computer_app_presets/command/account/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/civilian/cargocontrol(comp), - new /datum/computer_file/program/records/employment(comp), - new /datum/computer_file/program/account_db(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/command/account/centcomm/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/civilian/cargocontrol(comp), - new /datum/computer_file/program/records/employment(comp), - new /datum/computer_file/program/account_db(comp, TRUE) - ) - return _prg_list - -/datum/modular_computer_app_presets/security - name = "security" - display_name = "Security" - description = "Contains the most common security programs." - available = TRUE - -/datum/modular_computer_app_presets/security/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/alarm_monitor/security(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/camera_monitor(comp), - new /datum/computer_file/program/digitalwarrant(comp), - new /datum/computer_file/program/penal_mechs(comp), - new /datum/computer_file/program/records/security(comp), - new /datum/computer_file/program/guntracker(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/security/armory - name = "security_arm" - display_name = "Security - Armory" - description = "Contains the most common security and armory programs." - available = FALSE - -/datum/modular_computer_app_presets/security/armory/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/alarm_monitor/security(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/camera_monitor(comp), - new /datum/computer_file/program/comm(comp), - new /datum/computer_file/program/digitalwarrant(comp), - new /datum/computer_file/program/penal_mechs(comp), - new /datum/computer_file/program/records/security(comp), - new /datum/computer_file/program/guntracker(comp), - new /datum/computer_file/program/implant_tracker(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/security/investigations - name = "security_inv" - display_name = "Security - Investigations" - description = "Contains the most common security and forensics programs." - available = TRUE - -/datum/modular_computer_app_presets/security/investigations/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/alarm_monitor/security(comp), - new /datum/computer_file/program/camera_monitor(comp), - new /datum/computer_file/program/digitalwarrant(comp), - new /datum/computer_file/program/records/security(comp), - new /datum/computer_file/program/records/medical(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/security/hos - name = "security_head" - display_name = "Security - HoS" - description = "Contains the most common security programs and command software." - available = FALSE - -/datum/modular_computer_app_presets/security/hos/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/alarm_monitor/security(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/comm(comp, FALSE), - new /datum/computer_file/program/camera_monitor(comp), - new /datum/computer_file/program/digitalwarrant(comp), - new /datum/computer_file/program/penal_mechs(comp), - new /datum/computer_file/program/records/security(comp), - new /datum/computer_file/program/records/employment(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/civilian - name = "service" - display_name = "Service" - description = "Contains the most common service programs." - available = TRUE - -/datum/modular_computer_app_presets/civilian/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/game/arcade(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/civilian/janitor - name = "janitor" - display_name = "Janitor" - description = "Contains programs for janitorial service." - available = TRUE - -/datum/modular_computer_app_presets/civilian/janitor/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/civilian/janitor(comp), - new /datum/computer_file/program/game/arcade(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/supply - name = "supply" - display_name = "Supply" - description = "Contains the most common cargo programs." - available = TRUE - -/datum/modular_computer_app_presets/supply/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargocontrol(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/civilian/cargodelivery(comp), - new /datum/computer_file/program/away_manifest(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/supply/om - name = "operations manager" - display_name = "Operations Manager" - description = "Contains the most common cargo programs as well as the OM's ones." - available = FALSE - -/datum/modular_computer_app_presets/supply/om/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargocontrol(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/civilian/cargodelivery(comp), - new /datum/computer_file/program/comm(comp, FALSE), - new /datum/computer_file/program/docks(comp), - new /datum/computer_file/program/away_manifest(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/cargo_delivery - name = "cargo_delivery" - display_name = "Cargo Delivery" - description = "Contains the Delivery App." - available = FALSE - -/datum/modular_computer_app_presets/cargo_delivery/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargodelivery(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/supply/machinist - name = "operations_machinist" - display_name = "Operations - Machinist" - description = "Contains the most common supply programs and medical record software." - available = TRUE - -/datum/modular_computer_app_presets/supply/machinist/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/aidiag(comp), - new /datum/computer_file/program/records/medical(comp), - new /datum/computer_file/program/scanner/science(comp), - new /datum/computer_file/program/scanner/gas(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/representative - name = "representative" - display_name = "Representative" - description = "Contains software intended for representatives." - available = FALSE - -/datum/modular_computer_app_presets/representative/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/records/employment(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/wall_generic - name = "wallgeneric" - display_name = "Wall - Generic" - description = "A generic preset for the wall console." - available = FALSE - -/datum/modular_computer_app_presets/wall_generic/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/civilian/cargoorder(comp), - new /datum/computer_file/program/camera_monitor(comp), - new /datum/computer_file/program/alarm_monitor/engineering(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/merc - name = "merc" - display_name = "Mercenary" - description = "Preset for the Merc Console." - available = FALSE - -/datum/modular_computer_app_presets/merc/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/camera_monitor/hacked(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/ert - name = "ert" - display_name = "EmergencyResposeTeam" - description = "Preset for the ERT Console." - available = FALSE - -/datum/modular_computer_app_presets/ert/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/ntnetdownload(comp), - new /datum/computer_file/program/camera_monitor/hacked(comp), - new /datum/computer_file/program/comm(comp, FALSE), - new /datum/computer_file/program/suit_sensors(comp), - new /datum/computer_file/program/alarm_monitor/all(comp), - new /datum/computer_file/program/lighting_control(comp), - new /datum/computer_file/program/aidiag(comp), - new /datum/computer_file/program/records(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/trashcompactor - name = "trashcompactor" - display_name = "Trash Compactor" - description = "A preset for the Trash Compactor Wall Console." - available = FALSE - -/datum/modular_computer_app_presets/trashcompactor/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/crushercontrol(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/merchant - name = "merchant" - display_name = "Merchant" - description = "A preset for the merchant console." - available = FALSE - -/datum/modular_computer_app_presets/merchant/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/merchant(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/merchant/nka/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/merchant/nka(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/merchant/guild/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/merchant/guild(comp) - ) - return _prg_list - - -/datum/modular_computer_app_presets/merchant/golden_deep/return_install_programs(obj/item/modular_computer/comp) - var/list/_prg_list = list( - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/manifest(comp), - new /datum/computer_file/program/newsbrowser(comp), - new /datum/computer_file/program/chat_client(comp), - new /datum/computer_file/program/merchant/golden_deep(comp) - ) - return _prg_list - -/datum/modular_computer_app_presets/ai - name = "ai" - display_name = "AI" - description = "A preset for the AI consoles." - available = FALSE - -/datum/modular_computer_app_presets/ai/return_install_programs(obj/item/modular_computer/comp) - return list( - new /datum/computer_file/program/filemanager(comp), - new /datum/computer_file/program/ntnetdownload(comp) - ) diff --git a/code/modules/modular_computers/file_system/programs/app_presets_.dm b/code/modules/modular_computers/file_system/programs/app_presets_.dm new file mode 100644 index 00000000000..a05754061d9 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/app_presets_.dm @@ -0,0 +1,68 @@ +/datum/modular_computer_app_presets + var/name = "default_preset" + var/display_name = "default preset" + var/description = "Description of the preset." + var/available = FALSE + +/datum/modular_computer_app_presets/proc/return_install_programs(var/obj/item/modular_computer/comp) + return list() + +/datum/modular_computer_app_presets/all + name = "all" + display_name = "All Programs" + description = "Contains all programs." + available = FALSE + +/datum/modular_computer_app_presets/all/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list() + for(var/F in typesof(/datum/computer_file/program)) + var/datum/computer_file/program/prog = new F(comp) + _prg_list += prog + return flatten_list(_prg_list) + +#define COMPUTER_APP_PRESET_SYSTEM list(\ + new /datum/computer_file/program/ntnetdownload(comp),\ + new /datum/computer_file/program/filemanager(comp),\ +) + +#define COMPUTER_APP_PRESET_HORIZON_CIVILIAN list(\ + new /datum/computer_file/program/newsbrowser(comp),\ + new /datum/computer_file/program/manifest(comp),\ + new /datum/computer_file/program/chat_client(comp),\ + new /datum/computer_file/program/civilian/cargoorder(comp),\ + new /datum/computer_file/program/map(comp),\ +) + +#define COMPUTER_APP_PRESET_HORIZON_ENGINEERING list(\ + new /datum/computer_file/program/power_monitor(comp),\ + new /datum/computer_file/program/alarm_monitor/engineering(comp),\ + new /datum/computer_file/program/atmos_control(comp),\ + new /datum/computer_file/program/rcon_console(comp),\ + new /datum/computer_file/program/camera_monitor(comp),\ + new /datum/computer_file/program/lighting_control(comp)\ +) + +#define COMPUTER_APP_PRESET_HORIZON_MEDICAL list(\ + new /datum/computer_file/program/suit_sensors(comp),\ + new /datum/computer_file/program/records/medical(comp),\ + new /datum/computer_file/program/chemistry_codex(comp),\ + new /datum/computer_file/program/scanner/medical(comp),\ +) + +#define COMPUTER_APP_PRESET_HORIZON_RESEARCH list(\ + new /datum/computer_file/program/ntnetmonitor(comp),\ + new /datum/computer_file/program/aidiag(comp),\ + new /datum/computer_file/program/chemistry_codex(comp),\ + new /datum/computer_file/program/scanner/science(comp),\ + new /datum/computer_file/program/scanner/gas(comp),\ + new /datum/computer_file/program/away_manifest(comp),\ +) + +#define COMPUTER_APP_PRESET_HORIZON_SECURITY list(\ + new /datum/computer_file/program/alarm_monitor/security(comp),\ + new /datum/computer_file/program/camera_monitor(comp),\ + new /datum/computer_file/program/digitalwarrant(comp),\ + new /datum/computer_file/program/penal_mechs(comp),\ + new /datum/computer_file/program/records/security(comp),\ + new /datum/computer_file/program/guntracker(comp),\ +) diff --git a/code/modules/modular_computers/file_system/programs/app_presets_antag.dm b/code/modules/modular_computers/file_system/programs/app_presets_antag.dm new file mode 100644 index 00000000000..7e5c2feb5f7 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/app_presets_antag.dm @@ -0,0 +1,50 @@ + +/datum/modular_computer_app_presets/command/teleporter/ninja + name = "ninja_teleporter" + display_name = "Offsite - Teleporter" + description = "Contains the most common command programs and has a special teleporter control program loaded." + available = FALSE + +/datum/modular_computer_app_presets/command/teleporter/ninja/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + new /datum/computer_file/program/comm(comp, FALSE), + new /datum/computer_file/program/records/employment(comp), + new /datum/computer_file/program/teleporter/ninja(comp) + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/merc + name = "merc" + display_name = "Mercenary" + description = "Preset for the Merc Console." + available = FALSE + +/datum/modular_computer_app_presets/merc/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + new /datum/computer_file/program/newsbrowser(comp), + new /datum/computer_file/program/manifest(comp), + new /datum/computer_file/program/camera_monitor/hacked(comp) + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/ert + name = "ert" + display_name = "EmergencyResposeTeam" + description = "Preset for the ERT Console." + available = FALSE + +/datum/modular_computer_app_presets/ert/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + new /datum/computer_file/program/camera_monitor/hacked(comp), + new /datum/computer_file/program/comm(comp, FALSE), + new /datum/computer_file/program/suit_sensors(comp), + new /datum/computer_file/program/alarm_monitor/all(comp), + new /datum/computer_file/program/lighting_control(comp), + new /datum/computer_file/program/aidiag(comp), + new /datum/computer_file/program/records(comp) + ) + return flatten_list(_prg_list) diff --git a/code/modules/modular_computers/file_system/programs/app_presets_crew.dm b/code/modules/modular_computers/file_system/programs/app_presets_crew.dm new file mode 100644 index 00000000000..d797f06f838 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/app_presets_crew.dm @@ -0,0 +1,328 @@ + +/datum/modular_computer_app_presets/engineering + name = "engineering" + display_name = "Engineering" + description = "Contains the most common engineering programs." + available = TRUE + +/datum/modular_computer_app_presets/engineering/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + COMPUTER_APP_PRESET_HORIZON_ENGINEERING, + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/engineering/atmos + name = "atmos" + display_name = "Engineering - Atmospherics" + description = "Contains the most common engineering programs and atmospheric monitoring software." + available = TRUE + +/datum/modular_computer_app_presets/engineering/atmos/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + COMPUTER_APP_PRESET_HORIZON_ENGINEERING, + new /datum/computer_file/program/scanner/gas(comp) + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/engineering/ce + name = "engineering_head" + display_name = "Engineering - CE" + description = "Contains the most common engineering programs and command software." + available = FALSE + +/datum/modular_computer_app_presets/engineering/ce/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + COMPUTER_APP_PRESET_HORIZON_ENGINEERING, + new /datum/computer_file/program/scanner/gas(comp), + new /datum/computer_file/program/comm(comp, FALSE), + new /datum/computer_file/program/records/employment(comp), + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/medical + name = "medical" + display_name = "Medical" + description = "Contains the most common medical programs." + available = TRUE + +/datum/modular_computer_app_presets/medical/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + COMPUTER_APP_PRESET_HORIZON_MEDICAL, + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/medical/cmo + name = "medical_head" + display_name = "Medical - CMO" + description = "Contains the most common medical programs and command software." + available = FALSE + +/datum/modular_computer_app_presets/medical/cmo/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + COMPUTER_APP_PRESET_HORIZON_MEDICAL, + new /datum/computer_file/program/comm(comp, FALSE), + new /datum/computer_file/program/records/employment(comp), + new /datum/computer_file/program/scanner/science(comp), + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/research + name = "research" + display_name = "Research" + description = "Contains the most common research programs." + available = TRUE + +/datum/modular_computer_app_presets/research/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + COMPUTER_APP_PRESET_HORIZON_RESEARCH, + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/research/rd + name = "research_head" + display_name = "Research - RD" + description = "Contains the most common research programs and command software." + available = FALSE + +/datum/modular_computer_app_presets/research/rd/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + COMPUTER_APP_PRESET_HORIZON_RESEARCH, + new /datum/computer_file/program/comm(comp, FALSE), + new /datum/computer_file/program/records/employment(comp), + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/command + name = "command" + display_name = "Command" + description = "Contains the most common command programs." + available = TRUE + +/datum/modular_computer_app_presets/command/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + new /datum/computer_file/program/card_mod(comp), + new /datum/computer_file/program/comm(comp, TRUE), + new /datum/computer_file/program/docks(comp), + new /datum/computer_file/program/away_manifest(comp), + new /datum/computer_file/program/records/employment(comp), + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/command/hop + name = "command_hop" + display_name = "Command - HoP" + description = "Contains the most common command programs." + available = FALSE + +/datum/modular_computer_app_presets/command/hop/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + new /datum/computer_file/program/civilian/cargocontrol(comp), + new /datum/computer_file/program/card_mod(comp), + new /datum/computer_file/program/comm(comp, FALSE), + new /datum/computer_file/program/docks(comp), + new /datum/computer_file/program/away_manifest(comp), + new /datum/computer_file/program/records/employment(comp), + new /datum/computer_file/program/records/security(comp), + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/command/captain + name = "captain" + display_name = "Captain" + description = "Contains the most important programs for the Captain." + available = FALSE + +/datum/modular_computer_app_presets/command/captain/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + new /datum/computer_file/program/card_mod(comp), + new /datum/computer_file/program/comm(comp, TRUE), + new /datum/computer_file/program/docks(comp), + new /datum/computer_file/program/away_manifest(comp), + new /datum/computer_file/program/camera_monitor(comp), + new /datum/computer_file/program/digitalwarrant(comp), + new /datum/computer_file/program/penal_mechs(comp), + new /datum/computer_file/program/civilian/cargocontrol(comp), + new /datum/computer_file/program/alarm_monitor/all(comp), + new /datum/computer_file/program/records/employment(comp), + new /datum/computer_file/program/records/medical(comp), + new /datum/computer_file/program/records/security(comp), + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/security + name = "security" + display_name = "Security" + description = "Contains the most common security programs." + available = TRUE + +/datum/modular_computer_app_presets/security/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + COMPUTER_APP_PRESET_HORIZON_SECURITY, + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/security/armory + name = "security_arm" + display_name = "Security - Armory" + description = "Contains the most common security and armory programs." + available = FALSE + +/datum/modular_computer_app_presets/security/armory/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + COMPUTER_APP_PRESET_HORIZON_SECURITY, + new /datum/computer_file/program/implant_tracker(comp), + new /datum/computer_file/program/comm(comp), + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/security/investigations + name = "security_inv" + display_name = "Security - Investigations" + description = "Contains the most common security and forensics programs." + available = TRUE + +/datum/modular_computer_app_presets/security/investigations/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + new /datum/computer_file/program/alarm_monitor/security(comp), + new /datum/computer_file/program/camera_monitor(comp), + new /datum/computer_file/program/digitalwarrant(comp), + new /datum/computer_file/program/records/security(comp), + new /datum/computer_file/program/records/medical(comp), + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/security/hos + name = "security_head" + display_name = "Security - HoS" + description = "Contains the most common security programs and command software." + available = FALSE + +/datum/modular_computer_app_presets/security/hos/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + COMPUTER_APP_PRESET_HORIZON_SECURITY, + new /datum/computer_file/program/comm(comp, FALSE), + new /datum/computer_file/program/records/employment(comp), + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/civilian + name = "service" + display_name = "Service" + description = "Contains the most common service programs." + available = TRUE + +/datum/modular_computer_app_presets/civilian/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + new /datum/computer_file/program/game/arcade(comp), + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/civilian/janitor + name = "janitor" + display_name = "Janitor" + description = "Contains programs for janitorial service." + available = TRUE + +/datum/modular_computer_app_presets/civilian/janitor/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + new /datum/computer_file/program/civilian/janitor(comp), + new /datum/computer_file/program/game/arcade(comp), + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/supply + name = "supply" + display_name = "Supply" + description = "Contains the most common cargo programs." + available = TRUE + +/datum/modular_computer_app_presets/supply/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + new /datum/computer_file/program/civilian/cargocontrol(comp), + new /datum/computer_file/program/civilian/cargodelivery(comp), + new /datum/computer_file/program/away_manifest(comp), + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/supply/om + name = "operations manager" + display_name = "Operations Manager" + description = "Contains the most common cargo programs as well as the OM's ones." + available = FALSE + +/datum/modular_computer_app_presets/supply/om/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + new /datum/computer_file/program/civilian/cargocontrol(comp), + new /datum/computer_file/program/civilian/cargodelivery(comp), + new /datum/computer_file/program/away_manifest(comp), + new /datum/computer_file/program/comm(comp, FALSE), + new /datum/computer_file/program/docks(comp), + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/supply/machinist + name = "operations_machinist" + display_name = "Operations - Machinist" + description = "Contains the most common supply programs and medical record software." + available = TRUE + +/datum/modular_computer_app_presets/supply/machinist/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + new /datum/computer_file/program/aidiag(comp), + new /datum/computer_file/program/records/medical(comp), + new /datum/computer_file/program/scanner/science(comp), + new /datum/computer_file/program/scanner/gas(comp), + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/representative + name = "representative" + display_name = "Representative" + description = "Contains software intended for representatives." + available = FALSE + +/datum/modular_computer_app_presets/representative/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + new /datum/computer_file/program/records/employment(comp), + ) + return flatten_list(_prg_list) diff --git a/code/modules/modular_computers/file_system/programs/app_presets_equipment.dm b/code/modules/modular_computers/file_system/programs/app_presets_equipment.dm new file mode 100644 index 00000000000..18219cd32a1 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/app_presets_equipment.dm @@ -0,0 +1,100 @@ + +/datum/modular_computer_app_presets/wall_generic + name = "wallgeneric" + display_name = "Wall - Generic" + description = "A generic preset for the wall console." + available = FALSE + +/datum/modular_computer_app_presets/wall_generic/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + new /datum/computer_file/program/manifest(comp), + new /datum/computer_file/program/chat_client(comp), + new /datum/computer_file/program/civilian/cargoorder(comp), + new /datum/computer_file/program/camera_monitor(comp), + new /datum/computer_file/program/alarm_monitor/engineering(comp) + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/ai + name = "ai" + display_name = "AI" + description = "A preset for the AI consoles." + available = FALSE + +/datum/modular_computer_app_presets/ai/return_install_programs(obj/item/modular_computer/comp) + return list( + COMPUTER_APP_PRESET_SYSTEM, + ) + +/datum/modular_computer_app_presets/command/teleporter + name = "command_teleporter" + display_name = "Command - Teleporter" + description = "Contains the most common command programs and has a special teleporter control program loaded." + available = FALSE + +/datum/modular_computer_app_presets/command/teleporter/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + new /datum/computer_file/program/comm(comp, FALSE), + new /datum/computer_file/program/records/employment(comp), + new /datum/computer_file/program/teleporter(comp) + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/command/account + name = "command_accounting" + display_name = "Command - Accounting" + description = "Contains all the programs you would need to become a god-tier accountant." + available = FALSE + +/datum/modular_computer_app_presets/command/account/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + new /datum/computer_file/program/newsbrowser(comp), + new /datum/computer_file/program/manifest(comp), + new /datum/computer_file/program/civilian/cargoorder(comp), + new /datum/computer_file/program/civilian/cargocontrol(comp), + new /datum/computer_file/program/records/employment(comp), + new /datum/computer_file/program/account_db(comp) + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/command/account/centcomm/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + new /datum/computer_file/program/newsbrowser(comp), + new /datum/computer_file/program/manifest(comp), + new /datum/computer_file/program/civilian/cargoorder(comp), + new /datum/computer_file/program/civilian/cargocontrol(comp), + new /datum/computer_file/program/records/employment(comp), + new /datum/computer_file/program/account_db(comp, TRUE) + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/trashcompactor + name = "trashcompactor" + display_name = "Trash Compactor" + description = "A preset for the Trash Compactor Wall Console." + available = FALSE + +/datum/modular_computer_app_presets/trashcompactor/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + new /datum/computer_file/program/crushercontrol(comp) + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/cargo_delivery + name = "cargo_delivery" + display_name = "Cargo Delivery" + description = "Contains the Delivery App." + available = FALSE + +/datum/modular_computer_app_presets/cargo_delivery/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + COMPUTER_APP_PRESET_SYSTEM, + COMPUTER_APP_PRESET_HORIZON_CIVILIAN, + new /datum/computer_file/program/civilian/cargodelivery(comp) + ) + return flatten_list(_prg_list) diff --git a/code/modules/modular_computers/file_system/programs/app_presets_third_party.dm b/code/modules/modular_computers/file_system/programs/app_presets_third_party.dm new file mode 100644 index 00000000000..305183e3f07 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/app_presets_third_party.dm @@ -0,0 +1,47 @@ + +/datum/modular_computer_app_presets/merchant + name = "merchant" + display_name = "Merchant" + description = "A preset for the merchant console." + available = FALSE + +/datum/modular_computer_app_presets/merchant/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + new /datum/computer_file/program/filemanager(comp), + new /datum/computer_file/program/manifest(comp), + new /datum/computer_file/program/newsbrowser(comp), + new /datum/computer_file/program/chat_client(comp), + new /datum/computer_file/program/merchant(comp) + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/merchant/nka/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + new /datum/computer_file/program/filemanager(comp), + new /datum/computer_file/program/manifest(comp), + new /datum/computer_file/program/newsbrowser(comp), + new /datum/computer_file/program/chat_client(comp), + new /datum/computer_file/program/merchant/nka(comp) + ) + return flatten_list(_prg_list) + +/datum/modular_computer_app_presets/merchant/guild/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + new /datum/computer_file/program/filemanager(comp), + new /datum/computer_file/program/manifest(comp), + new /datum/computer_file/program/newsbrowser(comp), + new /datum/computer_file/program/chat_client(comp), + new /datum/computer_file/program/merchant/guild(comp) + ) + return flatten_list(_prg_list) + + +/datum/modular_computer_app_presets/merchant/golden_deep/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + new /datum/computer_file/program/filemanager(comp), + new /datum/computer_file/program/manifest(comp), + new /datum/computer_file/program/newsbrowser(comp), + new /datum/computer_file/program/chat_client(comp), + new /datum/computer_file/program/merchant/golden_deep(comp) + ) + return flatten_list(_prg_list) diff --git a/code/modules/modular_computers/file_system/programs/generic/map.dm b/code/modules/modular_computers/file_system/programs/generic/map.dm new file mode 100644 index 00000000000..1f301858fec --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/generic/map.dm @@ -0,0 +1,55 @@ +/datum/computer_file/program/map + filename = "map" + filedesc = "Map Program" + extended_desc = "This program may be used to see the decks or levels of the vessel, station, or ship." + program_icon_state = "map" + program_key_icon_state = "lightblue_key" + color = LIGHT_COLOR_BLUE + size = 4 + requires_ntnet = TRUE + available_on_ntnet = TRUE + tgui_id = "Map" + + /// If zero/null, show the z-level of the user, otherwise show `z_override` z-level. + var/z_override = 0 + +/datum/computer_file/program/map/ui_data(mob/user) + var/list/data = list() + + // Gather data for computer header + var/headerdata = get_header_data(data["_PC"]) + if(headerdata) + data["_PC"] = headerdata + . = data + + var/z_level = z_override ? z_override : user.z + if(z_level in current_map.station_levels) + data["map_image"] = SSholomap.minimaps_area_colored_base64[z_level] + + data["user_x"] = user.x + data["user_y"] = user.y + data["user_z"] = user.z + data["station_levels"] = current_map.station_levels + data["z_override"] = z_override + + data["dept_colors_map"] = list( + list("d"="Command", "c"=HOLOMAP_AREACOLOR_COMMAND), + list("d"="Security", "c"=HOLOMAP_AREACOLOR_SECURITY), + list("d"="Medical", "c"=HOLOMAP_AREACOLOR_MEDICAL), + list("d"="Science", "c"=HOLOMAP_AREACOLOR_SCIENCE), + list("d"="Engineering", "c"=HOLOMAP_AREACOLOR_ENGINEERING), + list("d"="Operations", "c"=HOLOMAP_AREACOLOR_OPERATIONS), + list("d"="Civilian", "c"=HOLOMAP_AREACOLOR_CIVILIAN), + list("d"="Hallways", "c"=HOLOMAP_AREACOLOR_HALLWAYS), + list("d"="Dock", "c"=HOLOMAP_AREACOLOR_DOCK), + list("d"="Hangar", "c"=HOLOMAP_AREACOLOR_HANGAR), + ) + + return data + +/datum/computer_file/program/map/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + if(action == "z_override") + z_override = text2num(params["z_override"]) diff --git a/html/changelogs/DreamySkrell-minimap-program.yml b/html/changelogs/DreamySkrell-minimap-program.yml new file mode 100644 index 00000000000..bdcd6daefea --- /dev/null +++ b/html/changelogs/DreamySkrell-minimap-program.yml @@ -0,0 +1,42 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: DreamySkrell + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Adds PDA map program." + - rscdel: "Removes holomaps." diff --git a/icons/255x255.dmi b/icons/255x255.dmi new file mode 100644 index 0000000000000000000000000000000000000000..2e0e7e7a3cf12ae68ba01eb2b3e771b03dcb9b9d GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^|3R3M8A!4mo74%Um;-!5Tn`*LkmkKF1;}MA3GxeO zaCmkj4amu=3W+FjNi9w;$}A|!%+F(BsF)KRR!~&>{Y!Ac$FEPcymhtCojD)8A=Kca z@q