diff --git a/.github/workflows/autochangelog.yml b/.github/workflows/autochangelog.yml index cb6ecabe46..c9c628fa29 100644 --- a/.github/workflows/autochangelog.yml +++ b/.github/workflows/autochangelog.yml @@ -11,7 +11,7 @@ env: jobs: autochangelog: name: Autochangelog - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 if: github.event.pull_request.merged == true steps: - uses: /actions/checkout@v3 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c531d1ffd9..4dcbd75275 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ env: jobs: file_tests: name: Run Linters - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 - name: Ensure +x on CI directory @@ -36,7 +36,7 @@ jobs: dreamchecker: name: DreamChecker - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 @@ -57,14 +57,14 @@ jobs: ~/dreamchecker > ${GITHUB_WORKSPACE}/output-annotations.txt 2>&1 - name: Annotate Linter - uses: yogstation13/DreamAnnotate@v1 + uses: yogstation13/DreamAnnotate@v2 if: always() with: outputFile: output-annotations.txt unit_tests: name: Integration Tests - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 - name: Ensure +x on CI directory diff --git a/.github/workflows/render_nanomaps.yml b/.github/workflows/render_nanomaps.yml index d6f2622041..62076dca06 100644 --- a/.github/workflows/render_nanomaps.yml +++ b/.github/workflows/render_nanomaps.yml @@ -19,7 +19,7 @@ jobs: pull-requests: write # to create pull requests (repo-sync/pull-request) name: 'Generate NanoMaps' - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - name: Clone uses: actions/checkout@v3 diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index e67d2ad3ac..73ce3f01e8 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -170,7 +170,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin continue //Spread the fire. - if(prob( 50 + 50 * (firelevel/vsc.fire_firelevel_multiplier) ) && my_tile.CanPass(null, enemy_tile, 0,0) && enemy_tile.CanPass(null, my_tile, 0,0)) + if(prob( 50 + 50 * (firelevel/vsc.fire_firelevel_multiplier) ) && my_tile.CanPass(src, enemy_tile, 0,0) && enemy_tile.CanPass(src, my_tile, 0,0)) enemy_tile.create_fire(firelevel) else diff --git a/code/__defines/belly_modes_vr.dm b/code/__defines/belly_modes_vr.dm index 2d8f714fc4..7ac58ddf6b 100644 --- a/code/__defines/belly_modes_vr.dm +++ b/code/__defines/belly_modes_vr.dm @@ -21,6 +21,7 @@ #define DM_FLAG_AFFECTWORN 0x10 #define DM_FLAG_JAMSENSORS 0x20 #define DM_FLAG_FORCEPSAY 0x40 +#define DM_FLAG_SLOWBODY 0x80 //CHOMPAdd //Item related modes #define IM_HOLD "Hold" diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm index ed22966cbe..abaab99885 100644 --- a/code/__defines/chemistry.dm +++ b/code/__defines/chemistry.dm @@ -54,8 +54,9 @@ var/list/cheartstopper = list("potassium_chloride") // Thi #define MAX_PILL_SPRITE 24 //max icon state of the pill sprites #define MAX_BOTTLE_SPRITE 4 //max icon state of the pill sprites +#define MAX_PATCH_SPRITE 4 //max icon state of the patch sprites, CHOMPedit #define MAX_MULTI_AMOUNT 20 // Max number of pills/patches that can be made at once #define MAX_UNITS_PER_PILL 60 // Max amount of units in a pill #define MAX_UNITS_PER_PATCH 60 // Max amount of units in a patch #define MAX_UNITS_PER_BOTTLE 60 // Max amount of units in a bottle (it's volume) -#define MAX_CUSTOM_NAME_LEN 64 // Max length of a custom pill/condiment/whatever \ No newline at end of file +#define MAX_CUSTOM_NAME_LEN 64 // Max length of a custom pill/condiment/whatever diff --git a/code/__defines/input.dm b/code/__defines/input.dm index cbc703935a..16afe5a2f3 100644 --- a/code/__defines/input.dm +++ b/code/__defines/input.dm @@ -10,7 +10,7 @@ // Combine the held WASD and arrow keys together (OR) into byond N/S/E/W dir #define MOVEMENT_KEYS_TO_DIR(MK) ((((MK)>>4)|(MK))&(ALL_CARDINALS)) -// Bitflags for pressed modifier keys. +// Bitflags for pressed modifier keys. // Values chosen specifically to not conflict with dir bitfield, in case we want to smoosh them together. #define CTRL_KEY (1<<8) #define SHIFT_KEY (1<<9) diff --git a/code/__defines/misc_ch.dm b/code/__defines/misc_ch.dm index 0ea4cec334..126c925bba 100644 --- a/code/__defines/misc_ch.dm +++ b/code/__defines/misc_ch.dm @@ -1,3 +1,8 @@ +//Department defines +#define DEPARTMENT_NONCREW "Non crew" + +//Job defines +#define JOB_OUTSIDER "Outsider" //Material defines #define MAT_CARPET "red carpet" @@ -8,4 +13,4 @@ #define MAT_CARPET_SILVERBLUE "silver blue carpet" #define MAT_CARPET_PINK "pink carpet" #define MAT_CARPET_PURPLE "purple carpet" -#define MAT_CARPET_ORANGE "orange carpet" \ No newline at end of file +#define MAT_CARPET_ORANGE "orange carpet" diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index cb30162b73..0a8b333956 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -119,26 +119,3 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G #define FIRE_PRIORITY_CHAT 400 #define FIRE_PRIORITY_OVERLAYS 500 #define FIRE_PRIORITY_INPUT 1000 // This must always always be the max highest priority. Player input must never be lost. - -// Macro defining the actual code applying our overlays lists to the BYOND overlays list. (I guess a macro for speed) -// TODO - I don't really like the location of this macro define. Consider it. ~Leshana -#define COMPILE_OVERLAYS(A)\ - do {\ - var/list/oo = A.our_overlays;\ - var/list/po = A.priority_overlays;\ - if(LAZYLEN(po)){\ - if(LAZYLEN(oo)){\ - A.overlays = oo + po;\ - }\ - else{\ - A.overlays = po;\ - }\ - }\ - else if(LAZYLEN(oo)){\ - A.overlays = oo;\ - }\ - else{\ - A.overlays.Cut();\ - }\ - A.flags &= ~OVERLAY_QUEUED;\ - } while (FALSE) diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index e2bc37d93c..5e77b4b09c 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -54,7 +54,9 @@ input = copytext(input,1,max_length) if(extra) - input = replace_characters(input, list("\n"=" ","\t"=" ")) + var/temp_input = replace_characters(input, list("\n"=" ","\t"=" "))//one character is replaced by two + if(length(input) < (length(temp_input) - 6))//6 is the number of linebreaks allowed per message + input = replace_characters(temp_input,list(" "=" "))//replace again, this time the double spaces with single ones if(encode) // The below \ escapes have a space inserted to attempt to enable CI auto-checking of span class usage. Please do not remove the space. diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm index 700bbbfc57..e21d973b1b 100644 --- a/code/_helpers/type2type.dm +++ b/code/_helpers/type2type.dm @@ -98,12 +98,18 @@ if(!direction) return "" var/list/dirs = list() - if(direction & NORTH) dirs += "NORTH" - if(direction & SOUTH) dirs += "SOUTH" - if(direction & EAST) dirs += "EAST" - if(direction & WEST) dirs += "WEST" - if(direction & UP) dirs += "UP" - if(direction & DOWN) dirs += "DOWN" + if(direction & NORTH) + dirs += "NORTH" + if(direction & SOUTH) + dirs += "SOUTH" + if(direction & EAST) + dirs += "EAST" + if(direction & WEST) + dirs += "WEST" + if(direction & UP) + dirs += "UP" + if(direction & DOWN) + dirs += "DOWN" return dirs.Join(" ") // Converts an angle (degrees) into an ss13 direction @@ -287,21 +293,122 @@ return strtype return copytext(strtype, delim_pos) +// Concatenates a list of strings into a single string. A seperator may optionally be provided. +/proc/list2text(list/ls, sep) + if (ls.len <= 1) // Early-out code for empty or singleton lists. + return ls.len ? ls[1] : "" + + var/l = ls.len // Made local for sanic speed. + var/i = 0 // Incremented every time a list index is accessed. + + if (sep != null) + // Macros expand to long argument lists like so: sep, ls[++i], sep, ls[++i], sep, ls[++i], etc... + #define S1 sep, ls[++i] + #define S4 S1, S1, S1, S1 + #define S16 S4, S4, S4, S4 + #define S64 S16, S16, S16, S16 + + . = "[ls[++i]]" // Make sure the initial element is converted to text. + + // Having the small concatenations come before the large ones boosted speed by an average of at least 5%. + if (l-1 & 0x01) // 'i' will always be 1 here. + . = text("[][][]", ., S1) // Append 1 element if the remaining elements are not a multiple of 2. + if (l-i & 0x02) + . = text("[][][][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4. + if (l-i & 0x04) + . = text("[][][][][][][][][]", ., S4) // And so on.... + if (l-i & 0x08) + . = text("[][][][][][][][][][][][][][][][][]", ., S4, S4) + if (l-i & 0x10) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16) + if (l-i & 0x20) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16) + if (l-i & 0x40) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64) + while (l > i) // Chomp through the rest of the list, 128 elements at a time. + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64) + + #undef S64 + #undef S16 + #undef S4 + #undef S1 + else + // Macros expand to long argument lists like so: ls[++i], ls[++i], ls[++i], etc... + #define S1 ls[++i] + #define S4 S1, S1, S1, S1 + #define S16 S4, S4, S4, S4 + #define S64 S16, S16, S16, S16 + + . = "[ls[++i]]" // Make sure the initial element is converted to text. + + if (l-1 & 0x01) // 'i' will always be 1 here. + . += S1 // Append 1 element if the remaining elements are not a multiple of 2. + if (l-i & 0x02) + . = text("[][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4. + if (l-i & 0x04) + . = text("[][][][][]", ., S4) // And so on... + if (l-i & 0x08) + . = text("[][][][][][][][][]", ., S4, S4) + if (l-i & 0x10) + . = text("[][][][][][][][][][][][][][][][][]", ., S16) + if (l-i & 0x20) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16) + if (l-i & 0x40) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64) + while (l > i) // Chomp through the rest of the list, 128 elements at a time. + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64) + + #undef S64 + #undef S16 + #undef S4 + #undef S1 + +// Converts a string into a list by splitting the string at each delimiter found. (discarding the seperator) +/proc/text2list(text, delimiter="\n") + var/delim_len = length(delimiter) + if (delim_len < 1) + return list(text) + + . = list() + var/last_found = 1 + var/found + + do + found = findtext(text, delimiter, last_found, 0) + . += copytext(text, last_found, found) + last_found = found + delim_len + while (found) + /proc/type2parent(child) var/string_type = "[child]" var/last_slash = findlasttext(string_type, "/") - if(last_slash == 1) - switch(child) - if(/datum) - return null - if(/obj || /mob) - return /atom/movable - if(/area || /turf) - return /atom - else - return /datum + if (last_slash != 1) + return text2path(copytext(string_type, 1, last_slash)) + switch (child) + if (/datum) + return null + if (/obj, /mob) + return /atom/movable + if (/area, /turf) + return /atom + else + return /datum - return text2path(copytext(string_type, 1, last_slash)) //checks if a file exists and contains text //returns text as a string if these conditions are met @@ -315,4 +422,4 @@ error("File not found ([filename])") catch(var/exception/E) if(error_on_invalid_return) - error("Exception when loading file as string: [E]") \ No newline at end of file + error("Exception when loading file as string: [E]") diff --git a/code/controllers/subsystems/overlays.dm b/code/controllers/subsystems/overlays.dm index 92400e495b..25dbfbd62a 100644 --- a/code/controllers/subsystems/overlays.dm +++ b/code/controllers/subsystems/overlays.dm @@ -1,176 +1,149 @@ SUBSYSTEM_DEF(overlays) name = "Overlay" flags = SS_TICKER - wait = 1 + wait = 1 // SS_TICKER - Ticks priority = FIRE_PRIORITY_OVERLAYS init_order = INIT_ORDER_OVERLAY - var/list/queue // Queue of atoms needing overlay compiling (TODO-VERIFY!) - var/list/stats - var/list/overlay_icon_state_caches // Cache thing - var/list/overlay_icon_cache // Cache thing + /// The queue of atoms that need overlay updates. + var/static/tmp/list/queue = list() - var/static/image/stringbro - var/static/image/iconbro - var/static/image/appearance_bro + /// A list([icon] = list([state] = [appearance], ...), ...) cache of appearances. + var/static/tmp/list/state_cache = list() -/datum/controller/subsystem/overlays/PreInit() - overlay_icon_state_caches = list() - overlay_icon_cache = list() - queue = list() - stats = list() + /// A list([icon] = [appearance], ...) cache of appearances. + var/static/tmp/list/icon_cache = list() - stringbro = new() - iconbro = new() - appearance_bro = new() + /// The number of appearances currently cached. + var/static/tmp/cache_size = 0 -/datum/controller/subsystem/overlays/Initialize() - fire(mc_check = FALSE) + +/datum/controller/subsystem/overlays/Recover() + queue.Cut() + state_cache.Cut() + icon_cache.Cut() + cache_size = 0 + for (var/atom/atom) + atom.flags &= ~OVERLAY_QUEUED + CHECK_TICK + + +/datum/controller/subsystem/overlays/Initialize(timeofday) + fire(FALSE, TRUE) ..() /datum/controller/subsystem/overlays/stat_entry() - ..("Ov:[length(queue)]") + ..("Queued Atoms: [queue.len], Cache Size: [cache_size]") -/datum/controller/subsystem/overlays/Shutdown() - text2file(render_stats(stats), "[log_path]-overlay.log") - -/datum/controller/subsystem/overlays/Recover() - overlay_icon_state_caches = SSoverlays.overlay_icon_state_caches - overlay_icon_cache = SSoverlays.overlay_icon_cache - queue = SSoverlays.queue - - -/datum/controller/subsystem/overlays/fire(resumed = FALSE, mc_check = TRUE) - var/list/queue = src.queue - var/static/count = 0 - if (count) - var/c = count - count = 0 //so if we runtime on the Cut, we don't try again. - queue.Cut(1,c+1) - - for (var/thing in queue) - count++ - if(thing) - STAT_START_STOPWATCH - var/atom/A = thing - COMPILE_OVERLAYS(A) - STAT_STOP_STOPWATCH - STAT_LOG_ENTRY(stats, A.type) - if(mc_check) - if(MC_TICK_CHECK) - break - else +/datum/controller/subsystem/overlays/fire(resumed, no_mc_tick) + var/count = 1 + for (var/atom/atom as anything in queue) + ++count + atom?.UpdateOverlays() + if (no_mc_tick) CHECK_TICK + else if (MC_TICK_CHECK) + queue.Cut(1, count) + return + queue.Cut() - if (count) - queue.Cut(1,count+1) - count = 0 -/proc/iconstate2appearance(icon, iconstate) - // var/static/image/stringbro = new() // Moved to be superglobal due to BYOND insane init order stupidness. - var/list/icon_states_cache = SSoverlays.overlay_icon_state_caches - var/list/cached_icon = icon_states_cache[icon] - if (cached_icon) - var/cached_appearance = cached_icon["[iconstate]"] - if (cached_appearance) - return cached_appearance - SSoverlays.stringbro.icon = icon - SSoverlays.stringbro.icon_state = iconstate - if (!cached_icon) //not using the macro to save an associated lookup - cached_icon = list() - icon_states_cache[icon] = cached_icon - var/cached_appearance = SSoverlays.stringbro.appearance - cached_icon["[iconstate]"] = cached_appearance - return cached_appearance +/datum/controller/subsystem/overlays/proc/GetStateAppearance(icon, state) + var/list/subcache = state_cache[icon] + if (!subcache) + subcache = list() + state_cache[icon] = subcache + if (!subcache[state]) + var/image/image = new (icon, null, state) + subcache[state] = image.appearance + ++cache_size + return subcache[state] -/proc/icon2appearance(icon) - // var/static/image/iconbro = new() // Moved to be superglobal due to BYOND insane init order stupidness. - var/list/icon_cache = SSoverlays.overlay_icon_cache - . = icon_cache[icon] - if (!.) - SSoverlays.iconbro.icon = icon - . = SSoverlays.iconbro.appearance - icon_cache[icon] = . -/atom/proc/build_appearance_list(old_overlays) - // var/static/image/appearance_bro = new() // Moved to be superglobal due to BYOND insane init order stupidness. - var/list/new_overlays = list() - if (!islist(old_overlays)) - old_overlays = list(old_overlays) - for (var/overlay in old_overlays) - if(!overlay) +/datum/controller/subsystem/overlays/proc/GetIconAppearance(icon) + if (!icon_cache[icon]) + var/image/image = new (icon) + icon_cache[icon] = image.appearance + ++cache_size + return icon_cache[icon] + + +/datum/controller/subsystem/overlays/proc/GetAppearanceList(atom/subject, list/sources) + if (!sources) + return list() + if (!islist(sources)) + sources = list(sources) + var/list/result = list() + var/icon/icon = subject.icon + for (var/atom/entry as anything in sources) + if (!entry) continue - if (istext(overlay)) - new_overlays += iconstate2appearance(icon, overlay) - else if(isicon(overlay)) - new_overlays += icon2appearance(overlay) + else if (istext(entry)) + result += GetStateAppearance(icon, entry) + else if (isicon(entry)) + result += GetIconAppearance(entry) else - if(isloc(overlay)) - var/atom/A = overlay - if (A.flags & OVERLAY_QUEUED) - COMPILE_OVERLAYS(A) - SSoverlays.appearance_bro.appearance = overlay //this works for images and atoms too! - if(!ispath(overlay)) - var/image/I = overlay - SSoverlays.appearance_bro.dir = I.dir - new_overlays += SSoverlays.appearance_bro.appearance - return new_overlays + if (isloc(entry)) + if (entry.flags & OVERLAY_QUEUED) + entry.ImmediateOverlayUpdate() + if (!ispath(entry)) + result += entry.appearance + else + var/image/image = entry + result += image.appearance + return result -#define NOT_QUEUED_ALREADY (!(flags & OVERLAY_QUEUED)) -#define QUEUE_FOR_COMPILE flags |= OVERLAY_QUEUED; SSoverlays.queue += src; -/** - * Cut all of atom's normal overlays. Usually leaves "priority" overlays untouched. - * - * @param priority If true, also will cut priority overlays. - */ -/atom/proc/cut_overlays(priority = FALSE) - var/list/cached_overlays = our_overlays - var/list/cached_priority = priority_overlays - - var/need_compile = FALSE - - if(LAZYLEN(cached_overlays)) //don't queue empty lists, don't cut priority overlays - cached_overlays.Cut() //clear regular overlays - need_compile = TRUE - - if(priority && LAZYLEN(cached_priority)) - cached_priority.Cut() - need_compile = TRUE - - if(NOT_QUEUED_ALREADY && need_compile) - QUEUE_FOR_COMPILE - -/** - * Removes specific overlay(s) from the atom. Usually does not remove them from "priority" overlays. - * - * @param overlays The overlays to removed, type can be anything that is allowed for add_overlay(). - * @param priority If true, also will remove them from the "priority" overlays. - */ -/atom/proc/cut_overlay(list/overlays, priority) - if(!overlays) +/// Enqueues the atom for an overlay update if not already queued +/atom/proc/QueueOverlayUpdate() + if (flags & OVERLAY_QUEUED) return + SSoverlays.queue += src + flags |= OVERLAY_QUEUED - overlays = build_appearance_list(overlays) - var/list/cached_overlays = our_overlays //sanic - var/list/cached_priority = priority_overlays - var/init_o_len = LAZYLEN(cached_overlays) - var/init_p_len = LAZYLEN(cached_priority) //starter pokemon +/// Builds the atom's overlay state from caches +/atom/proc/UpdateOverlays() + if (gc_destroyed) + if (length(overlays)) + overlays.Cut() + return + flags &= ~OVERLAY_QUEUED + if (length(priority_overlays)) + if (length(our_overlays)) + overlays = priority_overlays + our_overlays + else + overlays = priority_overlays + else if (length(our_overlays)) + overlays = our_overlays + else + overlays.Cut() - LAZYREMOVE(cached_overlays, overlays) - if(priority) - LAZYREMOVE(cached_priority, overlays) - if(NOT_QUEUED_ALREADY && ((init_o_len != LAZYLEN(cached_overlays)) || (init_p_len != LAZYLEN(cached_priority)))) - QUEUE_FOR_COMPILE +/// Immediately runs an overlay update and dequeues the atom +/atom/proc/ImmediateOverlayUpdate() + SSoverlays.queue -= src + UpdateOverlays() + + +/// Clears the atom's overlay cache(s) and queues an update if needed +/atom/proc/cut_overlays(priority) + if (priority) + if (!length(priority_overlays)) + return + priority_overlays.Cut() + QueueOverlayUpdate() + else if (length(our_overlays)) + our_overlays.Cut() + QueueOverlayUpdate() + /** * Adds specific overlay(s) to the atom. * It is designed so any of the types allowed to be added to /atom/overlays can be added here too. More details below. * - * @param overlays The overlay(s) to add. These may be + * @param add The overlay(s) to add. These may be * - A string: In which case it is treated as an icon_state of the atom's icon. * - An icon: It is treated as an icon. * - An atom: Its own overlays are compiled and then it's appearance is added. (Meaning its current apperance is frozen). @@ -179,30 +152,46 @@ SUBSYSTEM_DEF(overlays) * - Or a list containing any of the above. * @param priority The overlays are added to the "priority" list istead of the normal one. */ -/atom/proc/add_overlay(list/overlays, priority = FALSE) - if(!overlays) +/atom/proc/add_overlay(list/add, priority) + if (!add) return - - overlays = build_appearance_list(overlays) - - LAZYINITLIST(our_overlays) //always initialized after this point - LAZYINITLIST(priority_overlays) - - var/list/cached_overlays = our_overlays //sanic - var/list/cached_priority = priority_overlays - var/init_o_len = cached_overlays.len - var/init_p_len = cached_priority.len //starter pokemon - var/need_compile - - if(priority) - cached_priority += overlays //or in the image. Can we use [image] = image? - need_compile = init_p_len != cached_priority.len + add = SSoverlays.GetAppearanceList(src, add) + if (!length(add)) + return + if (priority) + if (priority_overlays) + priority_overlays += add + else + priority_overlays = add + else if (our_overlays) + our_overlays += add else - cached_overlays += overlays - need_compile = init_o_len != cached_overlays.len + our_overlays = add + QueueOverlayUpdate() + + +/** + * Removes specific overlay(s) from the atom. Usually does not remove them from "priority" overlays. + * + * @param overlays The overlays to removed, type can be anything that is allowed for add_overlay(). + * @param priority If true, also will remove them from the "priority" overlays. + */ +/atom/proc/cut_overlay(list/cut, priority) + if (!cut) + return + cut = SSoverlays.GetAppearanceList(src, cut) + if (!length(cut)) + return + var/update + if (priority && length(priority_overlays)) + priority_overlays -= cut + update = TRUE + if (length(our_overlays)) + our_overlays -= cut + update = TRUE + if (update) + QueueOverlayUpdate() - if(NOT_QUEUED_ALREADY && need_compile) //have we caught more pokemon? - QUEUE_FOR_COMPILE /** * Copy the overlays from another atom, either replacing all of ours or appending to our existing overlays. @@ -211,22 +200,21 @@ SUBSYSTEM_DEF(overlays) * @param other The atom to copy overlays from. * @param cut_old If true, all of our overlays will be *replaced* by the other's. If other is null, that means cutting all ours. */ -/atom/proc/copy_overlays(atom/other, cut_old) //copys our_overlays from another atom - if(!other) - if(cut_old) +/atom/proc/copy_overlays(atom/other, cut) + if (!other) + if (cut) cut_overlays() return + if (!length(other.our_overlays)) + if (cut) + cut_overlays() + return + if (cut || !length(our_overlays)) + our_overlays = other.our_overlays.Copy() + else + our_overlays |= other.our_overlays + QueueOverlayUpdate() - var/list/cached_other = other.our_overlays - if(cached_other) - if(cut_old || !LAZYLEN(our_overlays)) - our_overlays = cached_other.Copy() - else - our_overlays |= cached_other - if(NOT_QUEUED_ALREADY) - QUEUE_FOR_COMPILE - else if(cut_old) - cut_overlays() /** * Returns a list of overlays that the target atom has @@ -236,37 +224,32 @@ SUBSYSTEM_DEF(overlays) */ /proc/get_overlays(atom/other, priority, special) var/list/including = list() - if(!other) + if (!other) return including - - for(var/image/I as anything in other.our_overlays) - if(!special && I.plane > 0) + for (var/image/I as anything in other.our_overlays) + if (!special && I.plane > 0) continue including += I - - if(!priority) + if (!priority) return including - - for(var/image/I as anything in other.priority_overlays) - if(!special && I.plane > 0) + for (var/image/I as anything in other.priority_overlays) + if (!special && I.plane > 0) continue including += I - return including -#undef NOT_QUEUED_ALREADY -#undef QUEUE_FOR_COMPILE - -//TODO: Better solution for these? /image/proc/add_overlay(x) overlays += x + /image/proc/cut_overlay(x) overlays -= x + /image/proc/cut_overlays(x) overlays.Cut() + /image/proc/copy_overlays(atom/other, cut_old) if(!other) if(cut_old) diff --git a/code/controllers/subsystems/transcore_vr.dm b/code/controllers/subsystems/transcore_vr.dm index 6bffac865d..81364db733 100644 --- a/code/controllers/subsystems/transcore_vr.dm +++ b/code/controllers/subsystems/transcore_vr.dm @@ -74,9 +74,13 @@ SUBSYSTEM_DEF(transcore) //In a human BITSET(H.hud_updateflag, BACKUP_HUD) - if(H == imp.imp_in && H.mind && H.stat < DEAD) - db.m_backup(H.mind,H.nif) - persist_nif_data(H) + if(H == imp.imp_in && H.stat < DEAD) //CHOMPEdit Start + if(H.mind) + db.m_backup(H.mind,H.nif) + persist_nif_data(H) + else if(H.vr_link && H.vr_link.mind) + db.m_backup(H.vr_link.mind,H.nif) + persist_nif_data(H) //CHOMPEdit End if(MC_TICK_CHECK) return diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index fbad2752ee..2b0c74e269 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -152,6 +152,11 @@ to_chat(user, "[parent] cannot contain [material].") return + // Our sheet had no material. Whoops. + if(!matter_per_sheet) + to_chat(user, "[S] does not contain any matter acceptable by [parent].") + return + // If we can't fit the material for one sheet, we're full. if(!has_space(matter_per_sheet)) to_chat(user, "[parent] is full. Please remove materials from [parent] in order to insert more.") diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index a3627ada9b..4c53798f81 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -339,18 +339,7 @@ var/global/list/PDA_Manifest = list() var/datum/job/J = SSjob.get_job(H.mind.assigned_role) hidden = J?.offmap_spawn - /* Note: Due to cached_character_icon, a number of emergent properties occur due to the initialization - * order of readied-up vs latejoiners. Namely, latejoiners will get a uniform in their datacore picture, but readied-up will - * not. This is due to the fact that SSticker calls data_core.manifest_inject() inside of ticker/proc/create_characters(), - * but does not equip them until ticker/proc/equip_characters(), which is called later. So, this proc is literally called before - * they ever get their equipment, and so it can't get a picture of them in their equipment. - * Latejoiners do not have this problem, because /mob/new_player/proc/AttemptLateSpawn calls EquipRank() before it calls - * this proc, which means that they're already clothed by the time they get their picture taken here. - * The COMPILE_OVERLAYS() here is just to bypass SSoverlays taking for-fucking-ever to update the mob, since we're about to - * take a picture of them, we want all the overlays. - */ - COMPILE_OVERLAYS(H) - SSoverlays.queue -= H + H.ImmediateOverlayUpdate() var/id = generate_record_id() //General Record diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm index 0330811428..d7011dd094 100644 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ b/code/datums/looping_sounds/machinery_sounds.dm @@ -80,7 +80,7 @@ /datum/looping_sound/cerealmaker start_sound = 'sound/machines/kitchen/cerealmaker/cerealmaker-start.ogg' - start_length = 10 + start_length = 10 mid_sounds = list('sound/machines/kitchen/cerealmaker/cerealmaker-mid1.ogg'=10) mid_length = 60 end_sound = 'sound/machines/kitchen/cerealmaker/cerealmaker-stop.ogg' @@ -104,4 +104,14 @@ mid_length = 70 end_sound = 'sound/machines/air_pump/airpumpshutdown.ogg' volume = 15 - pref_check = /datum/client_preference/air_pump_noise \ No newline at end of file + pref_check = /datum/client_preference/air_pump_noise + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/datum/looping_sound/vehicle_engine + start_sound = 'sound/machines/vehicle/engine_start.ogg' + start_length = 2 + mid_sounds = list('sound/machines/vehicle/engine_mid.ogg'=1) + mid_length = 6 + end_sound = 'sound/machines/vehicle/engine_end.ogg' + volume = 20 diff --git a/code/datums/riding.dm b/code/datums/riding.dm index 9dd32dcd93..ec5afff5d5 100644 --- a/code/datums/riding.dm +++ b/code/datums/riding.dm @@ -225,3 +225,28 @@ /datum/riding/boat/get_offsets(pass_index) // list(dir = x, y, layer) return list("[NORTH]" = list(1, 2), "[SOUTH]" = list(1, 2), "[EAST]" = list(1, 2), "[WEST]" = list(1, 2)) + +/datum/riding/snowmobile + only_one_driver = TRUE // Keep your hands to yourself back there! + +/datum/riding/snowmobile/get_offsets(pass_index) // list(dir = x, y, layer) + var/H = 3 // Horizontal seperation. + var/V = 2 // Vertical seperation. + var/O = 2 // Vertical offset. + switch(pass_index) + if(1) // Person on front. + return list( + "[NORTH]" = list( 0, O+V, MOB_LAYER), + "[SOUTH]" = list( 0, O, ABOVE_MOB_LAYER), + "[EAST]" = list( H, O, MOB_LAYER), + "[WEST]" = list(-H, O, MOB_LAYER) + ) + if(2) // Person on back. + return list( + "[NORTH]" = list( 0, O, ABOVE_MOB_LAYER), + "[SOUTH]" = list( 0, O+V, MOB_LAYER), + "[EAST]" = list(-H, O, MOB_LAYER), + "[WEST]" = list( H, O, MOB_LAYER) + ) + else + return null // This will runtime, but we want that since this is out of bounds. diff --git a/code/datums/roundstats/roundstats.dm b/code/datums/roundstats/roundstats.dm index 2fc1950bb6..0c25b83838 100644 --- a/code/datums/roundstats/roundstats.dm +++ b/code/datums/roundstats/roundstats.dm @@ -25,6 +25,8 @@ GLOBAL_VAR_INIT(prey_eaten_roundstat, 0) //VOREStation Edit - Obviously GLOBAL_VAR_INIT(prey_absorbed_roundstat, 0) //VOREStation Edit - Obviously GLOBAL_VAR_INIT(prey_digested_roundstat, 0) //VOREStation Edit - Obviously GLOBAL_VAR_INIT(items_digested_roundstat, 0) //VOREStation Edit - Obviously +var/global/list/security_printer_tickets = list() //VOREStation Edit + /hook/roundend/proc/RoundTrivia()//bazinga var/list/valid_stats_list = list() //This is to be populated with the good shit @@ -54,6 +56,22 @@ GLOBAL_VAR_INIT(items_digested_roundstat, 0) //VOREStation Edit - Obviously else if(GLOB.disposals_flush_shift_roundstat > 40) valid_stats_list.Add("The disposal system flushed a whole [GLOB.disposals_flush_shift_roundstat] times for this shift. We should really invest in waste treatement.") + //VOREStation add Start - Ticket time! + if(security_printer_tickets.len) + valid_stats_list.Add("[security_printer_tickets.len] unique security tickets were issued today!
Examples include:") + var/good_num = 5 + var/ourticket + while(good_num > 0) + ourticket = null + if(security_printer_tickets.len) + ourticket = pick(security_printer_tickets) + security_printer_tickets -= ourticket + if(ourticket) + valid_stats_list.Add("-\"[ourticket]\"") + good_num-- + else + good_num = 0 + //VOREStation Add Start - Vore stats lets gooooo if(GLOB.prey_eaten_roundstat > 0) valid_stats_list.Add("A total of [GLOB.prey_eaten_roundstat] individuals were eaten today!") diff --git a/code/datums/supplypacks/hydroponics_vr.dm b/code/datums/supplypacks/hydroponics_vr.dm index 7476fdd29b..fa912852e7 100644 --- a/code/datums/supplypacks/hydroponics_vr.dm +++ b/code/datums/supplypacks/hydroponics_vr.dm @@ -70,4 +70,10 @@ name = "Jerboa crate" cost = 10 containertype = /obj/structure/largecrate/animal/jerboa - containername = "Jerboa crate" \ No newline at end of file + containername = "Jerboa crate" + +/datum/supply_pack/hydro/tits + name = "A pair of great tits" + cost = 10 + containertype = /obj/structure/largecrate/tits + containername = "A pair of great tits" diff --git a/code/datums/supplypacks/misc_vr.dm b/code/datums/supplypacks/misc_vr.dm index dbe2143e03..8118ff0ab1 100644 --- a/code/datums/supplypacks/misc_vr.dm +++ b/code/datums/supplypacks/misc_vr.dm @@ -161,3 +161,18 @@ cost = 300 containertype = /obj/structure/closet/crate containername = "cordless jukebox speakers crate" + +/datum/supply_pack/misc/explorer_headsets + name = "shortwave-capable headsets (x4)" + contains = list( + /obj/item/device/radio/headset/explorer = 4 + ) + cost = 20 + containertype = /obj/structure/closet/crate/secure/gear + containername = "exploration radio headsets crate" + access = list( + access_explorer, + access_eva, + access_pilot + ) + one_access = TRUE diff --git a/code/datums/supplypacks/security.dm b/code/datums/supplypacks/security.dm index 5c4ddf1a6a..fc8d9b373b 100644 --- a/code/datums/supplypacks/security.dm +++ b/code/datums/supplypacks/security.dm @@ -444,7 +444,8 @@ /obj/item/weapon/storage/belt/security = 3, /obj/item/clothing/glasses/sunglasses/sechud = 3, /obj/item/device/radio/headset/headset_sec/alt = 3, - /obj/item/clothing/suit/storage/hooded/wintercoat/security = 3 + /obj/item/clothing/suit/storage/hooded/wintercoat/security = 3, + /obj/item/clothing/glasses/sunglasses/sechud/tactical_sec_vis = 3 ) cost = 10 containertype = /obj/structure/closet/crate/nanothreads diff --git a/code/datums/underwear/socks.dm b/code/datums/underwear/socks.dm index e1fe7e07f2..16465cfb61 100644 --- a/code/datums/underwear/socks.dm +++ b/code/datums/underwear/socks.dm @@ -60,4 +60,128 @@ /datum/category_item/underwear/socks/leggings name = "Leggings" - icon_state = "leggings" \ No newline at end of file + icon_state = "leggings" + + + +//NEW SOCKS BELOW HERE +/datum/category_item/underwear/socks/white_norm + name = "White Socks" + icon_state = "white_norm" + has_color = TRUE + +/datum/category_item/underwear/socks/white_short + name = "Short White Socks" + icon_state = "white_short" + has_color = TRUE + +/datum/category_item/underwear/socks/white_knee + name = "White Knee Socks" + icon_state = "white_knee" + has_color = TRUE + +/datum/category_item/underwear/socks/white_thigh + name = "White Thigh Socks" + icon_state = "white_thigh" + has_color = TRUE + +/datum/category_item/underwear/socks/black_norm + name = "Black Socks" + icon_state = "black_norm" + +/datum/category_item/underwear/socks/black_short + name = "Short Black Socks" + icon_state = "black_short" + +/datum/category_item/underwear/socks/black_knee + name = "Black Knee Socks" + icon_state = "black_knee" + +/datum/category_item/underwear/socks/black_thigh + name = "Black Thigh Socks" + icon_state = "black_thigh" + +/datum/category_item/underwear/socks/assblastusa_knee + name = "Striped Patriotic Knee Socks" + icon_state = "assblastusa_knee" + +/datum/category_item/underwear/socks/assblastusa_thigh + name = "Striped Patriotic Thigh Socks" + icon_state = "assblastusa_thigh" + +/datum/category_item/underwear/socks/uk_knee + name = "United Kingdom Knee Socks" + icon_state = "uk_knee" + +/datum/category_item/underwear/socks/uk_thigh + name = "United Kingdom Thigh Socks" + icon_state = "uk_thigh" + +/datum/category_item/underwear/socks/commie_knee + name = "Yellow and Red Striped Knee Socks" + icon_state = "commie_knee" + +/datum/category_item/underwear/socks/commie_thigh + name = "Yellow and Red Striped Thigh Socks" + icon_state = "commie_thigh" + +/datum/category_item/underwear/socks/stockings_lpink + name = "Light Pink Stockings" + icon_state = "stockings_lpink" + +/datum/category_item/underwear/socks/stockings_purple + name = "Purple Stockings" + icon_state = "stockings_purple" + +/datum/category_item/underwear/socks/stockings_green + name = "Green Stockings" + icon_state = "stockings_green" + +/datum/category_item/underwear/socks/stockings_cyan + name = "Cyan Stockings" + icon_state = "stockings_cyan" + +/datum/category_item/underwear/socks/stockings_orange + name = "Orange Stockings" + icon_state = "stockings_orange" + +/datum/category_item/underwear/socks/stockings_yellow + name = "Yellow Stockings" + icon_state = "stockings_yellow" + +/datum/category_item/underwear/socks/stockings_dpink + name = "Dark Pink Stockings" + icon_state = "stockings_dpink" + +/datum/category_item/underwear/socks/stockings_blue + name = "Blue Stockings" + icon_state = "stockings_blue" + +/datum/category_item/underwear/socks/bee_thigh + name = "Bee Thigh Socks" + icon_state = "bee_thigh" + +/datum/category_item/underwear/socks/bee_knee + name = "Bee Knee Socks" //You do not know how much I want to make a 'bee's knees' pun. + icon_state = "bee_knee" + +/datum/category_item/underwear/socks/thocks + name = "Thocks" + icon_state = "thocks" + has_color = TRUE + +/datum/category_item/underwear/socks/ace_thigh + name = "Ace Pride Thigh Socks" + icon_state = "ace_thigh" + +/datum/category_item/underwear/socks/ace_knee + name = "Ace Pride Knee Socks" + icon_state = "ace_knee" + +/datum/category_item/underwear/socks/trans_knee + name = "Trans Pride Knee Socks" + icon_state = "trans_knee" + +/datum/category_item/underwear/socks/trans_thigh + name = "Trans Pride Thigh Socks" + icon_state = "trans_thigh" diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 99fc8efcf1..116a17c67e 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -29,9 +29,9 @@ /obj/item/weapon/soap name = "soap" - desc = "A cheap bar of soap. Doesn't smell." + desc = "A cheap bar of soap. Smells of lye." gender = PLURAL - icon = 'icons/obj/items.dmi' + icon = 'icons/obj/soap.dmi' icon_state = "soap" flags = NOCONDUCT w_class = ITEMSIZE_SMALL @@ -39,9 +39,15 @@ throwforce = 0 throw_speed = 4 throw_range = 20 + var/randomize = TRUE + var/square_chance = 10 + +/obj/item/weapon/soap/Initialize() + if(randomize && prob(square_chance)) + icon_state = "[icon_state]-alt" /obj/item/weapon/soap/nanotrasen - desc = "A NanoTrasen-brand bar of soap. Smells of phoron." + desc = "A NanoTrasen-brand bar of soap. Smells of phoron, a years-old marketing gimmick." icon_state = "soapnt" /obj/item/weapon/soap/deluxe @@ -55,6 +61,82 @@ desc = "An untrustworthy bar of soap. Smells of fear." icon_state = "soapsyndie" +/obj/item/weapon/soap/space_soap + desc = "Smells like hot metal and walnuts." + icon_state = "space_soap" + +/obj/item/weapon/soap/water_soap + desc = "Smells like chlorine." + icon_state = "water_soap" + +/obj/item/weapon/soap/fire_soap + desc = "Smells like a campfire." + icon_state = "fire_soap" + +/obj/item/weapon/soap/rainbow_soap + desc = "Smells sickly sweet." + icon_state = "rainbow_soap" + +/obj/item/weapon/soap/diamond_soap + desc = "Smells like saffron and vanilla." + icon_state = "diamond_soap" + +/obj/item/weapon/soap/uranium_soap + desc = "Smells not great... Not terrible." + icon_state = "uranium_soap" + +/obj/item/weapon/soap/silver_soap + desc = "Smells like birch and amaranth." + icon_state = "silver_soap" + +/obj/item/weapon/soap/brown_soap + desc = "Smells like cinnamon and cognac." + icon_state = "brown_soap" + +/obj/item/weapon/soap/white_soap + desc = "Smells like nutmeg and oats." + icon_state = "white_soap" + +/obj/item/weapon/soap/grey_soap + desc = "Smells like bergamot and lilies." + icon_state = "grey_soap" + +/obj/item/weapon/soap/pink_soap + desc = "Smells like bubblegum." + icon_state = "pink_soap" + +/obj/item/weapon/soap/purple_soap + desc = "Smells like lavender." + icon_state = "purple_soap" + +/obj/item/weapon/soap/blue_soap + desc = "Smells like cardamom." + icon_state = "blue_soap" + +/obj/item/weapon/soap/cyan_soap + desc = "Smells like bluebells and peaches." + icon_state = "cyan_soap" + +/obj/item/weapon/soap/green_soap + desc = "Smells like a freshly mowed lawn." + icon_state = "green_soap" + +/obj/item/weapon/soap/yellow_soap + desc = "Smells like citron and ginger." + icon_state = "yellow_soap" + +/obj/item/weapon/soap/orange_soap + desc = "Smells like oranges and dark chocolate." + icon_state = "orange_soap" + +/obj/item/weapon/soap/red_soap + desc = "Smells like cherries." + icon_state = "red_soap" + +/obj/item/weapon/soap/golden_soap + desc = "Smells like honey." + icon_state = "golden_soap" + /obj/item/weapon/bikehorn name = "bike horn" desc = "A horn off of a bicycle." @@ -397,6 +479,7 @@ continue remove_from_storage(B, T) + /obj/item/weapon/stock_parts name = "stock part" desc = "What?" diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 29c937afd6..a17be310bd 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -639,4 +639,4 @@ return selfimage /atom/movable/proc/get_cell() - return + return \ No newline at end of file diff --git a/code/game/gamemodes/events/holidays/Holidays.dm b/code/game/gamemodes/events/holidays/Holidays.dm index c04d6408b6..9c156a50bd 100644 --- a/code/game/gamemodes/events/holidays/Holidays.dm +++ b/code/game/gamemodes/events/holidays/Holidays.dm @@ -22,7 +22,7 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t Holiday = list() // reset our switch now so we can recycle it as our Holiday name - var/YY = text2num(time2text(world.timeofday, "YY")) // get the current year + //var/YY = text2num(time2text(world.timeofday, "YY")) // get the current year - unused currently but can be used for floating dates var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month var/DD = text2num(time2text(world.timeofday, "DD")) // get the current day @@ -36,56 +36,63 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t Holiday["New Years's Day"] = "The day of the new solar year on Sol." if(12) Holiday["Vertalliq-Qerr"] = "Vertalliq-Qerr, translated to mean 'Festival of the Royals', is a \ - Skrell holiday that celebrates the Qerr-Katish and all they have provided for the rest of Skrell society, \ + skrellian holiday that celebrates the Qerr-Katish and all they have provided for the rest of skrellian society, \ it often features colourful displays and skilled performers take this time to show off some of their more \ - fancy displays." + elaborate displays." + if(14) + Holiday["Lohri"] = "A human festival traditionally celebrating the end of winter on the Indian subcontinent. \ + The holiday is now celebrated independently of seasons in many colonies with large populations of Indian \ + descent. Traditions include the burning of bonfires, dancing, and door-to-door singing in exchange for treats." + if(30) + Holiday["Lunar New Year"] = "Originally the new year on the ancient lunisolar calendar, the Lunar New Year is \ + celebrated with a wide variety of east Asian traditions with roots in Chinese, Japanese, Korean, Vietnamese, \ + Tibetan, Mongolian, and Ryukyu cultures. Elaborate parades, performances, dances and meals are usual staples." if(2) //Feb switch(DD) if(2) - Holiday["Groundhog Day"] = "An unoffical holiday based on ancient folklore that originated on Earth, \ - that involves the worship of an almighty groundhog, that could control the weather based on if it casted a shadow." + Holiday["Groundhog Day"] = "An unoffical holiday based on medieval folklore that originated on Earth, \ + that involves the reverence of a prophetic animal - traditionally a badger, fox or groundhog - that was \ + said to be able to predict, or even control the changing of the seasons." if(14) - Holiday["Valentine's Day"] = "An old holiday that revolves around romance and love." + Holiday["Valentine's Day"] = "A human holiday that revolves around expressions of romance and love. \ + In particular, the exchanging of gifts, letters and cards is traditional." + if(15) + Holiday["Lantern Festival"] = "A human holiday with origins in Chinese new year celebrations. Participants \ + carry or hang elaborate paper lanterns that are thought to bring good luck. Today, electric lights are often used \ + in environments where open flames would be hazardous or non-functional." if(17) Holiday["Random Acts of Kindness Day"] = "An unoffical holiday that challenges everyone to perform \ - acts of kindness to their friends, co-workers, and strangers, for no reason." + acts of kindness to their friends, co-workers, and strangers, with no strings attached." if(3) //Mar switch(DD) if(3) - Holiday["Qixm-tes"] = "Qixm-tes, or 'Day of mourning', is a Skrell holiday where Skrell gather at places \ - of worship and sing a song of mourning for all those who have died in service to their empire." + Holiday["Qixm-tes"] = "Qixm-tes, or 'Day of mourning', is a skrellian holiday where skrell gather at places \ + of worship and sing a song of mourning for all those who have died in service to their kingdoms." if(14) Holiday["Pi Day"] = "An unoffical holiday celebrating the mathematical constant Pi. It is celebrated on \ March 14th, as the digits form 3 14, the first three significant digits of Pi. Observance of Pi Day generally \ involve eating (or throwing) pie, due to a pun. Pies also tend to be round, and thus relatable to Pi." if(17) - Holiday["St. Patrick's Day"] = "An old holiday originating from Earth, Sol, celebrating the color green, \ - shamrocks, attending parades, and drinking alcohol." + Holiday["St. Patrick's Day"] = "A holiday originating on Earth, celebrating a popular version of Irish culture. \ + Traditions include elaborate parades, wearing of the colour green, and drinking alcohol." + if(18) + Holiday["Holi"] = "Also known as the Festival of Colours, a human Hindu festival celebrating divine love and the \ + triumph of good over evil. Traditionally a bonfire is lit overnight, followed by the free-for-all smearing of \ + celebrants with colourful pigments, and the forgiveness of past wrongs." if(27) - if(YY == 16) - Holiday["Easter"] = "" - if(31) - if(YY == 13) - Holiday["Easter"] = "" + Holiday["Easter"] = "A Earth springtime festival variously celebrating rebirth and the beginning of the planting \ + season. Traditionally celebrated with the painting and exchange of eggs, sometimes made from chocolate. \ + The holiday's date was standardized in the 22nd century." if(4) //Apr switch(DD) if(1) - Holiday["April Fool's Day"] = "An old holiday that endevours one to pull pranks and spread hoaxes on their friends." - if(YY == 18) - Holiday["Easter"] = "" - if(8) - if(YY == 15) - Holiday["Easter"] = "" - if(16) - if(YY == 17) //Easter can go die for all of this copypasta. - Holiday["Easter"] = "" - - if(20) - if(YY == 14) - Holiday["Easter"] = "" + Holiday["April Fool's Day"] = "A human holiday that endevours one to pull pranks and spread hoaxes on their friends." + if(5) + Holiday["First Day of Passover"] = "The first of eight days of a human holiday celebrating the exodus of ancient Jewish people \ + from slavery, and of the spring harvest. The most well-known tradition is the Sedar meal. The date was standardized in the 22nd century." if(22) Holiday["Earth Day"] = "A holiday of enviromentalism, that originated on it's namesake, Earth." @@ -100,7 +107,7 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t Observance of this day varies throughout human space, but most common traditions are the act of bringing flowers to graves,\ attending parades, and the wearing of poppies (either paper or real) in one's clothing." if(28) - Holiday["Jiql-tes"] = "A Skrellian holiday that translates to 'Day of Celebration', Skrell communities \ + Holiday["Jiql-tes"] = "A skrellian holiday that translates to 'Day of Celebration', skrell communities \ gather for a grand feast and give gifts to friends and close relatives." if(6) //Jun @@ -113,7 +120,11 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t and to thank blood donors for their voluntary, life-saving gifts of blood." if(20) Holiday["Civil Servant's Day"] = "Civil Servant's Day is a holiday observed in SCG member states that honors civil servants everywhere,\ -+ (especially those who are members of the armed forces and the emergency services), or have been or have been civil servants in the past." + (especially those who are members of the armed forces and the emergency services), or have been or have been civil servants in the past." +/* if(25) + Holiday["Merhyat Njarha"] = "A Njarir'Akhan tajaran tradition translating to \"Harmony of the House\", in which Njarjirii citizens pay \ + homage to their ruling house and their ancestors. Traditions include large communal meals and dances hosted by the ruling house, \ + and the intensive upkeep of community spaces."*/ if(7) //Jul switch(DD) @@ -126,36 +137,43 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t if(8) //Aug switch(DD) -// if(10) -// Holiday["S'randarr's Day"] = "A Tajaran holiday that occurs on the longest day of the year in summer, -// on Ahdomai. It is named after the Tajaran deity of Light, and huge celebrations are common." -//VOREStation Add - Of course we need this. - if(8) - Holiday["Vore Day"] = "A holiday representing the innate desire in all/most/some/a few of us to devour each other or be devoured. \ - That's probably why you're here, isn't it? Get to it, then!" -//VOREStation Add End. - + if(11) + Holiday["Tajaran Contact Day"] = "The anniversary of first contact between SolGov and the tajaran species, widely observed\ + throughout tajaran and human space. Marks the date that in 2513, a human exploration team investigating electromagnetic \ + emissions from the Meralar system made radio contact with the tajaran scientific outpost that had broadcast them." + if(20) + Holiday["Obon"] = "An ancient Earth holiday originating in east Asia, for the honouring of one's ancestral spirits. \ + Traditions include the maintenance of grave sites and memorials, and community traditional dance performances." if(27) Holiday["Forgiveness Day"] = "A time to forgive and be forgiven." if(9) //Sep switch(DD) if(17) - Holiday["Qill-xamr"] = "Translated to 'Night of the dead', it is a Skrell holiday where Skrell \ + Holiday["Qill-xamr"] = "Translated to 'Night of the dead', it is a skrellian holiday where skrell \ communities hold parties in order to remember loved ones who passed, unlike Qixm-tes, this applies to everyone \ and is a joyful celebration." if(19) - Holiday["Talk-Like-a-Pirate Day"] = "Ahoy, matey! Tis unoffical holiday be celebratin' the jolly \ - good humor of speakin' like the pirates of old." + Holiday["Talk-Like-a-Pirate Day"] = "Ahoy, matey! It be the unoffical holiday celebratin' the salty \ + sea humor of speakin' like the pirates of old." + if(20) + Holiday["Rosh Hashanah"] = "An old human holiday that marks the traditional Hebrew new year." if(28) Holiday["Stupid-Questions Day"] = "Known as Ask A Stupid Question Day, it is an unoffical holiday \ created by teachers in Sol, very long ago, to encourage students to ask more questions in the classroom." if(10) //Oct switch(DD) + if(9) + Holiday["Lief Eriksson Day"] = "A day commemorating Norse explorer Lief Eriksson, an early Scandinavian cultural figure \ + who is thought to have been the first European to set foot in North America." if(16) Holiday["Boss' Day"] = "Boss' Day has traditionally been a day for employees to thank their bosses for the difficult work that they do \ throughout the year. This day was created for the purpose of strengthening the bond between employer and employee." + if(21) + Holiday["First Day of Diwali"] = "An ancient Hindu, Jain and Sikh festival lasting five days, celebrating victory of light over darkness, good over \ + evil, and knowledge over ignorance. It is celebrated by the wearing of your finest clothes, decorating with oil lamps and rangolis, \ + fireworks, and gift-giving. Electric lights are often used in modern times where oil lamps would be hazardous or inoperable." if(31) Holiday["Halloween"] = "Originating from Earth, Halloween is also known as All Saints' Eve, and \ is celebrated by some by attending costume parties, trick-or-treating, carving faces in pumpkins, or visiting \ @@ -163,6 +181,10 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t if(11) //Nov switch(DD) + if(1) + Holiday["Day of the Dead"] = "An old human holiday celebrating the lives of deceased friends and family members, \ + by means of good humour and joyful parties. Offerings are often left at altars to the dead, and exchanging gifts \ + among the living is not uncommon." if(13) Holiday["Kindness Day"] = "Kindness Day is an unofficial holiday to highlight good deeds in the \ community, focusing on the positive power and the common thread of kindness which binds humanity and \ @@ -182,16 +204,17 @@ var/global/list/Holiday = list() //Holidays are lists now, so we can have more t if(10) Holiday["Human-Rights Day"] = "An old holiday created by an intergovernmental organization known back than as the United Nations, \ human rights were not recognized globally at the time, and the holiday was made in honor of the Universal Declaration of Human Rights. \ - These days, SolGov ensures that past efforts were not in vein, and continues to honor this holiday across the galaxy." + These days, SolGov ensures that past efforts were not in vein, and continues to honor this holiday across the galaxy as a historical \ + reminder." if(22) - Holiday["Vertalliq-qixim"] = "A Skrellian holiday that celebrates the Skrell's first landing on one of \ - their moons. It's often celebrated with grand festivals." + Holiday["Vertalliq-qixim"] = "A skrellian holiday that celebrates the skrell's first landing on one of \ + their moons. It's often celebrated with grand festivals." if(24) Holiday["Christmas Eve"] = "The eve of Christmas, an old holiday from Earth that mainly involves gift \ giving, decorating, family reunions, and a fat red human breaking into people's homes to steal milk and cookies." if(25) Holiday["Christmas"] = "Christmas is a very old holiday that originated in Earth, Sol. It was a \ - religious holiday for the Christian religion, which would later form Unitarianism. Nowdays, the holiday is celebrated \ + religious holiday for the Christian religion, which would later form Unitarianism. Nowadays, the holiday is celebrated \ generally by giving gifts, symbolic decoration, and reuniting with one's family. It also features a mythical fat \ red human, known as Santa, who broke into people's homes to loot cookies and milk." if(31) diff --git a/code/game/jobs/job/civilian_vr.dm b/code/game/jobs/job/civilian_vr.dm index e33bbf11d9..9c5de6d54b 100644 --- a/code/game/jobs/job/civilian_vr.dm +++ b/code/game/jobs/job/civilian_vr.dm @@ -30,7 +30,7 @@ spawn_positions = 2 pto_type = PTO_CIVILIAN alt_titles = list("Hydroponicist" = /datum/alt_title/hydroponicist, "Cultivator" = /datum/alt_title/cultivator, "Farmer" = /datum/alt_title/farmer, - "Gardener" = /datum/alt_title/gardener, "Florist" = /datum/alt_title/florsit) + "Gardener" = /datum/alt_title/gardener, "Florist" = /datum/alt_title/florsit, "Rancher" = /datum/alt_title/rancher) /datum/alt_title/hydroponicist title = "Hydroponicist" @@ -45,6 +45,10 @@ title = "Florist" title_blurb = "A Florist may be less professional than their counterparts, and are more likely to tend to the public gardens if they aren't needed elsewhere." +/datum/alt_title/rancher + title = "Rancher" + title_blurb = "A Rancher is tasked with the care, feeding, raising, and harvesting of livestock." + /datum/job/qm pto_type = PTO_CARGO diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 509572aa98..b0e678298b 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -147,7 +147,7 @@ var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin("#job_icon") dress_mannequin(mannequin) mannequin.dir = SOUTH - COMPILE_OVERLAYS(mannequin) + mannequin.ImmediateOverlayUpdate() var/icon/preview_icon = getFlatIcon(mannequin) preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser. @@ -174,6 +174,10 @@ //return (brain_type && LAZYACCESS(ideal_age_by_species, brain_type)) || LAZYACCESS(ideal_age_by_species, brain_type) || ideal_character_age //VOREStation Removal /datum/job/proc/is_species_banned(species_name, brain_type) + // CHOMPEdit begin -- Shadekin cannot be any crew position + if(species_name == SPECIES_SHADEKIN) + return TRUE + // CHOMPEdit end return FALSE // VOREStation Edit - Any species can be any job. /* VOREStation Removal if(banned_job_species == null) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 570fbf32ab..63f8a702e0 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -657,8 +657,7 @@ var/global/datum/controller/occupations/job_master var/obj/belly/vore_spawn_gut var/mob/living/prey_to_nomph - var/datum/job/J = SSjob.get_job(rank) - fail_deadly = J?.offmap_spawn + //CHOMPEdit - Remove fail_deadly addition on offmap_spawn //Spawn them at their preferred one if(C && C.prefs.spawnpoint) @@ -804,7 +803,8 @@ var/global/datum/controller/occupations/job_master .["msg"] = spawnpos.msg .["channel"] = spawnpos.announce_channel else - if(fail_deadly) + var/datum/job/J = SSjob.get_job(rank) + if(fail_deadly || J?.offmap_spawn) to_chat(C, "Your chosen spawnpoint ([spawnpos.display_name]) is unavailable for your chosen job. Please correct your spawn point choice.") return to_chat(C, "Your chosen spawnpoint ([spawnpos.display_name]) is unavailable for your chosen job. Spawning you at the Arrivals shuttle instead.") diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index 3c949ba66d..e71f4eb72b 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -51,6 +51,8 @@ var/const/ASSISTANT =(1<<11) var/const/BRIDGE =(1<<12) var/const/ENTERTAINER =(1<<13) //VOREStation Add +var/const/OTHER =(1<<10) //CHOMPStation Add +var/const/NONCREW =(1<<0) //CHOMPStation Add /* // CHOMPedit: Comment out Talon positions, we don't have that here. //VOREStation Add var/const/TALON =(1<<3) diff --git a/code/game/machinery/casino_ch.dm b/code/game/machinery/casino_ch.dm index 13c65bc335..e892d1218b 100644 --- a/code/game/machinery/casino_ch.dm +++ b/code/game/machinery/casino_ch.dm @@ -277,7 +277,7 @@ "sodawater", "lemon_lime", "sugar", "orangejuice", "limejuice", "watermelonjuice", "thirteenloko", "grapesoda", "coffee", "cafe_latte", "soy_latte", "hot_coco", "milk", "cream", "tea", "ice", "orangejuice", "lemonjuice", "limejuice", "berryjuice", "mint", "lemon_lime", "sugar", "orangejuice", "limejuice", "sodawater", - "tonic", "beer", "kahlua", "whiskey", "wine", "vodka", "gin", "rum", "tequilla", "vermouth", "cognac", + "tonic", "beer", "kahlua", "whiskey", "redwine", "vodka", "gin", "rum", "tequilla", "vermouth", "cognac", "ale", "mead", "bitters", "champagne", "singulo", "doctorsdelight", "nothing", "banana", "honey", "egg", "coco", "cherryjelly", "carrotjuice", "applejuice", "tomatojuice", "peanutbutter", "soymilk", "grenadine", "gingerale", "roy_rogers", "patron", "goldschlager", "gelatin", "melonliquor", "bluecuracao", "thirteenloko", "deadrum", "sake", "acidspit", diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 4efec263f8..1d45a3e508 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -184,7 +184,7 @@ /obj/machinery/computer/operating/proc/build_surgery_list(mob/user) if(!istype(victim)) return null - + . = list() for(var/limb in victim.organs_by_name) @@ -281,6 +281,7 @@ /datum/surgery_step/cavity, /datum/surgery_step/limb, /datum/surgery_step/brainstem, + /datum/surgery_step/generic/ripper, ) good_surgeries = surgery_steps for(var/datum/surgery_step/S in good_surgeries) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 3b8d179cfa..3ae04b718b 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -526,12 +526,14 @@ //VOREStation Edit Start var/depart_announce = TRUE + var/departing_job = to_despawn.mind.role_alt_title + if(istype(to_despawn, /mob/living/dominated_brain)) depart_announce = FALSE if(depart_announce) - announce.autosay("[to_despawn.real_name], [to_despawn.mind.role_alt_title], [on_store_message]", "[on_store_name]", announce_channel, using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE)) + announce.autosay("[to_despawn.real_name][departing_job ? ", [departing_job], " : " "][on_store_message]", "[on_store_name]", announce_channel, using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE)) visible_message("\The [initial(name)] [on_store_visible_message_1] [to_despawn.real_name] [on_store_visible_message_2]", 3) //VOREStation Edit End diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 44459d1b96..67fc80168a 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -84,6 +84,16 @@ R.adjustBruteLoss(-weld_rate) if(wire_rate && R.getFireLoss() && cell.checked_use(wire_power_use * wire_rate * CELLRATE)) R.adjustFireLoss(-wire_rate) + + //VOREStation Add Start + else if(ispAI(occupant)) + var/mob/living/silicon/pai/P = occupant + + if(P.nutrition < 400) + P.nutrition = min(P.nutrition+10, 400) + cell.use(7000/450*10) + //VOREStation Add End + else if(ishuman(occupant)) var/mob/living/carbon/human/H = occupant @@ -258,6 +268,21 @@ occupant = R update_icon() return 1 + + //VOREStation Add Start + else if(istype(L, /mob/living/silicon/pai)) + var/mob/living/silicon/pai/P = L + + if(P.incapacitated()) + return + + add_fingerprint(P) + P.reset_view(src) + P.forceMove(src) + occupant = P + update_icon() + return 1 + //VOREStation Add End else if(istype(L, /mob/living/carbon/human)) var/mob/living/carbon/human/H = L diff --git a/code/game/machinery/virtual_reality/vr_console.dm b/code/game/machinery/virtual_reality/vr_console.dm index 81df6d934b..b66bc2dff8 100644 --- a/code/game/machinery/virtual_reality/vr_console.dm +++ b/code/game/machinery/virtual_reality/vr_console.dm @@ -23,6 +23,7 @@ active_power_usage = 200 light_color = "#FF0000" + /obj/machinery/vr_sleeper/Initialize() . = ..() default_apply_parts() @@ -246,14 +247,14 @@ avatar.shapeshifter_change_shape(occupant.species.name) avatar.forceMove(get_turf(S)) // Put the mob on the landmark, instead of inside it - +//CHOMPedit start VR fix occupant.enter_vr(avatar) //Yes, I am using a aheal just so your markings transfer over, I could not get .prefs.copy_to working. This is very stupid, and I can't be assed to rewrite this. Too bad! avatar.revive() - avatar.revive() + avatar.species.equip_survival_gear(avatar) avatar.verbs += /mob/living/carbon/human/proc/exit_vr //ahealing removes the prommie verbs and the VR verbs, giving it back - avatar.Sleeping(1) +//CHOMPedit end // Prompt for username after they've enterred the body. var/newname = sanitize(tgui_input_text(avatar, "You are entering virtual reality. Your username is currently [src.name]. Would you like to change it to something else?", "Name change", null, MAX_NAME_LEN), MAX_NAME_LEN) if (newname) diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm index 0286622705..581aeea16f 100644 --- a/code/game/objects/effects/bump_teleporter.dm +++ b/code/game/objects/effects/bump_teleporter.dm @@ -23,12 +23,12 @@ var/list/obj/effect/bump_teleporter/BUMP_TELEPORTERS = list() if(!ismob(user)) //user.loc = src.loc //Stop at teleporter location return - + var/mob/M = user //VOREStation edit if(!id_target) //user.loc = src.loc //Stop at teleporter location, there is nowhere to teleport to. return for(var/obj/effect/bump_teleporter/BT in BUMP_TELEPORTERS) if(BT.id == src.id_target) - usr.loc = BT.loc //Teleport to location with correct id. - return \ No newline at end of file + M.forceMove(BT.loc) //Teleport to location with correct id. //VOREStation Edit + return diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index da675f6828..7c88ab8ad3 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -42,6 +42,10 @@ latejoin_gatewaystation += loc delete_me = 1 return + if("JoinLateSifPlains") + latejoin_plainspath += loc + delete_me = 1 + return //CHOMPEdit End if("JoinLateElevator") latejoin_elevator += loc diff --git a/code/game/objects/effects/map_effects/portal.dm b/code/game/objects/effects/map_effects/portal.dm index ede5cbdaca..f07ba99767 100644 --- a/code/game/objects/effects/map_effects/portal.dm +++ b/code/game/objects/effects/map_effects/portal.dm @@ -51,7 +51,7 @@ when portals are shortly lived, or when portals are made to be obvious with spec plane = TURF_PLANE layer = ABOVE_TURF_LAYER appearance_flags = NONE - + var/obj/effect/map_effect/portal/counterpart = null // The portal line or master that this is connected to, on the 'other side'. // Information used to apply `pixel_[x|y]` offsets so that the visuals line up. @@ -71,8 +71,8 @@ when portals are shortly lived, or when portals are made to be obvious with spec // Called when something touches the portal, and usually teleports them to the other side. /obj/effect/map_effect/portal/Crossed(atom/movable/AM) - if(AM.is_incorporeal()) - return + /*if(AM.is_incorporeal()) + return CHOMPEdit: This is why phased critters couldn't enter z transits */ ..() if(!AM) return diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 749797c433..89b0bc2e87 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -96,7 +96,7 @@ explode(M) if(istype(M, /mob/living/)) - if(!M.hovering) + if(!M.hovering) //CHOMPedit: let's not make wings ignore mines because we use those here. explode(M) /obj/effect/mine/attackby(obj/item/W as obj, mob/living/user as mob) @@ -398,6 +398,6 @@ // This tells AI mobs to not be dumb and step on mines willingly. /obj/item/weapon/mine/is_safe_to_step(mob/living/L) - if(!L.hovering) + if(!L.hovering) //CHOMPedit: Let's not trivialize mines. return FALSE return ..() diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 56cc000dc9..9b66d1b3c1 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -13,13 +13,11 @@ return 0 /obj/effect/step_trigger/Crossed(atom/movable/H as mob|obj) - if(H.is_incorporeal()) - return + if((istype(H, /mob/observer) && !affect_ghosts) || (!istype(H, /mob/observer) && H.is_incorporeal() && !affect_ghosts)) + return //CHOMPEdit: Fixing some step trigger stuff to coincide with incorporeal check changes ..() if(!H) return - if(istype(H, /mob/observer) && !affect_ghosts) - return Trigger(H) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index b2bd8757f3..8c3a5b0551 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -98,10 +98,10 @@ new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype) to_chat(user, "You finish drawing.") + var/msg = "[user.client.key] ([user]) has drawn [drawtype] (with [src]) at [target.x],[target.y],[target.z]." if(config.log_graffiti) - var/msg = "[user.client.key] ([user]) has drawn [drawtype] (with [src]) at [target.x],[target.y],[target.z]." message_admins(msg) - log_game(msg) + log_game(msg) //We will log it anyways. target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on. if(uses) @@ -211,4 +211,4 @@ ..() /obj/item/weapon/pen/crayon/attack_self(var/mob/user) - return \ No newline at end of file + return diff --git a/code/game/objects/items/devices/ticket_printer.dm b/code/game/objects/items/devices/ticket_printer.dm new file mode 100644 index 0000000000..8817c7ec87 --- /dev/null +++ b/code/game/objects/items/devices/ticket_printer.dm @@ -0,0 +1,58 @@ +/obj/item/device/ticket_printer + name = "ticket printer" + desc = "It prints security citations!" + icon = 'icons/obj/device_vr.dmi' + icon_state = "sec_ticket_printer" + var/print_cooldown = 1 MINUTE + var/last_print + +/obj/item/device/ticket_printer/attack_self(mob/user) + . = ..() + if(last_print + print_cooldown <= world.time) + print_a_ticket(user) + else + to_chat(user, "\The [src] is not ready to print another ticket yet.") + +/obj/item/device/ticket_printer/proc/print_a_ticket(mob/user) + + var/ticket_name = sanitize(tgui_input_text(user, "The Name of the person you are issuing the ticket to.", "Name", max_length = 100)) + if(length(ticket_name) > 100) + tgui_alert_async(usr, "Entered name too long. 100 character limit.","Error") + return + if(!ticket_name) + return + var/details = sanitize(tgui_input_text(user, "What is the ticket for? Avoid entering personally identifiable information in this section. This information should not be used to harrass or otherwise make the person feel uncomfortable. (Max length: 200)", "Ticket Details", max_length = 200)) + if(length(details) > 200) + tgui_alert_async(usr, "Entered details too long. 200 character limit.","Error") + return + if(!details) + return + + var/turf/our_turf = get_turf(user) + + var/final = "

Nanotrasen Security Citation


This security citation has been issued to
[capitalize(ticket_name)]
Reason:
[details]
See your local representative at Central Command after the shift is over to resolve this issue.
" + + var/obj/item/weapon/paper/sec_ticket/p = new /obj/item/weapon/paper/sec_ticket(our_turf) + + p.info = final + p.name = "Security Citation: [ticket_name]" + playsound(user, 'sound/items/ticket_printer.ogg', 75, 1) + + security_printer_tickets |= details + log_and_message_admins("has issued '[ticket_name]' a security citation: \"[details]\"", user) + last_print = world.time + +/obj/item/weapon/paper/sec_ticket + name = "Security Citation" + desc = "A citation issued by security for some kind of infraction!" + icon = 'icons/obj/bureaucracy_vr.dmi' + icon_state = "sec_ticket" + +/obj/item/weapon/paper/sec_ticket/Initialize(mapload, text, title) + . = ..() + icon = 'icons/obj/bureaucracy_vr.dmi' + icon_state = "sec_ticket" + +/obj/item/weapon/paper/sec_ticket/update_icon() + icon = icon + icon_state = icon_state diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index d67d4f503b..6c50140a65 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -208,6 +208,12 @@ icon_state = "techtile_grid" no_variants = FALSE +/obj/item/stack/tile/floor/techmaint + name = "maint techfloor tile" + singular_name = "maint techfloor tile" + icon_state = "techtile_maint" + no_variants = FALSE + /obj/item/stack/tile/floor/steel_dirty name = "steel floor tile" singular_name = "steel floor tile" diff --git a/code/game/objects/items/weapons/id cards/station_ids.dm b/code/game/objects/items/weapons/id cards/station_ids.dm index 148df8db50..9154f34843 100644 --- a/code/game/objects/items/weapons/id cards/station_ids.dm +++ b/code/game/objects/items/weapons/id cards/station_ids.dm @@ -53,8 +53,7 @@ name = "[src.registered_name]'s ID Card ([src.assignment])" /obj/item/weapon/card/id/proc/set_id_photo(var/mob/M) - COMPILE_OVERLAYS(M) - SSoverlays.queue -= M + M.ImmediateOverlayUpdate() var/icon/F = getFlatIcon(M, defdir = SOUTH, no_anim = TRUE) front = "'data:image/png;base64,[icon2base64(F)]'" diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index 679e342ad2..f153e11fa8 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -982,6 +982,9 @@

Food for Dummies

Here is a guide on basic food recipes and also how to not poison your customers accidentally. +

((OOC link for updated working recipes here))

+ vore-station.net/infodump/recipes_food.html +

Basics:

Knead an egg and some flour to make dough. Bake that to make a bun or flatten and cut it. @@ -1848,4 +1851,4 @@
- "} \ No newline at end of file + "} diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 3afc5d64a5..df9886cbb6 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -116,6 +116,40 @@ desc = "Holds tools, looks snazzy." icon_state = "utilitybelt_ce" item_state = "utility_ce" + storage_slots = 8 //If they get better everything-else, why not the belt too? + can_hold = list( + /obj/item/weapon/rcd, //They've given one from the get-go, it's hard to imagine they wouldn't be given something that can store it neater than a bag + /obj/item/weapon/tool/crowbar, + /obj/item/weapon/tool/screwdriver, + /obj/item/weapon/weldingtool, + /obj/item/weapon/tool/wirecutters, + /obj/item/weapon/tool/wrench, + /obj/item/device/multitool, + /obj/item/device/flashlight, + /obj/item/weapon/cell/device, + /obj/item/stack/cable_coil, + /obj/item/device/t_scanner, + /obj/item/device/analyzer, + /obj/item/clothing/glasses, + /obj/item/clothing/gloves, + /obj/item/device/pda, + /obj/item/device/megaphone, + /obj/item/taperoll, + /obj/item/device/radio/headset, + /obj/item/device/robotanalyzer, + /obj/item/weapon/material/minihoe, + /obj/item/weapon/material/knife/machete/hatchet, + /obj/item/device/analyzer/plant_analyzer, + /obj/item/weapon/extinguisher/mini, + /obj/item/weapon/tape_roll, + /obj/item/device/integrated_electronics/wirer, + /obj/item/device/integrated_electronics/debugger, + /obj/item/weapon/shovel/spade, + /obj/item/stack/nanopaste, + /obj/item/device/geiger, + /obj/item/areaeditor/blueprints, //It's a bunch of paper that could prolly be rolled up & slipped into the belt, not to mention CE only, see the RCD's thing above + /obj/item/wire_reader //As above + ) /obj/item/weapon/storage/belt/utility/chief/full starts_with = list( @@ -255,7 +289,8 @@ /obj/item/weapon/gun/projectile/p92x, /obj/item/taperoll, /obj/item/weapon/gun/projectile/colt/detective, - /obj/item/device/holowarrant + /obj/item/device/holowarrant, + /obj/item/device/ticket_printer //VOREStation Edit ) /obj/item/weapon/storage/belt/detective @@ -296,9 +331,12 @@ /obj/item/device/flash, /obj/item/weapon/flame/lighter, /obj/item/weapon/reagent_containers/food/snacks/donut/, - /obj/item/ammo_magazine, - /obj/item/weapon/gun/projectile/colt/detective, - /obj/item/device/holowarrant + ///obj/item/ammo_magazine, //Detectives don't get projectile weapons as standard here + ///obj/item/weapon/gun/projectile/colt/detective, //Detectives don't get projectile weapons as standard here + /obj/item/weapon/gun/energy/stunrevolver/detective, //In keeping with the same vein as above, they can store their special one + /obj/item/device/holowarrant, + /obj/item/weapon/reagent_containers/food/drinks/flask, + /obj/item/device/ticket_printer //VOREStation Edit ) /obj/item/weapon/storage/belt/soulstone diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 48ced948be..260646f1ec 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -134,8 +134,8 @@ force = 7.5 /obj/item/weapon/surgical/scalpel/ripper - name = "organ pincers" - desc = "A horrifying bladed tool with a large metal spike in its center. The tool is used for rapidly removing organs from hopefully willing patients." + name = "jagged scalpel" + desc = "A horrifying bladed tool with a large metal spike in its center. The tool is used for rapidly removing organs or medical malpractice." icon_state = "organ_ripper" item_state = "bone_setter" force = 15.0 diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm index ab673d3fc0..38ef51b498 100644 --- a/code/game/objects/items/weapons/tools/weldingtool.dm +++ b/code/game/objects/items/weapons/tools/weldingtool.dm @@ -92,6 +92,8 @@ if(S.robo_repair(15, BRUTE, "some dents", src, user)) remove_fuel(1, user) return 1 + else + return 1 //Stops you from accidentally harming someone while on help intent. return ..() diff --git a/code/game/objects/random/_random.dm b/code/game/objects/random/_random.dm index 460ef4ef4f..3d68245676 100644 --- a/code/game/objects/random/_random.dm +++ b/code/game/objects/random/_random.dm @@ -6,12 +6,14 @@ var/spawn_nothing_percentage = 0 // this variable determines the likelyhood that this random object will not spawn anything var/drop_get_turf = TRUE -// creates a new object and deletes itself + /obj/random/Initialize() + . = INITIALIZE_HINT_QDEL ..() - if(!prob(spawn_nothing_percentage)) - try_spawn_item() - return INITIALIZE_HINT_QDEL + if (prob(spawn_nothing_percentage)) + return + try_spawn_item() + /obj/random/proc/try_spawn_item() var/atom/result = spawn_item() diff --git a/code/game/objects/random/guns_and_ammo.dm b/code/game/objects/random/guns_and_ammo.dm index 9d6053336d..96184919da 100644 --- a/code/game/objects/random/guns_and_ammo.dm +++ b/code/game/objects/random/guns_and_ammo.dm @@ -507,7 +507,6 @@ /obj/random/projectile/scrapped_gun name = "broken gun spawner" desc = "Spawns a random broken gun, or rarely a fully functional one." - icon = 'icons/obj/gun.dmi' icon_state = "gun_scrap" /obj/random/projectile/scrapped_gun/item_to_spawn() diff --git a/code/game/objects/random/mapping.dm b/code/game/objects/random/mapping.dm index 0fa2cfb40e..8cbd0b5d01 100644 --- a/code/game/objects/random/mapping.dm +++ b/code/game/objects/random/mapping.dm @@ -83,7 +83,8 @@ prob(5);/obj/machinery/vending/snlvend, prob(5);/obj/machinery/vending/sovietsoda, prob(5);/obj/machinery/vending/sovietvend, - prob(5);/obj/machinery/vending/radren) //VOREStation Edit End + prob(5);/obj/machinery/vending/radren, + prob(3);/obj/machinery/vending/altevian) //VOREStation Edit End /obj/random/vendorfood //Random food vendors for station use name = "random snack vending machine" diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index 700d9c063f..934d119d77 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -245,6 +245,7 @@ desc = "Hot Stuff." icon_state = "sus" spawn_nothing_percentage = 50 + /obj/random/contraband/item_to_spawn() return pick(prob(6);/obj/item/weapon/storage/pill_bottle/paracetamol, //VOREStation Edit, prob(4);/obj/item/weapon/storage/pill_bottle/happy, @@ -307,17 +308,65 @@ prob(5);/obj/item/weapon/spacecash/c1000) /obj/random/soap - name = "Random Soap" - desc = "This is a random bar of soap." - icon = 'icons/obj/items.dmi' - icon_state = "soap" + name = "Random Soap (All)" + desc = "This is a random bar of soap. Includes special types." + icon = 'icons/obj/soap.dmi' + icon_state = "rainbow_soap" /obj/random/soap/item_to_spawn() - return pick(prob(3);/obj/item/weapon/soap, - prob(2);/obj/item/weapon/soap/nanotrasen, - prob(2);/obj/item/weapon/soap/deluxe, - prob(1);/obj/item/weapon/soap/syndie) + return pick(/obj/item/weapon/soap, + /obj/item/weapon/soap/nanotrasen, + /obj/item/weapon/soap/deluxe, + /obj/item/weapon/soap/syndie, + /obj/item/weapon/soap/space_soap, + /obj/item/weapon/soap/space_soap, + /obj/item/weapon/soap/water_soap, + /obj/item/weapon/soap/fire_soap, + /obj/item/weapon/soap/rainbow_soap, + /obj/item/weapon/soap/diamond_soap, + /obj/item/weapon/soap/uranium_soap, + /obj/item/weapon/soap/silver_soap, + /obj/item/weapon/soap/brown_soap, + /obj/item/weapon/soap/white_soap, + /obj/item/weapon/soap/grey_soap, + /obj/item/weapon/soap/pink_soap, + /obj/item/weapon/soap/purple_soap, + /obj/item/weapon/soap/blue_soap, + /obj/item/weapon/soap/cyan_soap, + /obj/item/weapon/soap/green_soap, + /obj/item/weapon/soap/yellow_soap, + /obj/item/weapon/soap/orange_soap, + /obj/item/weapon/soap/red_soap, + /obj/item/weapon/soap/golden_soap) +/obj/random/soap_common + name = "Random Soap (Common)" + desc = "This is a random bar of soap. Only has the basic types; no NT, deluxe, or syndisoap." + icon = 'icons/obj/soap.dmi' + icon_state = "rainbow_soap" + +/obj/random/soap_common/item_to_spawn() + return pick(/obj/item/weapon/soap, + /obj/item/weapon/soap/space_soap, + /obj/item/weapon/soap/space_soap, + /obj/item/weapon/soap/water_soap, + /obj/item/weapon/soap/fire_soap, + /obj/item/weapon/soap/rainbow_soap, + /obj/item/weapon/soap/diamond_soap, + /obj/item/weapon/soap/uranium_soap, + /obj/item/weapon/soap/silver_soap, + /obj/item/weapon/soap/brown_soap, + /obj/item/weapon/soap/white_soap, + /obj/item/weapon/soap/grey_soap, + /obj/item/weapon/soap/pink_soap, + /obj/item/weapon/soap/purple_soap, + /obj/item/weapon/soap/blue_soap, + /obj/item/weapon/soap/cyan_soap, + /obj/item/weapon/soap/green_soap, + /obj/item/weapon/soap/yellow_soap, + /obj/item/weapon/soap/orange_soap, + /obj/item/weapon/soap/red_soap, + /obj/item/weapon/soap/golden_soap) /obj/random/drinkbottle name = "random drink" diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm index d4ba52ef82..ae5dc0c666 100644 --- a/code/game/objects/structures/catwalk.dm +++ b/code/game/objects/structures/catwalk.dm @@ -13,7 +13,9 @@ var/static/plating_colors = list( /obj/item/stack/tile/floor = "#858a8f", /obj/item/stack/tile/floor/dark = "#4f4f4f", - /obj/item/stack/tile/floor/white = "#e8e8e8") + /obj/item/stack/tile/floor/white = "#e8e8e8", + /obj/item/stack/tile/floor/techmaint = "#4d585b", + /obj/item/stack/tile/floor/techgrey = "#363f43") var/health = 100 var/maxhealth = 100 @@ -189,3 +191,13 @@ icon_state = "catwalk_platedwhite" tile = /obj/item/stack/tile/floor/white platecolor = "#e8e8e8" + +/obj/effect/catwalk_plated/techmaint + icon_state = "catwalk_techmaint" + tile = /obj/item/stack/tile/floor/techmaint + platecolor = "#4d585b" + +/obj/effect/catwalk_plated/techfloor + icon_state = "catwalk_techfloor" + tile = /obj/item/stack/tile/floor/techgrey + platecolor = "#363f43" \ No newline at end of file diff --git a/code/game/objects/structures/cliff.dm b/code/game/objects/structures/cliff.dm index 9ee6570247..016727ac34 100644 --- a/code/game/objects/structures/cliff.dm +++ b/code/game/objects/structures/cliff.dm @@ -153,7 +153,7 @@ two tiles on initialization, and which way a cliff is facing may change during m /obj/structure/cliff/CanPass(atom/movable/mover, turf/target) if(isliving(mover)) var/mob/living/L = mover - if(L.hovering) // Flying mobs can always pass. + if(L.hovering || L.flying) // Flying mobs can always pass. return TRUE return ..() @@ -174,7 +174,7 @@ two tiles on initialization, and which way a cliff is facing may change during m ..() /obj/structure/cliff/proc/should_fall(mob/living/L) - if(L.hovering) + if(L.hovering || L.flying) return FALSE var/turf/T = get_turf(L) diff --git a/code/game/objects/structures/crates_lockers/largecrate_vr.dm b/code/game/objects/structures/crates_lockers/largecrate_vr.dm index 3b35be2479..47ec0eedf0 100644 --- a/code/game/objects/structures/crates_lockers/largecrate_vr.dm +++ b/code/game/objects/structures/crates_lockers/largecrate_vr.dm @@ -162,4 +162,9 @@ /obj/structure/largecrate/animal/weretiger name = "Weretiger Crate" desc = "You can hear a lot of annoyed scratches, clearly someone doesn't enjoy being locked up." - starts_with = list(/mob/living/simple_mob/vore/weretiger) \ No newline at end of file + starts_with = list(/mob/living/simple_mob/vore/weretiger) + +/obj/structure/largecrate/tits + name = "A pair of Great tits" + desc = "You can hear two round things inside" + starts_with = list (/mob/living/simple_mob/animal/passive/bird/azure_tit/great, /mob/living/simple_mob/animal/passive/bird/azure_tit/great) diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 29159503ab..7234baf50e 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -12,10 +12,13 @@ var/hitstaken = 0 var/locked = 1 var/smashed = 0 + var/starts_with_axe = TRUE /obj/structure/fireaxecabinet/Initialize() . = ..() - fireaxe = new /obj/item/weapon/material/twohanded/fireaxe() + if(starts_with_axe) + fireaxe = new /obj/item/weapon/material/twohanded/fireaxe() + update_icon() /obj/structure/fireaxecabinet/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri //..() //That's very useful, Erro @@ -184,3 +187,7 @@ if(fireaxe) hasaxe = 1 icon_state = text("fireaxe[][][][]",hasaxe,open,hitstaken,smashed) + + +/obj/structure/fireaxecabinet/empty + starts_with_axe = FALSE diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index dfa33067dc..45625c3990 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -8,45 +8,39 @@ w_class = ITEMSIZE_NORMAL /obj/structure/sign/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - qdel(src) - return - if(3.0) - qdel(src) - return - else - return + qdel(src) -/obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction +/obj/structure/sign/attackby(obj/item/tool, mob/user) //deconstruction if(tool.is_screwdriver() && !istype(src, /obj/structure/sign/scenery) && !istype(src, /obj/structure/sign/double)) playsound(src, tool.usesound, 50, 1) - to_chat(user, "You unfasten the sign with your [tool].") - var/obj/item/sign/S = new(src.loc) - S.name = name - S.desc = desc - S.icon_state = icon_state - //var/icon/I = icon('icons/obj/decals.dmi', icon_state) - //S.icon = I.Scale(24, 24) - S.sign_state = icon_state - qdel(src) + unfasten(user) else ..() +/obj/structure/sign/proc/unfasten(mob/user) + user.visible_message(SPAN_NOTICE("\The [user] unfastens \the [src]."), SPAN_NOTICE("You unfasten \the [src].")) + var/obj/item/sign/S = new(src.loc) + S.name = name + S.desc = desc + S.icon_state = icon_state + S.sign_state = icon_state + S.original_type = type + qdel(src) + + /obj/item/sign name = "sign" desc = "" icon = 'icons/obj/decals.dmi' w_class = ITEMSIZE_NORMAL //big var/sign_state = "" + var/original_type /obj/item/sign/attackby(obj/item/tool as obj, mob/user as mob) //construction if(tool.is_screwdriver() && isturf(user.loc)) var/direction = tgui_input_list(usr, "In which direction?", "Select direction.", list("North", "East", "South", "West", "Cancel")) if(direction == "Cancel") return - var/obj/structure/sign/S = new(user.loc) + var/target_type = original_type || /obj/structure/sign + var/obj/structure/sign/S = new target_type(user.loc) switch(direction) if("North") S.pixel_y = 32 @@ -124,12 +118,17 @@ desc = "A warning sign which reads 'NO SMOKING'." icon_state = "nosmoking2" +/obj/structure/sign/nosmoking_2/burnt + name = "\improper NO SMOKING" + desc = "A warning sign which reads 'NO SMOKING'. It looks like someone didn't follow its advice..." + icon_state = "nosmoking2_burnt" + /obj/structure/sign/warning name = "\improper WARNING" icon_state = "securearea" -/obj/structure/sign/warning/New() - ..() +/obj/structure/sign/warning/Initialize() + . = ..() desc = "A warning sign which reads '[name]'." /obj/structure/sign/warning/airlock @@ -185,8 +184,8 @@ name = "\improper LETHAL TURRETS" icon_state = "turrets" -/obj/structure/sign/warning/lethal_turrets/New() - ..() +/obj/structure/sign/warning/lethal_turrets/Initialize() + . = ..() desc += " Enter at own risk!." /obj/structure/sign/warning/mail_delivery @@ -359,8 +358,8 @@ //disabled this proc, it serves no purpose except to overwrite the description that already exists. may have been intended for making your own signs? //seems to defeat the point of having a generic directional sign that mappers could edit and use in POIs? left it here in case something breaks. /* -/obj/structure/sign/directions/New() - ..() +/obj/structure/sign/directions/Initialize() + . = ..() desc = "A direction sign, pointing out the way to \the [src]." */ @@ -441,7 +440,7 @@ /obj/structure/sign/levels/security name = "\improper Security Department" desc = "A level sign, stating the level to find the Security Department on." - icon_state = "direction_sec" + icon_state = "level_sec" /obj/structure/sign/directions/security/armory name = "\improper Armory" @@ -451,7 +450,7 @@ /obj/structure/sign/levels/security/armory name = "\improper Armory" desc = "A level sign, stating the level to find the Armory on." - icon_state = "direction_armory" + icon_state = "level_armory" /obj/structure/sign/directions/security/brig name = "\improper Brig" @@ -533,12 +532,12 @@ /obj/structure/sign/directions/science/toxins name = "\improper Toxins Lab" desc = "A direction sign, pointing out the way to the Toxins Lab." - icon_state = "direction_sci" + icon_state = "direction_toxins" /obj/structure/sign/levels/science/toxins name = "\improper Toxins Lab" desc = "A level sign, stating the level to find the Toxins Lab on." - icon_state = "level_sci" + icon_state = "level_toxins" /obj/structure/sign/directions/science/robotics name = "\improper Robotics Workshop" @@ -604,12 +603,12 @@ /obj/structure/sign/directions/medical/chemlab name = "\improper Chemistry Lab" desc = "A direction sign, pointing out the way to the Chemistry Lab." - icon_state = "direction_med" + icon_state = "direction_chemlab" /obj/structure/sign/levels/medical/chemlab name = "\improper Chemistry Lab" desc = "A level sign, stating the level to find the Chemistry Lab on." - icon_state = "level_med" + icon_state = "level_chemlab" /obj/structure/sign/directions/medical/surgery name = "\improper Surgery" @@ -1381,7 +1380,7 @@ icon_state = "level-b-large" /obj/structure/sign/level/ground - name = "\improper Basement Level" + name = "\improper Ground Level" icon_state = "level-g" /obj/structure/sign/level/ground/large @@ -1485,3 +1484,472 @@ /obj/structure/sign/bigname/seg_7 icon_state = "cyno_7" + +/obj/structure/sign/clock + name = "wall clock" + desc = "A basic wall clock, synced to the current system time." + icon_state = "clock" + +/obj/structure/sign/clock/examine(mob/user) + . = ..() + . += "The clock shows that the time is [stationtime2text()]." + +/obj/structure/sign/calendar + name = "calendar" + desc = "It's an old-school, NanoTrasen branded wall calendar. Sure, it might be obsolete with modern technology, but it's still hard to imagine an office without one." + icon_state = "calendar" + +/obj/structure/sign/calendar/examine(mob/user) + . = ..() + . += "The calendar shows that the date is [stationdate2text()]." + if (Holiday.len) + . += "Today is [english_list(Holiday)]." + +/obj/structure/sign/explosive + name = "\improper HIGH EXPLOSIVES sign" + desc = "A warning sign which reads 'HIGH EXPLOSIVES'." + icon_state = "explosives" + +/obj/structure/sign/chemdiamond + name = "\improper HAZARDOUS CHEMICALS sign" + desc = "A sign that warns of potentially hazardous chemicals nearby, indicating health risk, flash point, and reactivity." + icon_state = "chemdiamond" + +//Here be Flags + +//Flag item +/obj/item/flag + name = "boxed flag" + desc = "A flag neatly folded into a wooden container." + icon = 'icons/obj/flags.dmi' + icon_state = "flag_boxed" + var/flag_path = "flag" + var/flag_size = 0 + +//Flag on wall +/obj/structure/sign/flag + name = "blank flag" + desc = "Nothing to see here." + icon = 'icons/obj/flags.dmi' + icon_state = "flag" + var/icon/ripped_outline = icon('icons/obj/flags.dmi', "ripped") + var/obj/structure/sign/flag/linked_flag //For double flags + var/obj/item/flag/flagtype //For returning your flag + var/ripped = FALSE //If we've been torn down + +/obj/structure/sign/flag/blank + name = "blank banner" + desc = "A blank white flag." + icon_state = "flag" + flagtype = /obj/item/flag + +/obj/item/flag/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams) + if (!adjacent) + return + + if((!iswall(A) && !istype(A, /obj/structure/window)) || !isturf(user.loc)) + to_chat(user, SPAN_WARNING("You can't place this here!")) + return + + var/placement_dir = get_dir(user, A) + if (!(placement_dir in cardinal)) + to_chat(user, SPAN_WARNING("You must stand directly in front of the location you wish to place that on.")) + return + + var/obj/structure/sign/flag/P = new(user.loc) + + switch(placement_dir) + if(NORTH) + P.pixel_y = 32 + if(SOUTH) + P.pixel_y = -32 + if(EAST) + P.pixel_x = 32 + if(WEST) + P.pixel_x = -32 + + P.dir = placement_dir + if(flag_size) + P.icon_state = "[flag_path]_l" + var/obj/structure/sign/flag/P2 = new(user.loc) + P.linked_flag = P2 + P2.linked_flag = P + P2.icon_state = "[flag_path]_r" + P2.dir = P.dir + switch(P2.dir) + if(NORTH) + P2.pixel_y = P.pixel_y + P2.pixel_x = 32 + if(SOUTH) + P2.pixel_y = P.pixel_y + P2.pixel_x = 32 + if(EAST) + P2.pixel_x = P.pixel_x + P2.pixel_y = -32 + if(WEST) + P2.pixel_x = P.pixel_x + P2.pixel_y = 32 + P2.name = name + P2.desc = desc + P2.description_info = description_info + P2.description_fluff = description_fluff + P2.flagtype = type + else + P.icon_state = "[flag_path]" + P.name = name + P.desc = desc + P.description_info = description_info + P.description_fluff = description_fluff + P.flagtype = type + qdel(src) + +/obj/structure/sign/flag/Destroy() + if(linked_flag?.linked_flag == src) //Catches other instances where one half might be destroyed, say by a broken wall, to avoid runtimes. + linked_flag.linked_flag = null //linked_flag + . = ..() + +/obj/structure/sign/flag/ex_act(severity) + switch(severity) + if(1) + qdel(src) + if(2) + if(prob(50)) + qdel(src) + else + rip() + if(3) + rip() + +/obj/structure/sign/flag/unfasten(mob/user) + if(!ripped) + user.visible_message(SPAN_NOTICE("\The [user] unfastens \the [src] and folds it back up."), SPAN_NOTICE("You unfasten \the [src] and fold it back up.")) + var/obj/item/flag/F = new flagtype(get_turf(user)) + user.put_in_hands(F) + else + user.visible_message(SPAN_NOTICE("\The [user] unfastens the tattered remnants of \the [src]."), SPAN_NOTICE("You unfasten the tattered remains of \the [src].")) + if(linked_flag) + qdel(linked_flag) //otherwise you're going to get weird duping nonsense + qdel(src) + +/obj/structure/sign/flag/attack_hand(mob/user) + if(alert("Do you want to rip \the [src] from its place?","You think...","Yes","No") == "Yes") + if(!Adjacent(user)) //Cannot bring up dialogue and walk away + return FALSE + visible_message(SPAN_WARNING("\The [user] rips \the [src] in a single, decisive motion!" )) + playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, 1) + add_fingerprint(user) + rip() + +/obj/structure/sign/flag/proc/rip(var/rip_linked = TRUE) + var/icon/I = new('icons/obj/flags.dmi', icon_state) + var/icon/mask = new('icons/obj/flags.dmi', "ripped") + I.AddAlphaMask(mask) + icon = I + name = "ripped flag" + desc = "You can't make out anything from the flag's original print. It's ruined." + ripped = TRUE + if(linked_flag && rip_linked) + linked_flag.rip(FALSE) //Prevents an infinite ripping loop + +/obj/structure/sign/flag/attackby(obj/item/W, mob/user) + ..() + if(istype(W, /obj/item/weapon/flame/lighter) || istype(W, /obj/item/weapon/weldingtool)) + visible_message(SPAN_WARNING("\The [user] starts to burn \the [src] down!")) + if(!do_after(user, 2 SECONDS)) + return FALSE + visible_message(SPAN_WARNING("\The [user] burns \the [src] down!")) + playsound(src.loc, 'sound/items/cigs_lighters/cig_light.ogg', 100, 1) + new /obj/effect/decal/cleanable/ash(src.loc) + if(linked_flag) + qdel(linked_flag) + qdel(src) + return TRUE + +/obj/structure/sign/flag/blank/left + icon_state = "flag_l" + +/obj/structure/sign/flag/blank/right + icon_state = "flag_r" + +//SolGov +/obj/structure/sign/flag/sol + name = "Solar Confederate Government flag" + desc = "The bright blue flag of the Solar Confederate Government." + icon_state = "solgov" + flagtype = /obj/item/flag/sol + +/obj/structure/sign/flag/sol/left + icon_state = "solgov_l" + +/obj/structure/sign/flag/sol/right + icon_state = "solgov_r" + +/obj/item/flag/sol + name = "Solar Confederate Government flag" + desc = "The bright blue flag of the Solar Confederate Government." + flag_path = "solgov" + +/obj/item/flag/sol/l + name = "large Solar Confederate Government flag" + flag_size = 1 + +//NanoTrasen +/obj/structure/sign/flag/nt + name = "NanoTrasen corporate flag" + desc = "A flag portraying the logo of the NanoTrasen corporation." + icon_state = "nanotrasen" + flagtype = /obj/item/flag/nt + +/obj/structure/sign/flag/nt/left + icon_state = "nanotrasen_l" + +/obj/structure/sign/flag/nt/right + icon_state = "nanotrasen_r" + +/obj/item/flag/nt + name = "NanoTrasen corporate flag" + desc = "A flag portraying the logo of the NanoTrasen corporation." + flag_path = "nanotrasen" + +/obj/item/flag/nt/l + name = "large NanoTrasen corporate flag" + flag_size = 1 + +//Vir +/obj/structure/sign/flag/vir + name = "Vir Governmental Authority flag" + desc = "The two-tone flag of the Vir Governmental Authority." + description_fluff = "Commonly referred to as VirGov, the Vir Governmental Authority was formed in 2412 as a unified system government following \ + a half century of war between the Sif Planetary Government - or SifGov - and corporate interests in Kara orbit, in order to qualify for full membership \ + in the Solar Confederate Government. Following the Karan Wars it would be almost a century before Trans-Stellar Corporations were allowed their typical \ + freedom to operate unobstructed in the Vir system." + icon_state = "vir" + flagtype = /obj/item/flag/vir + +/obj/structure/sign/flag/vir/left + icon_state = "vir_l" + +/obj/structure/sign/flag/vir/right + icon_state = "vir_r" + +/obj/item/flag/vir + name = "Vir Governmental Authority flag" + desc = "The two-tone flag of the Vir Governmental Authority." + description_fluff = "Commonly referred to as VirGov, the Vir Governmental Authority was formed in 2412 as a unified system government following \ + a half century of war between the Sif Planetary Government - or SifGov - and corporate interests in Kara orbit, in order to qualify for full membership \ + in the Solar Confederate Government. Following the Karan Wars it would be almost a century before Trans-Stellar Corporations were allowed their typical \ + freedom to operate unobstructed in the Vir system." + flag_path = "vir" + +/obj/item/flag/vir/l + name = "large Vir Governmental Authority flag" + flag_size = 1 + +//Almach Association + +/obj/structure/sign/flag/almach_a + name = "Almach Association flag" + desc = "The black and grey flag of the now-defunct Almach Association." + description_fluff = "The Almach Association was a short lived (February 2562 - April 2564) governmental entity formed as an alliance of disparate radical mercurial \ + states in an effort to secede from the Solar Confederate Government. Though the Association were defeated, and ultimately annexed by the Skrellian Far Kingdoms, \ + the Association flag remains a popular symbol with mercurials and secessionists alike. To some, the Almach Association is seen as the first step towards the SCG's \ + \"inevitable\" dissolution." + icon_state = "almach_a" + flagtype = /obj/item/flag/almach_a + +/obj/structure/sign/flag/almach_a/left + icon_state = "almach_a_l" + +/obj/structure/sign/flag/almach_a/right + icon_state = "almach_a_r" + +/obj/item/flag/almach_a + name = "Almach Association flag" + desc = "The black and grey flag of the now-defunct Almach Association." + description_fluff = "The Almach Association was a short lived (February 2562 - April 2564) governmental entity formed as an alliance of disparate radical mercurial \ + states in an effort to secede from the Solar Confederate Government. Though the Association were defeated, and ultimately annexed by the Skrellian Far Kingdoms, \ + the Association flag remains a popular symbol with mercurials and secessionists alike. To some, the Almach Association is seen as the first step towards the SCG's \ + \"inevitable\" dissolution." + flag_path = "almach_a" + +/obj/item/flag/almach_a/l + name = "large Almach Association flag" + flag_size = 1 + +//Almach Protectorate +/obj/structure/sign/flag/almach_p + name = "Almach Protectorate flag" + desc = "The purple flag of the Almach Protectorate." + description_fluff = "The Almach Protectorate was formed from the territory of the Almach Association as a condition of the 2564 Treaty of Whythe. \ + Intended to be closely overseen by the Skrellian Far Kingdom, the Skathari Incursion left the Protectorate functionally independent in many regards, \ + leading to the proliferation of previously restricted genetic modification technology into SolGov territory. However, the Protectorate was also left \ + without meaningful military support, and has suffered sorely in the years since as the Relan-led government has struggled to remilitarize." + icon_state = "almach_p" + flagtype = /obj/item/flag/almach_p + +/obj/structure/sign/flag/almach_p/left + icon_state = "almach_p_l" + +/obj/structure/sign/flag/almach_p/right + icon_state = "almach_p_r" + +/obj/item/flag/almach_p + name = "Almach Protectorate flag" + desc = "The purple flag of the Almach Protectorate." + description_fluff = "The Almach Protectorate was formed from the territory of the Almach Association as a condition of the 2564 Treaty of Whythe. \ + Intended to be closely overseen by the Skrellian Far Kingdom, the Skathari Incursion left the Protectorate functionally independent in many regards, \ + leading to the proliferation of previously restricted genetic modification technology into SolGov territory. However, the Protectorate was also left \ + without meaningful military support, and has suffered sorely in the years since as the Relan-led government has struggled to remilitarize." + flag_path = "almach_p" + +/obj/item/flag/almach_p/l + name = "large Almach Protectorate flag" + flag_size = 1 + +//Vystholm +/obj/structure/sign/flag/vystholm + name = "Vystholm flag" + desc = "The black and gold flag of Vystholm." + description_fluff = "Vystholm is a faction of xenophobic humans who constructed an ark ship, the VHS Rodnakya, in response to the abolition of the hostile \ + First Contact Policy in the early 24th century. Thought to have long departed known space, the Vystholm returned to within range of human territory in response \ + to the Skathari Incursion and has since undertaken a campaign of raiding, terrorism and espionage against established governments, particularly the Tajaran \ + Pearlshield Coalition." + icon_state = "vystholm" + flagtype = /obj/item/flag/vystholm + +/obj/structure/sign/flag/vystholm/left + icon_state = "vystholm_l" + +/obj/structure/sign/flag/vystholm/right + icon_state = "vystholm_r" + +/obj/item/flag/vystholm + name = "Vystholm flag" + desc = "The black and gold flag of Vystholm." + description_fluff = "Vystholm is a faction of xenophobic humans who constructed an ark ship, the VHS Rodnakya, in response to the abolition of the hostile \ + First Contact Policy in the early 24th century. Thought to have long departed known space, the Vystholm returned to within range of human territory in response \ + to the Skathari Incursion and has since undertaken a campaign of raiding, terrorism and espionage against established governments, particularly the Tajaran \ + Pearlshield Coalition." + flag_path = "vystholm" + +/obj/item/flag/vystholm/l + name = "large Vystholm flag" + flag_size = 1 + +//Five Arrows +/obj/structure/sign/flag/fivearrows + name = "Five Arrows flag" + desc = "The red flag of the Five Arrows." + description_fluff = "The Five Arrows is an independent government entity that seceded from the Solar Confederate Government in 2570, in response to percieved \ + failures in aiding the Sagittarius Heights during the Skathari Incursion. The success of the government in achieving effective local defense and prosperity has \ + since attracted the membership of Kauq'xum, a remote Skrellian colony. \The Five Arrows formed the model for SolGov's own semi-autonomous \"Regional Blocs\"." + icon_state = "fivearrows" + flagtype = /obj/item/flag/fivearrows + +/obj/structure/sign/flag/fivearrows/left + icon_state = "fivearrows_l" + +/obj/structure/sign/flag/fivearrows/right + icon_state = "fivearrows_r" + +/obj/item/flag/fivearrows + name = "Five Arrows flag" + desc = "The red flag of the Five Arrows." + description_fluff = "The Five Arrows is an independent government entity that seceded from the Solar Confederate Government in 2570, in response to percieved \ + failures in aiding the Sagittarius Heights during the Skathari Incursion. The success of the government in achieving effective local defense and prosperity has \ + since attracted the membership of Kauq'xum, a remote Skrellian colony. \The Five Arrows formed the model for SolGov's own semi-autonomous \"Regional Blocs\"." + flag_path = "fivearrows" + +/obj/item/flag/fivearrows/l + name = "large Five Arrows flag" + flag_size = 1 + +//Pirates +/obj/structure/sign/flag/pirate + name = "pirate flag" + desc = "Shiver me timbers, hoist the black!" + icon_state = "pirate" + flagtype = /obj/item/flag/pirate + +/obj/structure/sign/flag/pirate/left + icon_state = "pirate_l" + +/obj/structure/sign/flag/pirate/right + icon_state = "pirate_r" + +/obj/item/flag/pirate + name = "pirate flag" + desc = "Shiver me timbers, hoist the black!" + flag_path = "pirate" + + +/obj/item/flag/pirate/l + name = "large pirate flag" + flag_size = 1 + +//Catpirate +/obj/structure/sign/flag/catpirate + name = "Tajaran pirate flag" + desc = "Shiver me whiskers, hoist the black!" + icon_state = "catpirate" + flagtype = /obj/item/flag/catpirate + +/obj/structure/sign/flag/catpirate/left + icon_state = "catpirate_l" + +/obj/structure/sign/flag/catpirate/right + icon_state = "catpirate_r" + +/obj/item/flag/catpirate + name = "Tajaran pirate flag" + desc = "Shiver me whiskers, hoist the black!" + flag_path = "catpirate" + +/obj/item/flag/catpirate/l + name = "large Tajaran pirate flag" + flag_size = 1 + +//Political Parties +/obj/structure/sign/flag/icarus + name = "Icarus Front flag" + desc = "The flag of the right-populist Icarus Front political party." + icon_state = "icarus" + flagtype = /obj/item/flag/icarus + +/obj/item/flag/icarus + name = "Icarus Front flag" + desc = "The flag of the right-populist Icarus Front political party." + flag_path = "icarus" + +/obj/structure/sign/flag/shadowcoalition + name = "Shadow Coalition flag" + desc = "The flag of the neoliberal Shadow Coalition political party." + icon_state = "shadowcoalition" + flagtype = /obj/item/flag/shadowcoalition + +/obj/item/flag/shadowcoalition + name = "Shadow Coalition flag" + desc = "The flag of the neoliberal Shadow Coalition political party." + flag_path = "shadowcoalition" + +/obj/structure/sign/flag/seo + name = "Sol Economic Organization flag" + desc = "The flag of the protectionist Sol Economic Organization political party." + icon_state = "seo" + flagtype = /obj/item/flag/seo + +/obj/item/flag/seo + name = "Sol Economic Organization flag" + desc = "The flag of the protectionist Sol Economic Organization political party." + flag_path = "seo" + +/obj/structure/sign/flag/gap + name = "Galactic Autonomy Party flag" + desc = "The flag of the libertarian Galactic Autonomy Party political party." + icon_state = "gap" + flagtype = /obj/item/flag/seo + +/obj/item/flag/gap + name = "Galactic Autonomy Party flag" + desc = "The flag of the libertarian Galactic Autonomy Party political party." + flag_path = "gap" diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index d21dfc0579..daee0ca179 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -299,7 +299,7 @@ /obj/structure/bed/chair/sofa/update_layer() // Corner east/west should be on top of mobs, any other state's north should be. - if((corner_piece && ((dir & EAST) || (dir & WEST))) || (!corner_piece && (dir & NORTH))) + if(!corner_piece && (dir & NORTH)) plane = MOB_PLANE layer = MOB_LAYER + 0.1 else @@ -318,6 +318,18 @@ base_icon = "sofacorner" corner_piece = TRUE +/obj/structure/bed/chair/sofa/corner/update_icon() + ..() + var/cache_key = "[base_icon]-armrest-[padding_material ? padding_material.name : "no_material"]-permanent" + if(isnull(stool_cache[cache_key])) + var/image/I = image(icon, "[base_icon]_armrest") + I.plane = MOB_PLANE + I.layer = ABOVE_MOB_LAYER + if(padding_material) + I.color = padding_material.icon_colour + stool_cache[cache_key] = I + add_overlay(stool_cache[cache_key]) + // Wooden nonsofa - no corners /obj/structure/bed/chair/sofa/pew name = "pew bench" diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index 9a921ab260..8e9101d3b9 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -419,6 +419,7 @@ var/list/flooring_types /decl/flooring/tiling/new_tile/techmaint icon_base = "techmaint" + build_type = /obj/item/stack/tile/floor/techmaint /decl/flooring/tiling/new_tile/monofloor icon_base = "monofloor" diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm index ff735044db..d0556fb59e 100644 --- a/code/game/turfs/flooring/flooring_premade.dm +++ b/code/game/turfs/flooring/flooring_premade.dm @@ -514,7 +514,9 @@ /turf/simulated/floor/snow/Entered(atom/A) if(isliving(A)) var/mob/living/L = A - if(L.hovering) // Flying things shouldn't make footprints. + if(L.hovering || L.flying) // Flying things shouldn't make footprints. + if(L.flying) + L.adjust_nutrition(-0.5) return ..() var/mdir = "[A.dir]" crossed_dirs[mdir] = 1 diff --git a/code/game/turfs/simulated/outdoors/snow.dm b/code/game/turfs/simulated/outdoors/snow.dm index da5739a31c..e7d1afa545 100644 --- a/code/game/turfs/simulated/outdoors/snow.dm +++ b/code/game/turfs/simulated/outdoors/snow.dm @@ -14,7 +14,9 @@ /turf/simulated/floor/outdoors/snow/Entered(atom/A) if(isliving(A)) var/mob/living/L = A - if(L.hovering) // Flying things shouldn't make footprints. + if(L.hovering || L.flying) // Flying things shouldn't make footprints. + if(L.flying) + L.adjust_nutrition(-0.5) return ..() var/mdir = "[A.dir]" crossed_dirs[mdir] = 1 diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm index 57b89fccae..ea788daba6 100644 --- a/code/game/turfs/simulated/water.dm +++ b/code/game/turfs/simulated/water.dm @@ -136,7 +136,9 @@ /mob/living/proc/check_submerged() if(buckled) return 0 - if(hovering) + if(hovering || flying) + if(flying) + adjust_nutrition(-0.5) return 0 if(locate(/obj/structure/catwalk) in loc) return 0 @@ -215,4 +217,4 @@ var/list/shoreline_icon_cache = list() return poisonlevel *= 1 - L.get_water_protection() if(poisonlevel > 0) - L.adjustToxLoss(poisonlevel) \ No newline at end of file + L.adjustToxLoss(poisonlevel) diff --git a/code/global.dm b/code/global.dm index f5da3edbab..2270f276f6 100644 --- a/code/global.dm +++ b/code/global.dm @@ -91,6 +91,7 @@ var/list/reverse_dir = list( // reverse_dir[dir] = reverse of dir 41, 43, 36, 38, 37, 39, 44, 46, 45, 47, 16, 18, 17, 19, 24, 26, 25, 27, 20, 22, 21, 23, 28, 30, 29, 31, 48, 50, 49, 51, 56, 58, 57, 59, 52, 54, 53, 55, 60, 62, 61, 63 ) +var/global/const/SQRT_TWO = 1.41421356237 var/datum/configuration/config = null diff --git a/code/global_ch.dm b/code/global_ch.dm deleted file mode 100644 index 09ed953a16..0000000000 --- a/code/global_ch.dm +++ /dev/null @@ -1,5 +0,0 @@ - -var/list/shell_module_blacklist = list( - "Sci-borg", "Research" - ) -var/list/latejoin_gatewaystation = list() \ No newline at end of file diff --git a/code/modules/admin/admin_verb_lists_vr.dm b/code/modules/admin/admin_verb_lists_vr.dm index c7f6745c43..4719c289c1 100644 --- a/code/modules/admin/admin_verb_lists_vr.dm +++ b/code/modules/admin/admin_verb_lists_vr.dm @@ -128,7 +128,8 @@ var/list/admin_verbs_admin = list( /client/proc/despawn_player, /datum/admins/proc/view_feedback, /client/proc/make_mentor, - /client/proc/unmake_mentor + /client/proc/unmake_mentor, + /client/proc/removetickets ) var/list/admin_verbs_ban = list( @@ -231,7 +232,7 @@ var/list/admin_verbs_debug = list( /client/proc/cmd_debug_tog_aliens, /client/proc/cmd_display_del_log, /client/proc/cmd_display_init_log, - /client/proc/cmd_display_overlay_log, + // /client/proc/cmd_display_overlay_log, /client/proc/air_report, /client/proc/reload_admins, /client/proc/reload_eventMs, diff --git a/code/modules/admin/admin_verbs_vr.dm b/code/modules/admin/admin_verbs_vr.dm index 994d12a4ea..a96217fb72 100644 --- a/code/modules/admin/admin_verbs_vr.dm +++ b/code/modules/admin/admin_verbs_vr.dm @@ -54,3 +54,23 @@ segments = 36 if(tgui_alert(usr, "\The [orbiter] will orbit around [center]. Is this okay?", "Confirm Orbit", list("Yes", "No")) == "Yes") orbiter.orbit(center, distance, clock, speed, segments) + +/client/proc/removetickets() + set name = "Security Tickets" + set category = "Admin" + set desc = "Allows one to remove tickets from the global list." + + if(!check_rights(R_ADMIN)) + return + + if(security_printer_tickets.len >= 1) + var/input = tgui_input_list(usr, "Which message?", "Security Tickets", security_printer_tickets) + + if(!input) + return + if(tgui_alert(usr, "Do you want to remove the following message from the global list? \"[input]\"", "Remove Ticket", list("Yes", "No")) == "Yes") + security_printer_tickets -= input + log_and_message_admins("removed a security ticket from the global list: \"[input]\"", usr) + + else + tgui_alert_async(usr, "The ticket list is empty.","Empty") \ No newline at end of file diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 0be7586c59..77ab40adc1 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -220,7 +220,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) "color" = COLOR_WEBHOOK_POOR ) ) - + GLOB.ahelp_tickets.active_tickets += src /datum/admin_help/Destroy() @@ -239,7 +239,10 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /datum/admin_help/proc/FullMonty(ref_src) if(!ref_src) ref_src = "\ref[src]" - . = ADMIN_FULLMONTY_NONAME(initiator.mob) + if(initiator && initiator.mob) + . = ADMIN_FULLMONTY_NONAME(initiator.mob) + else + . = "Initiator disconnected." if(state == AHELP_ACTIVE) . += ClosureLinks(ref_src) @@ -460,6 +463,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) //Show the ticket panel /datum/admin_help/proc/TicketPanel() + tgui_interact(usr.client.mob) + +/datum/admin_help/proc/TicketPanelLegacy() var/list/dat = list("Ticket #[id]") var/ref_src = "\ref[src]" dat += "

Admin Help Ticket #[id]: [LinkedReplyName(ref_src)]

" @@ -500,6 +506,65 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) log_admin(msg) TicketPanel() //we have to be here to do this +/datum/admin_help/tgui_fallback(payload) + if(..()) + return + + TicketPanelLegacy() + +/datum/admin_help/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AdminTicketPanel", "Ticket #[id] - [LinkedReplyName("\ref[src]")]") + ui.open() + +/datum/admin_help/tgui_state(mob/user) + return GLOB.tgui_admin_state + +/datum/admin_help/tgui_data(mob/user) + var/list/data = list() + + data["id"] = id + + var/ref_src = "\ref[src]" + data["title"] = name + data["name"] = LinkedReplyName(ref_src) + + switch(state) + if(AHELP_ACTIVE) + data["state"] = "open" + if(AHELP_RESOLVED) + data["state"] = "resolved" + if(AHELP_CLOSED) + data["state"] = "closed" + else + data["state"] = "unknown" + + data["opened_at"] = (world.time - opened_at) + data["closed_at"] = (world.time - closed_at) + data["opened_at_date"] = gameTimestamp(wtime = opened_at) + data["closed_at_date"] = gameTimestamp(wtime = closed_at) + + data["actions"] = FullMonty(ref_src) + + data["log"] = _interactions + + return data + +/datum/admin_help/tgui_act(action, params) + if(..()) + return + switch(action) + if("retitle") + Retitle() + . = TRUE + if("reopen") + Reopen() + . = TRUE + if("legacy") + TicketPanelLegacy() + . = TRUE + //Forwarded action from admin/Topic /datum/admin_help/proc/Action(action) testing("Ahelp action: [action]") diff --git a/code/modules/admin/verbs/adminhelp_vr.dm b/code/modules/admin/verbs/adminhelp_vr.dm index 9d66223b66..d6bdb37f21 100644 --- a/code/modules/admin/verbs/adminhelp_vr.dm +++ b/code/modules/admin/verbs/adminhelp_vr.dm @@ -34,5 +34,6 @@ //if they requested spice, then remove spice verb temporarily to prevent spamming usr.verbs -= /client/verb/adminspice - spawn(6000) - usr.verbs += /client/verb/adminspice // 10 minute cool-down for spice request + spawn(10 MINUTES) + if(usr) // In case we left in the 10 minute cooldown + usr.verbs += /client/verb/adminspice // 10 minute cool-down for spice request diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index c2e4b671f7..e453842124 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -249,6 +249,7 @@ if(!check_rights(R_DEBUG)) return src << browse(replacetext(SSatoms.InitLog(), "\n", "
"), "window=initlog") +/* /client/proc/cmd_display_overlay_log() set category = "Debug" set name = "Display overlay Log" @@ -256,7 +257,7 @@ if(!check_rights(R_DEBUG)) return render_stats(SSoverlays.stats, src) - +*/ // Render stats list for round-end statistics. /proc/render_stats(list/stats, user, sort = /proc/cmp_generic_stat_item_time) sortTim(stats, sort, TRUE) @@ -676,4 +677,4 @@ var/log = "[key_name(src)] changed [planet.name]'s time to [planet.current_time.show_time("hh:mm")]." message_admins(log) - log_admin(log) \ No newline at end of file + log_admin(log) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index c9c35312f7..24ba5c9d00 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -473,6 +473,9 @@ for(var/i = 1 to 4) assets["bottle-[i].png"] = icon('icons/obj/chemical.dmi', "bottle-[i]") + for(var/i = 1 to 4) // CHOMPedit + assets["patch[i].png"] = icon('icons/obj/chemical.dmi', "patch[i]") // CHOMPedit + for(var/asset_name in assets) register_asset(asset_name, assets[asset_name]) diff --git a/code/modules/busy_space_vr/air_traffic.dm b/code/modules/busy_space_vr/air_traffic.dm index 8a3e5a1607..d353522d96 100644 --- a/code/modules/busy_space_vr/air_traffic.dm +++ b/code/modules/busy_space_vr/air_traffic.dm @@ -4,12 +4,12 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller /datum/lore/atc_controller - var/delay_min = 20 MINUTES //How long between ATC traffic, minimum - var/delay_max = 30 MINUTES //Ditto, maximum + var/delay_min = 45 MINUTES //How long between ATC traffic, minimum + var/delay_max = 90 MINUTES //Ditto, maximum //Shorter delays means more traffic, which gives the impression of a busier system, but also means a lot more radio noise var/backoff_delay = 5 MINUTES //How long to back off if we can't talk and want to. Default is 5 mins. - var/initial_delay = 2 MINUTES //How long to wait before sending the first message of the shift. - var/next_message = 20 MINUTES //When the next message should happen in world.time - Making it default to min value + var/initial_delay = 15 MINUTES //How long to wait before sending the first message of the shift. + var/next_message = 45 MINUTES //When the next message should happen in world.time - Making it default to min value var/force_chatter_type //Force a specific type of messages var/squelched = 0 //If ATC is squelched currently diff --git a/code/modules/busy_space_vr/organizations.dm b/code/modules/busy_space_vr/organizations.dm index 265f3749bc..71768e301d 100644 --- a/code/modules/busy_space_vr/organizations.dm +++ b/code/modules/busy_space_vr/organizations.dm @@ -1640,7 +1640,7 @@ them to rebuild, regrow, and replenish almost any lost asset or resource nearly instantly. It leads to many of the Kitsuhana \ 'members' treating everything with frivolity and lends them a care-free demeanor." history = "Originally a heavy industrial equipment and space mining company. During a forced evacuation of their homeworld, \ - they were they only organization with enough ship capacity to relocate any significant portion of the population, starting with \ + they were the only organization with enough ship capacity to relocate any significant portion of the population, starting with \ their own employees. After the resulting slowship travel to nearby starsystems, most of the population decided to keep the moniker \ of the company name. Over the years, Kitsuhana developed into a post-scarcity anarchy where virtually nothing has consequences and \ Kitsuhana 'members' can live their lives as they see fit, often in isolation." @@ -3078,4 +3078,4 @@ i-- //ex: "Phalanx One-Niner", "Sledgehammer Actual" (CO/VIP), "Kodiak Seven-Four", "Tomahawk Two-Zero" - //probably a more elegant (read: fancier) way to do the second part but fuck it, this works just fine \ No newline at end of file + //probably a more elegant (read: fancier) way to do the second part but fuck it, this works just fine diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm index b6791ccf0d..652544d7e0 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm @@ -133,3 +133,9 @@ Talon pin display_name = "Talon pin" description = "A small enamel pin of the Talon logo." path = /obj/item/clothing/accessory/talon + +//Rat badge + +/datum/gear/accessory/altevian_badge + display_name = "altevian badge" + path = /obj/item/clothing/accessory/altevian_badge \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_eyes_vr.dm b/code/modules/client/preference_setup/loadout/loadout_eyes_vr.dm index 9aae4969ef..e444dcaa85 100644 --- a/code/modules/client/preference_setup/loadout/loadout_eyes_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_eyes_vr.dm @@ -62,6 +62,14 @@ display_name = "Security HUDpatch" path = /obj/item/clothing/glasses/hud/security/eyepatch +/datum/gear/eyes/security/secpatch2 + display_name = "Security HUDpatch MKII" + path = /obj/item/clothing/glasses/hud/security/eyepatch2 + +/datum/gear/eyes/security/tac_sec_visor + display_name = "Tactical AR visor (Security)" + path = /obj/item/clothing/glasses/sunglasses/sechud/tactical_sec_vis + /datum/gear/eyes/medical/medpatch display_name = "Health HUDpatch" path = /obj/item/clothing/glasses/hud/health/eyepatch diff --git a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm index f20a423a43..7dccf2dc13 100644 --- a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm @@ -276,6 +276,18 @@ ckeywhitelist = list("chaleur") character_name = list("Hisako Arato") +/datum/gear/fluff/perrin_robes + path = /obj/item/clothing/under/fluff/gildedrobe_perrin + display_name = "Perrin's Robes" + ckeywhitelist = list("codeme") + character_name = list("Perrin Kade") + +/datum/gear/fluff/perrin_shoes + path = /obj/item/clothing/shoes/fluff/gildedshoes_perrin + display_name = "Perrin's Shoes" + ckeywhitelist = list("codeme") + character_name = list("Perrin Kade") + /datum/gear/fluff/jade_stamp path = /obj/item/weapon/stamp/fluff/jade_horror display_name = "Official Council of Mid Horror rubber stamp" @@ -290,6 +302,12 @@ character_name = list("M41L") // D CKEYS +/datum/gear/fluff/Aku_briefcase + path = /obj/item/weapon/storage/secure/briefcase/dealer + display_name = "Aku's dealer briefcase" + ckeywhitelist = list("defiintelynotarock") + character_name = list("Aku Zoles") + /datum/gear/fluff/dhaeleena_medal path = /obj/item/clothing/accessory/medal/silver/security/fluff/dhael display_name = "Dhaeleena's Medal" @@ -461,6 +479,13 @@ ckeywhitelist = list("jacobdragon") character_name = list("Earthen Breath") +/datum/gear/fluff/jademanique_freyr_mask + path = /obj/item/clothing/mask/fluff/freyr_mask + display_name = "Freyr's Mask" + slot = slot_head + ckeywhitelist = list("jademanique") + character_name = list("Freyr") + /datum/gear/fluff/cirra_box path = /obj/item/weapon/storage/box/fluff/cirra display_name = "Cirra's Box" @@ -765,6 +790,12 @@ ckeywhitelist = list("pandora029") character_name = list("Seona Young") +/datum/gear/fluff/seona_big_plushie + path = /obj/item/toy/plushie/fluff/seona_mofuorb + display_name = "comically oversized fox plushie" + ckeywhitelist = list("pandora029") + character_name = list("Seona Young") + /datum/gear/fluff/lily_medal path = /obj/item/clothing/accessory/medal/silver/unity display_name = "Lily's Unity Medal" @@ -1022,6 +1053,12 @@ ckeywhitelist = list("stiphs") character_name = list("Lilith Vespers") +/datum/gear/fluff/greek_dress + path = /obj/item/clothing/under/fluff/greek_dress + display_name = "mytilenean Dress" + ckeywhitelist = list("sudate") + character_name = list("Shea Corbett") + /datum/gear/fluff/silent_mimemask path = /obj/item/clothing/mask/gas/sexymime display_name = "Silent Stripe's Mime Mask" @@ -1079,6 +1116,13 @@ ckeywhitelist = list("thedavestdave") character_name = list("Roy Tilton") +/datum/gear/fluff/lucky_amour + path = /obj/item/clothing/suit/armor/combat/crusader_costume/lucky + display_name = "Lucky's amour" + ckeywhitelist = list ("thedavestdave") + character_name = list("Lucky") + allowed_roles = list("Chaplain") + /datum/gear/fluff/monty_balaclava path = /obj/item/clothing/mask/balaclava display_name = "Monty's Balaclava" @@ -1315,10 +1359,3 @@ display_name = "Health Service Achievement medal" ckeywhitelist = list("zodiacshadow") character_name = list("Nehi Maximus") - -/datum/gear/fluff/lucky_amour - path = /obj/item/clothing/suit/armor/combat/crusader_costume/lucky - display_name = "Lucky's amour" - ckeywhitelist = list ("thedavestdave") - character_name = list("Lucky") - allowed_roles = "Chaplain" diff --git a/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm b/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm index 75697053aa..70bfe855cd 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm @@ -143,3 +143,11 @@ Talon winter coat hoodies[initial(hoodie.name)] = hoodie gear_tweaks += new/datum/gear_tweak/path(sortAssoc(hoodies)) gear_tweaks += gear_tweak_free_color_choice + +/datum/gear/suit/cyberpunk_recolorable + display_name = "cyberpunk jacket (recolorable)" + path = /obj/item/clothing/suit/cyberpunk/recolorable + cost = 2 //It's got armor, yo. + +/datum/gear/suit/cyberpunk_recolorable/New() + gear_tweaks += gear_tweak_free_color_choice diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm b/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm index 16a0996f95..da716f5f6e 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm @@ -301,4 +301,18 @@ Talon jumpsuit var/list/pants = list() for(var/obj/item/clothing/under/pants/altevian/pants_type as anything in typesof(/obj/item/clothing/under/pants/altevian)) pants[initial(pants_type.name)] = pants_type - gear_tweaks += new/datum/gear_tweak/path(sortAssoc(pants)) \ No newline at end of file + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(pants)) + + +//Feminine Colored Jumpsuits. +/datum/gear/suit/f_jumpsuit_alt + display_name = "Colored Feminine Jumpsuit" + path = /obj/item/clothing/under/color/fjumpsuit + +/datum/gear/uniform/f_jumpsuit_alt/New() + ..() + var/list/jumpsuits = list() + for(var/jumpsuit_style in typesof(/obj/item/clothing/under/color/fjumpsuit)) + var/obj/item/clothing/under/color/fjumpsuit/jumpsuit = jumpsuit_style + jumpsuits[initial(jumpsuit.name)] = jumpsuit + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jumpsuits)) diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno_vr.dm b/code/modules/client/preference_setup/loadout/loadout_xeno_vr.dm index f014232fe3..d2d04029c3 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno_vr.dm @@ -94,6 +94,7 @@ /datum/gear/uniform/altevian_outfit description = "A uniform commonly seen from altevians during their work. The material on this uniform seems to be made of durable thread that can handle the stress of most matters of labor." display_name = "altevian duty jumpsuit selection (Altevian)" + whitelisted = SPECIES_ALTEVIAN sort_category = "Xenowear" /datum/gear/uniform/altevian_outfit/New() @@ -103,6 +104,24 @@ pants[initial(uniform_type.name)] = uniform_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(pants)) +/datum/gear/accessory/altevian_aquila + description = "An emblem commonly seen worn by the altevians for their work operations." + display_name = "royal altevian navy emblem selection" + whitelisted = SPECIES_ALTEVIAN + sort_category = "Xenowear" + +/datum/gear/accessory/altevian_aquila/New() + ..() + var/list/badges = list( + "gold emblem" = /obj/item/clothing/accessory/altevian_badge/aquila, + "silver emblem" = /obj/item/clothing/accessory/altevian_badge/aquila/silver, + "bronze emblem" = /obj/item/clothing/accessory/altevian_badge/aquila/bronze, + "black emblem" = /obj/item/clothing/accessory/altevian_badge/aquila/black, + "blue emblem" = /obj/item/clothing/accessory/altevian_badge/aquila/exotic, + "purple emblem" = /obj/item/clothing/accessory/altevian_badge/aquila/phoron, + "red emblem" = /obj/item/clothing/accessory/altevian_badge/aquila/hydrogen) + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(badges)) + // Taur stuff /datum/gear/suit/taur/drake_cloak display_name = "drake cloak (Drake-taur)" diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm index 3d70326a18..c80766fde4 100644 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ b/code/modules/client/preference_setup/occupation/occupation.dm @@ -19,6 +19,11 @@ S["job_talon_high"] >> pref.job_talon_high //VOREStation Add End S["player_alt_titles"] >> pref.player_alt_titles + //CHOMPStation Add + S["job_other_low"] >> pref.job_other_low + S["job_other_med"] >> pref.job_other_med + S["job_other_high"] >> pref.job_other_high + //CHOMPStation Add End /datum/category_item/player_setup_item/occupation/save_character(var/savefile/S) S["alternate_option"] << pref.alternate_option @@ -37,6 +42,11 @@ S["job_talon_high"] << pref.job_talon_high //VOREStation Add End S["player_alt_titles"] << pref.player_alt_titles + //CHOMPStation Add + S["job_other_low"] << pref.job_other_low + S["job_other_med"] << pref.job_other_med + S["job_other_high"] << pref.job_other_high + //CHOMPStation Add End /datum/category_item/player_setup_item/occupation/sanitize_character() pref.alternate_option = sanitize_integer(pref.alternate_option, 0, 2, initial(pref.alternate_option)) @@ -54,6 +64,11 @@ pref.job_talon_med = sanitize_integer(pref.job_talon_med, 0, 65535, initial(pref.job_talon_med)) pref.job_talon_low = sanitize_integer(pref.job_talon_low, 0, 65535, initial(pref.job_talon_low)) //VOREStation Add End + //CHOMPStation Add + pref.job_other_high = sanitize_integer(pref.job_other_high, 0, 65535, initial(pref.job_other_high)) + pref.job_other_med = sanitize_integer(pref.job_other_med, 0, 65535, initial(pref.job_other_med)) + pref.job_other_low = sanitize_integer(pref.job_other_low, 0, 65535, initial(pref.job_other_low)) + //CHOMPStation Add End if(!(pref.player_alt_titles)) pref.player_alt_titles = new() if(!job_master) @@ -320,6 +335,7 @@ pref.job_medsci_high = 0 pref.job_engsec_high = 0 pref.job_talon_high = 0 //VOREStation Add + pref.job_other_high = 0 //CHOMPStation Add // Level is equal to the desired new level of the job. So for a value of 4, we want to disable the job. /datum/category_item/player_setup_item/occupation/proc/SetJobDepartment(var/datum/job/job, var/level) @@ -377,6 +393,20 @@ if(3) pref.job_talon_low |= job.flag VOREStation Add End*/ + //CHOMPStation Add + if(OTHER) + pref.job_other_low &= ~job.flag + pref.job_other_med &= ~job.flag + pref.job_other_high &= ~job.flag + switch(level) + if(1) + reset_jobhigh() + pref.job_other_high = job.flag + if(2) + pref.job_other_med |= job.flag + if(3) + pref.job_other_low |= job.flag + //CHOMPStation Add End return 1 @@ -399,6 +429,12 @@ pref.job_talon_low = 0 //VOREStation Add End + //CHOMPStation Add + pref.job_other_high = 0 + pref.job_other_med = 0 + pref.job_other_low = 0 + //CHOMPStation Add End + pref.player_alt_titles.Cut() /datum/preferences/proc/GetPlayerAltTitle(datum/job/job) @@ -431,4 +467,14 @@ return job_engsec_med if(3) return job_engsec_low + //CHOMPStation Add + if(OTHER) + switch(level) + if(1) + return job_other_high + if(2) + return job_other_med + if(3) + return job_other_low + //CHOMPStation Add End return 0 diff --git a/code/modules/client/preference_setup/vore/02_size.dm b/code/modules/client/preference_setup/vore/02_size.dm index 3a864d6135..6e5bb0f6ba 100644 --- a/code/modules/client/preference_setup/vore/02_size.dm +++ b/code/modules/client/preference_setup/vore/02_size.dm @@ -14,6 +14,7 @@ var/weight_gain = 100 // Weight gain rate. var/weight_loss = 50 // Weight loss rate. var/fuzzy = 0 // Preference toggle for sharp/fuzzy icon. Default sharp. + var/offset_override = FALSE //CHOMPEdit var/voice_freq = 42500 //CHOMPEdit - Why was the default 0 var/voice_sound = "goon speak 1" //CHOMPEdit - Changed the default voice to one less jarring @@ -28,6 +29,7 @@ S["weight_gain"] >> pref.weight_gain S["weight_loss"] >> pref.weight_loss S["fuzzy"] >> pref.fuzzy + S["offset_override"] >> pref.offset_override //CHOMPEdit S["voice_freq"] >> pref.voice_freq S["voice_sound"] >> pref.voice_sound @@ -37,6 +39,7 @@ S["weight_gain"] << pref.weight_gain S["weight_loss"] << pref.weight_loss S["fuzzy"] << pref.fuzzy + S["offset_override"] << pref.offset_override //CHOMPEdit S["voice_freq"] << pref.voice_freq S["voice_sound"] << pref.voice_sound @@ -46,6 +49,7 @@ pref.weight_gain = sanitize_integer(pref.weight_gain, WEIGHT_CHANGE_MIN, WEIGHT_CHANGE_MAX, initial(pref.weight_gain)) pref.weight_loss = sanitize_integer(pref.weight_loss, WEIGHT_CHANGE_MIN, WEIGHT_CHANGE_MAX, initial(pref.weight_loss)) pref.fuzzy = sanitize_integer(pref.fuzzy, 0, 1, initial(pref.fuzzy)) + pref.offset_override = sanitize_integer(pref.offset_override, 0, 1, initial(pref.offset_override)) //CHOMPEdit if(pref.voice_freq != 0) pref.voice_freq = sanitize_integer(pref.voice_freq, MIN_VOICE_FREQ, MAX_VOICE_FREQ, initial(pref.fuzzy)) if(pref.size_multiplier == null || pref.size_multiplier < RESIZE_TINY || pref.size_multiplier > RESIZE_HUGE) @@ -56,6 +60,7 @@ character.weight_gain = pref.weight_gain character.weight_loss = pref.weight_loss character.fuzzy = pref.fuzzy + character.offset_override = pref.offset_override //CHOMPEdit character.voice_freq = pref.voice_freq character.resize(pref.size_multiplier, animate = FALSE, ignore_prefs = TRUE) if(!pref.voice_sound) @@ -95,6 +100,7 @@ . += "
" . += "Scale: [round(pref.size_multiplier*100)]%
" . += "Scaled Appearance: [pref.fuzzy ? "Fuzzy" : "Sharp"]
" + . += "Scaling Center: [pref.offset_override ? "Odd" : "Even"]
" //CHOMPEdit . += "Voice Frequency: [pref.voice_freq]
" . += "Voice Sounds: [pref.voice_sound]
" // . += "Test Voice:
" Maybe later @@ -118,6 +124,10 @@ pref.fuzzy = pref.fuzzy ? 0 : 1; return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["toggle_offset_override"]) //CHOMPEdit + pref.offset_override = pref.offset_override ? 0 : 1; + return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["weight"]) var/new_weight = tgui_input_number(user, "Choose your character's relative body weight.\n\ This measurement should be set relative to a normal 5'10'' person's body and not the actual size of your character.\n\ diff --git a/code/modules/client/preferences_ch.dm b/code/modules/client/preferences_ch.dm deleted file mode 100644 index ac31bd2daa..0000000000 --- a/code/modules/client/preferences_ch.dm +++ /dev/null @@ -1,2 +0,0 @@ -/datum/preferences - var/digitigrade = 0 // 0 = no digi, 1 = default, 2+ = digi styles... (Not used yet) \ No newline at end of file diff --git a/code/modules/client/preferences_spawnpoints.dm b/code/modules/client/preferences_spawnpoints.dm index 6078808c30..14fb517b1e 100644 --- a/code/modules/client/preferences_spawnpoints.dm +++ b/code/modules/client/preferences_spawnpoints.dm @@ -13,6 +13,7 @@ var/list/spawntypes = list() var/list/restrict_job = null var/list/disallow_job = null var/announce_channel = "Common" + var/allow_offmap_spawn = FALSE //CHOMPEdit - add option to allow offmap spawns to a spawnpoint without entirely restricting that spawnpoint var/allowed_mob_types = JOB_SILICON|JOB_CARBON /datum/spawnpoint/proc/check_job_spawning(job) @@ -26,7 +27,7 @@ var/list/spawntypes = list() if(!J) // Couldn't find, admin shenanigans? Allow it return 1 - if(J.offmap_spawn && !(job in restrict_job)) + if(J.offmap_spawn && !allow_offmap_spawn && !(job in restrict_job)) //CHOMPEdit - add option to allow offmap spawns to a spawnpoint without entirely restricting that spawnpoint return 0 if(!(J.mob_type & allowed_mob_types)) @@ -40,6 +41,7 @@ var/list/spawntypes = list() /datum/spawnpoint/arrivals display_name = "Arrivals Shuttle" msg = "will arrive to the station shortly by shuttle" + disallow_job = list(JOB_OUTSIDER) //CHOMPEdit add /datum/spawnpoint/arrivals/New() ..() @@ -65,6 +67,7 @@ var/list/spawntypes = list() display_name = "Cryogenic Storage" msg = "has completed cryogenic revival" allowed_mob_types = JOB_CARBON + disallow_job = list(JOB_OUTSIDER) //CHOMPEdit add /datum/spawnpoint/cryo/New() ..() @@ -74,6 +77,7 @@ var/list/spawntypes = list() display_name = "Cyborg Storage" msg = "has been activated from storage" allowed_mob_types = JOB_SILICON + disallow_job = list(JOB_OUTSIDER) //CHOMPEdit add /datum/spawnpoint/cyborg/New() ..() @@ -100,7 +104,8 @@ var/global/list/latejoin_tram = list() /datum/spawnpoint/tram display_name = "Tram Station" msg = "will arrive to the station shortly by shuttle" + disallow_job = list(JOB_OUTSIDER) //CHOMPEdit add /datum/spawnpoint/tram/New() ..() - turfs = latejoin_tram \ No newline at end of file + turfs = latejoin_tram diff --git a/code/modules/client/verbs/character_directory.dm b/code/modules/client/verbs/character_directory.dm index 683c332d3a..e737360234 100644 --- a/code/modules/client/verbs/character_directory.dm +++ b/code/modules/client/verbs/character_directory.dm @@ -57,17 +57,19 @@ GLOBAL_DATUM(character_directory, /datum/character_directory) var/eventtag = vantag_choices_list[C.prefs.vantag_preference] //CHOMPEdit var/character_ad = C.prefs.directory_ad + //CHOMPEdit Start if(ishuman(C.mob)) var/mob/living/carbon/human/H = C.mob - var/strangername = H.real_name //CHOMPEdit + var/strangername = H.real_name if(data_core && data_core.general) if(!find_general_record("name", H.real_name)) if(!find_record("name", H.real_name, data_core.hidden_general)) - strangername = "unknown" //CHOMPEdit - name = strangername //CHOMPEdit + strangername = "unknown" + name = strangername species = "[H.custom_species ? H.custom_species : H.species.name]" ooc_notes = H.ooc_notes - flavor_text = H.flavor_texts["general"] + if(LAZYLEN(H.flavor_texts)) + flavor_text = H.flavor_texts["general"] if(isAI(C.mob)) var/mob/living/silicon/ai/A = C.mob @@ -85,6 +87,22 @@ GLOBAL_DATUM(character_directory, /datum/character_directory) ooc_notes = R.ooc_notes flavor_text = R.flavor_text + if(istype(C.mob, /mob/living/silicon/pai)) + var/mob/living/silicon/pai/P = C.mob + name = P.name + species = "pAI" + ooc_notes = P.ooc_notes + if(P.print_flavor_text()) + flavor_text = "\n[P.print_flavor_text()]\n" + + if(istype(C.mob, /mob/living/simple_mob)) + var/mob/living/simple_mob/S = C.mob + name = S.name + species = "simplemob" + ooc_notes = S.ooc_notes + flavor_text = S.desc + //CHOMPEdit End + // It's okay if we fail to find OOC notes and flavor text // But if we can't find the name, they must be using a non-compatible mob type currently. if(!name) diff --git a/code/modules/clothing/glasses/glasses_vr.dm b/code/modules/clothing/glasses/glasses_vr.dm index 63be852414..880547db4b 100644 --- a/code/modules/clothing/glasses/glasses_vr.dm +++ b/code/modules/clothing/glasses/glasses_vr.dm @@ -72,6 +72,45 @@ off_state = "eyepatch" enables_planes = list(VIS_CH_STATUS,VIS_CH_HEALTH,VIS_FULLBRIGHT,VIS_MESONS) +/obj/item/clothing/glasses/sunglasses/sechud/tactical_sec_vis + name = "tactical AR visor" + desc = "Special AR visor designed for security teams, protects your eyes and provides useful data. The red lights provide extra style and intimidation." + icon_state = "tacsecvis1" + icon = 'icons/inventory/eyes/item_vr.dmi' + icon_override = 'icons/inventory/eyes/mob_vr.dmi' + enables_planes = list(VIS_CH_ID,VIS_CH_WANTED,VIS_CH_IMPTRACK,VIS_CH_IMPLOYAL,VIS_CH_IMPCHEM) + flash_protection = FLASH_PROTECTION_MODERATE + item_flags = AIRTIGHT + body_parts_covered = EYES + action_button_name = "Change scanning pattern" + action_button_is_hands_free = TRUE + var/static/list/tac_sec_vis_anim = list() + +/obj/item/clothing/glasses/sunglasses/sechud/tactical_sec_vis/Initialize(mapload) + . = ..() + tac_sec_vis_anim = list( + "Scanning pattern 1" = image(icon = src.icon, icon_state = "tacsecvis1"), + "Scanning pattern 2" = image(icon = src.icon, icon_state = "tacsecvis2"), + "Scanning pattern 3" = image(icon = src.icon, icon_state = "tacsecvis3"), + "Scanning pattern 4" = image(icon = src.icon, icon_state = "tacsecvis4"), + ) + +/obj/item/clothing/glasses/sunglasses/sechud/tactical_sec_vis/attack_self(mob/user) + . = ..() + if(!istype(user) || user.incapacitated()) + return + + var/static/list/options = list("Scanning pattern 1" = "tacsecvis1", "Scanning pattern 2" = "tacsecvis2", "Scanning pattern 3" = "tacsecvis3","Scanning pattern 4" ="tacsecvis4") + + var/choice = show_radial_menu(user, src, tac_sec_vis_anim, custom_check = FALSE, radius = 36, require_near = TRUE) + + if(src && choice && !user.incapacitated() && in_range(user,src)) + icon_state = options[choice] + user.update_inv_glasses() + user.update_action_buttons() + to_chat(user, "Your [src] now displays [choice] .") + return 1 + /*---Tajaran-specific Eyewear---*/ /obj/item/clothing/glasses/tajblind diff --git a/code/modules/clothing/glasses/hud_vr.dm b/code/modules/clothing/glasses/hud_vr.dm index 272d0863c8..12f409204e 100644 --- a/code/modules/clothing/glasses/hud_vr.dm +++ b/code/modules/clothing/glasses/hud_vr.dm @@ -258,6 +258,31 @@ icon_state = initial(icon_state) update_clothing_icon() +/obj/item/clothing/glasses/hud/security/eyepatch2 + name = "Security Hudpatch MKII" + desc = "An eyepatch with built in scanners, that analyzes those in view and provides accurate data about their ID status and security records. This updated model offers better ergonomics and updated sensors." + icon = 'icons/inventory/eyes/item_vr.dmi' + icon_override = 'icons/inventory/eyes/mob_vr.dmi' + icon_state = "sec_eyepatch" + item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold") + body_parts_covered = 0 + enables_planes = list(VIS_CH_ID,VIS_CH_WANTED,VIS_CH_IMPTRACK,VIS_CH_IMPLOYAL,VIS_CH_IMPCHEM) + var/eye = null + +/obj/item/clothing/glasses/hud/security/eyepatch2/verb/switcheye() + set name = "Switch Eyepatch" + set category = "Object" + set src in usr + if(!istype(usr, /mob/living)) return + if(usr.stat) return + + eye = !eye + if(eye) + icon_state = "[icon_state]_1" + else + icon_state = initial(icon_state) + update_clothing_icon() + /obj/item/clothing/glasses/hud/health/eyepatch name = "Medical Hudpatch" diff --git a/code/modules/clothing/head/hood_vr.dm b/code/modules/clothing/head/hood_vr.dm index 5483c461af..cc911db7c8 100644 --- a/code/modules/clothing/head/hood_vr.dm +++ b/code/modules/clothing/head/hood_vr.dm @@ -33,4 +33,23 @@ name = "Talon winter hood" desc = "A cozy winter hood attached to a heavy winter jacket." icon_override = 'icons/inventory/head/mob_vr.dmi' - icon_state = "winterhood_talon" \ No newline at end of file + icon_state = "winterhood_talon" + +//Food costumes +// Hotdog suit hood +/obj/item/clothing/head/hood_vr/hotdog_hood + name = "Hotdog suit hood" + desc = "The hood of a hotdog suit, attached to said hotdog suit." //Honestly i just don't know how to force the costume to hide hats. + icon = 'icons/inventory/head/mob_vr.dmi' + icon_override = 'icons/inventory/head/mob_vr.dmi' + icon_state = "hotdog_hood" + flags_inv = HIDEEARS|BLOCKHAIR + +// Turnip suit hood +/obj/item/clothing/head/hood_vr/turnip_hood + name = "Turnip suit hood" + desc = "The hood of a hotdog suit, attached to said hotdog suit. Most cooks cut this part off and throw it in the garbage" + icon = 'icons/inventory/head/mob_vr.dmi' + icon_override = 'icons/inventory/head/mob_vr.dmi' + icon_state = "turnip_hood" + flags_inv = HIDEEARS|BLOCKHAIR \ No newline at end of file diff --git a/code/modules/clothing/head/misc_special_vr.dm b/code/modules/clothing/head/misc_special_vr.dm new file mode 100644 index 0000000000..1d1a8cb91d --- /dev/null +++ b/code/modules/clothing/head/misc_special_vr.dm @@ -0,0 +1,4 @@ +/obj/item/clothing/head/cone + sprite_sheets = list( + SPECIES_TESHARI = 'icons/inventory/head/mob_vr_teshari.dmi' + ) \ No newline at end of file diff --git a/code/modules/clothing/head/misc_vr.dm b/code/modules/clothing/head/misc_vr.dm index a243216c4d..d71f4698a6 100644 --- a/code/modules/clothing/head/misc_vr.dm +++ b/code/modules/clothing/head/misc_vr.dm @@ -129,3 +129,8 @@ icon_override = 'icons/inventory/head/mob_vr.dmi' icon_state = "beret_talon_officer" item_state = "baret_talon_command" + +/obj/item/clothing/head/cowboy + sprite_sheets = list( + SPECIES_TESHARI = 'icons/inventory/head/mob_vr_teshari.dmi' + ) diff --git a/code/modules/clothing/masks/gasmask_vr.dm b/code/modules/clothing/masks/gasmask_vr.dm index cdc7d52e0c..a569b615bf 100644 --- a/code/modules/clothing/masks/gasmask_vr.dm +++ b/code/modules/clothing/masks/gasmask_vr.dm @@ -17,4 +17,9 @@ icon = 'icons/inventory/face/item_vr.dmi' icon_override = 'icons/inventory/face/mob_vr.dmi' body_parts_covered = FACE|EYES - flags_inv = HIDEEARS|HIDEEYES|HIDEFACE \ No newline at end of file + flags_inv = HIDEEARS|HIDEEYES|HIDEFACE + +/obj/item/clothing/mask/gas/plaguedoctor + sprite_sheets = list( + SPECIES_TESHARI = 'icons/inventory/face/mob_vr_teshari.dmi' + ) \ No newline at end of file diff --git a/code/modules/clothing/masks/miscellaneous_vr.dm b/code/modules/clothing/masks/miscellaneous_vr.dm new file mode 100644 index 0000000000..7792ecc8e3 --- /dev/null +++ b/code/modules/clothing/masks/miscellaneous_vr.dm @@ -0,0 +1,4 @@ +/obj/item/clothing/mask/emotions + sprite_sheets = list( + SPECIES_TESHARI = 'icons/inventory/face/mob_vr_teshari.dmi' + ) \ No newline at end of file diff --git a/code/modules/clothing/suits/hooded_vr.dm b/code/modules/clothing/suits/hooded_vr.dm index 4b79a4e3c0..d6f1465f45 100644 --- a/code/modules/clothing/suits/hooded_vr.dm +++ b/code/modules/clothing/suits/hooded_vr.dm @@ -79,6 +79,31 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) hoodtype = /obj/item/clothing/head/hood/winter/talon +// Food costumes +/obj/item/clothing/suit/storage/hooded/foodcostume //Separate type of costume that does not cover arms and legs. Similar to a cheap mascot costume. + body_parts_covered = UPPER_TORSO|LOWER_TORSO + flags_inv = HIDETIE|HIDEHOLSTER + cold_protection = UPPER_TORSO|LOWER_TORSO + action_button_name = "Toggle Hood" + +/obj/item/clothing/suit/storage/hooded/foodcostume/hotdog //Belly filler uniform :^). + name = "hotdog costume" + desc = "A giant hotdog costume, comes with authentic artificial hotdog scent." + icon = 'icons/inventory/suit/item_vr.dmi' + icon_override = 'icons/inventory/suit/mob_vr.dmi' + icon_state = "hotdog" + item_state_slots = list(slot_r_hand_str = "hotdog", slot_l_hand_str = "hotdog") + hoodtype = /obj/item/clothing/head/hood_vr/hotdog_hood + +/obj/item/clothing/suit/storage/hooded/foodcostume/turnip //Honey wake up, new vorny jail uniform just dropped. + name = "turnip costume" + desc = "A giant turnip costume, extra padding helps the wearer stand in the same spot for hours." + icon = 'icons/inventory/suit/item_vr.dmi' + icon_override = 'icons/inventory/suit/mob_vr.dmi' + icon_state = "turnip" + item_state_slots = list(slot_r_hand_str = "turnip", slot_l_hand_str = "turnip") + hoodtype = /obj/item/clothing/head/hood_vr/turnip_hood + //Functional hoodie /obj/item/clothing/suit/storage/hooded/hoodie diff --git a/code/modules/clothing/suits/miscellaneous_vr.dm b/code/modules/clothing/suits/miscellaneous_vr.dm index 9a10952789..67c255b1ee 100644 --- a/code/modules/clothing/suits/miscellaneous_vr.dm +++ b/code/modules/clothing/suits/miscellaneous_vr.dm @@ -140,3 +140,10 @@ default_worn_icon = 'icons/inventory/suit/mob_vr.dmi' icon_state = "cyberpunk" armor = list("melee" = 10, "bullet" = 20, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0) + +// Cyberpunk recolorable vest +/obj/item/clothing/suit/cyberpunk/recolorable + name = "cyberpunk vest" + desc = "A high tech looking vest. It's made out of tough materials, and can protect fairly well against bullets. Wake the fuck up, Samurai." + + icon_state = "cyberpunk_recolor" \ No newline at end of file diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 054f9dd110..24e0cdddbf 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -28,6 +28,9 @@ /obj/item/clothing/head/wizard/fake/realistic/colorable desc = "A cool-looking 'magic' hat." icon_state = "wizard-white" + sprite_sheets = list( + SPECIES_TESHARI = 'icons/inventory/head/mob_vr_teshari.dmi' + ) /obj/item/clothing/head/wizard/marisa name = "Witch Hat" diff --git a/code/modules/clothing/under/accessories/altevian_vr.dm b/code/modules/clothing/under/accessories/altevian_vr.dm index ec3322d185..b75757b94a 100644 --- a/code/modules/clothing/under/accessories/altevian_vr.dm +++ b/code/modules/clothing/under/accessories/altevian_vr.dm @@ -75,4 +75,35 @@ name = "Purple Comfortable Scarf" icon_state = "altevian-scarf-purple" item_state = "altevian-scarf-purple" - overlay_state = "altevian-scarf-purple" \ No newline at end of file + overlay_state = "altevian-scarf-purple" + + + +/obj/item/clothing/accessory/altevian_badge + name = "Altevian Civilian Badge" + desc = "An emblem commonly seen worn by the altevians off-work or by visitors of their ships." + icon_state = "altevian_badge" + slot = ACCESSORY_SLOT_MEDAL + +/obj/item/clothing/accessory/altevian_badge/aquila + name = "Royal Altevian Navy Emblem" + desc = "An emblem commonly seen worn by the altevians for their work operations." + icon_state = "altevian_aquila" + +/obj/item/clothing/accessory/altevian_badge/aquila/silver + icon_state = "altevian_aquila_silver" + +/obj/item/clothing/accessory/altevian_badge/aquila/bronze + icon_state = "altevian_aquila_bronze" + +/obj/item/clothing/accessory/altevian_badge/aquila/black + icon_state = "altevian_aquila_black" + +/obj/item/clothing/accessory/altevian_badge/aquila/exotic + icon_state = "altevian_aquila_exotic" + +/obj/item/clothing/accessory/altevian_badge/aquila/phoron + icon_state = "altevian_aquila_phoron" + +/obj/item/clothing/accessory/altevian_badge/aquila/hydrogen + icon_state = "altevian_aquila_hydrogen" \ No newline at end of file diff --git a/code/modules/clothing/under/accessories/armor.dm b/code/modules/clothing/under/accessories/armor.dm index 96d6448fd2..c919899da9 100644 --- a/code/modules/clothing/under/accessories/armor.dm +++ b/code/modules/clothing/under/accessories/armor.dm @@ -213,7 +213,7 @@ desc = "A pair of green arm pads reinforced with armor plating. Attaches to a plate carrier." icon_state = "armguards_green" armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35) - + /obj/item/clothing/accessory/armor/armguards/merc name = "heavy arm guards" desc = "A pair of red-trimmed black arm pads reinforced with heavy armor plating. Attaches to a plate carrier." @@ -435,4 +435,4 @@ /obj/item/clothing/accessory/armor/helmcover/saare name = "\improper SAARE helmet cover" desc = "A fabric cover for armored helmets. This one has SAARE's colors." - icon_state = "helmcover_saare" \ No newline at end of file + icon_state = "helmcover_saare" diff --git a/code/modules/clothing/under/accessories/holster_vr.dm b/code/modules/clothing/under/accessories/holster_vr.dm index db610037d6..5032134302 100644 --- a/code/modules/clothing/under/accessories/holster_vr.dm +++ b/code/modules/clothing/under/accessories/holster_vr.dm @@ -3,6 +3,17 @@ desc = "A specialized holster, made specifically for Kinetic Accelerators." can_hold = list(/obj/item/weapon/gun/energy/kinetic_accelerator) +/obj/item/clothing/accessory/holster/waist/lanyard + name = "baton lanyard" + desc = "A sturdy tether with quick-release carabiner that can keep several patterns of standard-issue security baton ready for quick usage." + icon_state = "holster_lanyard" + overlay_state = "holster_lanyard" + can_hold = list( + /obj/item/weapon/melee/baton, + /obj/item/weapon/melee/classic_baton, + /obj/item/weapon/melee/telebaton + ) + /obj/item/clothing/accessory/holster/machete/rapier name = "rapier sheath" desc = "A beautiful red sheath, probably for a beautiful blade." diff --git a/code/modules/clothing/under/miscellaneous_vr.dm b/code/modules/clothing/under/miscellaneous_vr.dm index ef719641c9..e66947796b 100644 --- a/code/modules/clothing/under/miscellaneous_vr.dm +++ b/code/modules/clothing/under/miscellaneous_vr.dm @@ -127,9 +127,12 @@ var/emagged = FALSE var/target_size = 1 -/obj/item/clothing/gloves/bluespace/mob_can_equip(mob/M, gloves, disable_warning = 0) - . = ..() - if(. && ishuman(M) && !disable_warning) +/obj/item/proc/equip_special() + return + +/obj/item/clothing/gloves/bluespace/equip_special() + var/mob/M = src.loc + if(ishuman(M)) var/mob/living/carbon/human/H = M if(!H.resizable) return @@ -376,4 +379,83 @@ name = "Central Command undersuit" desc = "A very descript undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for NanoTrasen Central Command officers, and comes with a swanky gold trim and other fancy markings." icon_state = "bodysuit_cent" - item_state = "bodysuit_cent" \ No newline at end of file + item_state = "bodysuit_cent" + + +//FEMININE JUMPSUITS. +/obj/item/clothing/under/color/fjumpsuit //They won't see this so we can make it whatever we want. + name = "blue feminine jumpsuit" + desc = "It's very smart and in a ladies size!" + icon = 'icons/inventory/uniform/item.dmi' + default_worn_icon = 'icons/inventory/uniform/mob_vr.dmi' + icon_state = "blue" // In hand + worn_state = "bluef" // On mob + +/obj/item/clothing/under/color/fjumpsuit/bluef + name = "blue feminine jumpsuit" + icon_state = "blue" + worn_state = "bluef" +/obj/item/clothing/under/color/fjumpsuit/aquaf + name = "aqua feminine jumpsuit" + icon_state = "aqua" + worn_state = "aquaf" +/obj/item/clothing/under/color/fjumpsuit/brownf + name = "brown feminine jumpsuit" + icon_state = "brown" + worn_state = "brownf" +/obj/item/clothing/under/color/fjumpsuit/darkbluef + name = "dark blue feminine jumpsuit" + icon_state = "darkblue" + worn_state = "darkbluef" +/obj/item/clothing/under/color/fjumpsuit/darkredf + name = "dark red feminine jumpsuit" + icon_state = "darkred" + worn_state = "darkredf" +/obj/item/clothing/under/color/fjumpsuit/greenf + name = "green feminine jumpsuit" + icon_state = "green" + worn_state = "greenf" +/obj/item/clothing/under/color/fjumpsuit/lightbluef + name = "light blue feminine jumpsuit" + icon_state = "lightblue" + worn_state = "lightbluef" +/obj/item/clothing/under/color/fjumpsuit/lightbrownf + name = "light brown feminine jumpsuit" + icon_state = "lightbrown" + worn_state = "lightbrownf" +/obj/item/clothing/under/color/fjumpsuit/lightgreenf + name = "light green feminine jumpsuit" + icon_state = "lightgreen" + worn_state = "lightgreenf" +/obj/item/clothing/under/color/fjumpsuit/lightpurplef + name = "light purple feminine jumpsuit" + icon_state = "lightpurple" + worn_state = "lightpurplef" +/obj/item/clothing/under/color/fjumpsuit/lightredf + name = "light red feminine jumpsuit" + icon_state = "lightred" + worn_state = "lightredf" +/obj/item/clothing/under/color/fjumpsuit/maroonf + name = "maroon feminine jumpsuit" + icon_state = "maroon" + worn_state = "maroonf" +/obj/item/clothing/under/color/fjumpsuit/pinkf + name = "pink feminine jumpsuit" + icon_state = "pink" + worn_state = "pinkf" +/obj/item/clothing/under/color/fjumpsuit/purplef + name = "purple feminine jumpsuit" + icon_state = "purple" + worn_state = "purplef" +/obj/item/clothing/under/color/fjumpsuit/redf + name = "red feminine jumpsuit" + icon_state = "red" + worn_state = "redf" +/obj/item/clothing/under/color/fjumpsuit/yellowf + name = "yellow feminine jumpsuit" + icon_state = "yellow" + worn_state = "yellowf" +/obj/item/clothing/under/color/fjumpsuit/yellowgreenf + name = "yellow-green feminine jumpsuit" + icon_state = "yellowgreen" + worn_state = "yellowgreenf" diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm index 97a6ed2aa6..101df4b4dc 100644 --- a/code/modules/economy/vending_machines.dm +++ b/code/modules/economy/vending_machines.dm @@ -1237,6 +1237,8 @@ /obj/item/clothing/mask/bandana/red = 5, /obj/item/clothing/suit/storage/hooded/wintercoat/security = 5, /obj/item/clothing/accessory/armband = 5, + /obj/item/clothing/glasses/sunglasses/sechud/tactical_sec_vis = 5, //VoreStation edit - cool visor!!! + /obj/item/clothing/glasses/hud/security/eyepatch2 = 5, //VoreStation edit - cool eyepatch! /obj/item/clothing/accessory/holster/armpit = 2, //VOREStation edit - gives some variety of available holsters for those who forgot to bring their own /obj/item/clothing/accessory/holster/waist = 2, //VOREStation edit - But also reduces the number per type, so there's 8 overall rather than like, 20 /obj/item/clothing/accessory/holster/hip = 2, //VOREStation edit diff --git a/code/modules/economy/vending_machines_vr.dm b/code/modules/economy/vending_machines_vr.dm index 1f7871a85d..9492802e86 100644 --- a/code/modules/economy/vending_machines_vr.dm +++ b/code/modules/economy/vending_machines_vr.dm @@ -1524,7 +1524,9 @@ /obj/item/clothing/gloves/combat/knight_costume = 3, /obj/item/clothing/gloves/combat/knight_costume/brown = 3, /obj/item/clothing/shoes/knight_costume = 3, - /obj/item/clothing/shoes/knight_costume/black = 3) + /obj/item/clothing/shoes/knight_costume/black = 3, + /obj/item/clothing/suit/storage/hooded/foodcostume/hotdog = 3, + /obj/item/clothing/suit/storage/hooded/foodcostume/turnip = 3) prices = list(/obj/item/clothing/suit/storage/hooded/costume/carp = 200, /obj/item/clothing/suit/storage/hooded/costume/carp = 200, /obj/item/clothing/suit/chickensuit = 200, @@ -1589,7 +1591,9 @@ /obj/item/clothing/gloves/combat/knight_costume = 200, /obj/item/clothing/gloves/combat/knight_costume/brown = 200, /obj/item/clothing/shoes/knight_costume = 200, - /obj/item/clothing/shoes/knight_costume/black = 200) + /obj/item/clothing/shoes/knight_costume/black = 200, + /obj/item/clothing/suit/storage/hooded/foodcostume/hotdog = 200, + /obj/item/clothing/suit/storage/hooded/foodcostume/turnip = 200) premium = list(/obj/item/clothing/suit/imperium_monk = 3, /obj/item/clothing/suit/barding/agatha = 2, /obj/item/clothing/suit/barding/alt_agatha = 2, diff --git a/code/modules/emotes/definitions/audible.dm b/code/modules/emotes/definitions/audible.dm index d702a32d3a..ac4c767721 100644 --- a/code/modules/emotes/definitions/audible.dm +++ b/code/modules/emotes/definitions/audible.dm @@ -140,7 +140,7 @@ /decl/emote/audible/bug_buzz key = "bbuzz" - emote_message_3p = "buzzes its wings." + emote_message_3p = "buzzes USER_THEIR wings." emote_sound = 'sound/voice/BugBuzz.ogg' /decl/emote/audible/bug_chitter @@ -238,10 +238,16 @@ emote_message_3p_target = "trills at TARGET." emote_sound = 'sound/voice/teshtrill.ogg' // Copyright CC BY-NC 3.0 Arnaud Coutancier (freesound.org) for the source audio. +/decl/emote/audible/teshscream + key = "teshscream" + emote_message_1p = "You scream!" + emote_message_3p = "screams!" + emote_sound = 'sound/voice/teshscream.ogg' + /decl/emote/audible/prbt key = "prbt" emote_message_1p = "You prbt." emote_message_3p = "prbts." emote_message_1p_target = "You prbt at TARGET." emote_message_3p_target = "prbts at TARGET." - emote_sound = 'sound/voice/prbt.ogg' \ No newline at end of file + emote_sound = 'sound/voice/prbt.ogg' diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm index 226e4d9630..7e5ad1caf0 100644 --- a/code/modules/emotes/emote_mob.dm +++ b/code/modules/emotes/emote_mob.dm @@ -4,7 +4,7 @@ var/last_emote_summary /mob/proc/get_available_emotes() - return global._default_mob_emotes + return global._default_mob_emotes.Copy() /mob/proc/can_emote(var/emote_type) return (stat == CONSCIOUS) @@ -128,6 +128,7 @@ if(findtext(subtext, "*")) // abort abort! to_chat(emoter, SPAN_WARNING("You may use only one \"["*"]\" symbol in your emote.")) + to_chat(emoter, SPAN_WARNING(message)) return if(pretext) diff --git a/code/modules/events/grid_check.dm b/code/modules/events/grid_check.dm index 2e0cc98717..3967e4de9e 100644 --- a/code/modules/events/grid_check.dm +++ b/code/modules/events/grid_check.dm @@ -1,23 +1,10 @@ -/datum/event/grid_check //NOTE: Times are measured in master controller ticks! - announceWhen = 5 -/* -/datum/event/grid_check/setup() - endWhen = rand(30,120) -*/ +/datum/event/grid_check + /datum/event/grid_check/start() // This sets off a chain of events that lead to the actual grid check (or perhaps worse). // First, the Supermatter engine makes a power spike. for(var/obj/machinery/power/generator/engine in machines) - engine.power_spike() + engine.power_spike(80) break // Just one engine, please. // After that, the engine checks if a grid checker exists on the same powernet, and if so, it triggers a blackout. - // If not, lots of stuff breaks. See code/modules/power/generator.dm for that piece of code. -// power_failure(0) -/* -/datum/event/grid_check/announce() - if (prob(30)) - command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg') - -/datum/event/grid_check/end() - power_restore() -*/ \ No newline at end of file + // If not, lots of stuff breaks. See code/modules/power/generator.dm for that piece of code. \ No newline at end of file diff --git a/code/modules/examine/descriptions/armor.dm b/code/modules/examine/descriptions/armor.dm index 39c5ccde92..9d987b635b 100644 --- a/code/modules/examine/descriptions/armor.dm +++ b/code/modules/examine/descriptions/armor.dm @@ -2,9 +2,9 @@ if(armor[armor_type]) switch(armor[armor_type]) if(1 to 20) - return "It barely protects against [descriptive_attack_type]." + return "It provides negligibly small defense against [descriptive_attack_type]." if(21 to 30) - return "It provides a very small defense against [descriptive_attack_type]." + return "It provides very small defense against [descriptive_attack_type]." if(31 to 40) return "It offers a small amount of protection against [descriptive_attack_type]." if(41 to 50) @@ -14,7 +14,7 @@ if(61 to 70) return "It is very strong against [descriptive_attack_type]." if(71 to 80) - return "This gives a very robust defense against [descriptive_attack_type]." + return "This gives extremely strong defense against [descriptive_attack_type]." if(81 to 99) return "Wearing this would make you nigh-invulerable against [descriptive_attack_type]." if(100) @@ -80,4 +80,4 @@ if(slots.len) armor_stats += "It can be worn on your [english_list(slots)]. \n" - return armor_stats \ No newline at end of file + return armor_stats diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index ad34247ece..09cddf7347 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -1890,7 +1890,6 @@ . = ..() reagents.add_reagent("protein", 3) - /obj/item/weapon/reagent_containers/food/snacks/rofflewaffles name = "Roffle Waffles" desc = "Waffles from Roffle. Co." @@ -2147,6 +2146,15 @@ . = ..() reagents.add_reagent("protein", 3) +/obj/item/weapon/reagent_containers/food/snacks/clubsandwich + name = "Club Sandwich" + desc = "Tastes like the good feelings when you're part of a clique." + icon_state = "clubsandwich" + trash = "obj/item/trash/plate" + nutriment_amt = 3 + nutriment_desc = list("a galactic economy coming together in pursuit of mundane foods" = 3) + bitesize = 2 + /obj/item/weapon/reagent_containers/food/snacks/toastedsandwich name = "Toasted Sandwich" desc = "Now if you only had a pepper bar." diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 1f470c81bb..7993260ee0 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -236,6 +236,17 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/peanutbutter +/datum/recipe/clubsandwich + reagents = list("mayo" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/slice/bread, + /obj/item/weapon/reagent_containers/food/snacks/slice/bread, + /obj/item/weapon/reagent_containers/food/snacks/meat/chicken, + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + fruit = list("tomato" = 1, "lettuce" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/clubsandwich /datum/recipe/tomatosoup fruit = list("tomato" = 2) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 5e28b64c66..027cfe6aa2 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -830,12 +830,10 @@ product = new has_item_product(get_turf(user)) else product = new /obj/item/weapon/reagent_containers/food/snacks/grown(get_turf(user),name) - if(get_trait(TRAIT_PRODUCT_COLOUR)) - if(!istype(product, /mob)) - //product.color = get_trait(TRAIT_PRODUCT_COLOUR) //Already applied correctly on overlays in icon_update, no need to double color over all overlays - if(istype(product,/obj/item/weapon/reagent_containers/food)) - var/obj/item/weapon/reagent_containers/food/food = product - food.filling_color = get_trait(TRAIT_PRODUCT_COLOUR) + if (get_trait(TRAIT_PRODUCT_COLOUR)) + if (istype(product,/obj/item/weapon/reagent_containers/food)) + var/obj/item/weapon/reagent_containers/food/food = product + food.filling_color = get_trait(TRAIT_PRODUCT_COLOUR) if(mysterious) product.name += "?" diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm index 4a08f897da..1574365617 100644 --- a/code/modules/hydroponics/seed_packets.dm +++ b/code/modules/hydroponics/seed_packets.dm @@ -118,6 +118,9 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds) /obj/item/seeds/glowberryseed seed_type = "glowberries" +/obj/item/seeds/peppercornseed + seed_type = "peppercorns" + /obj/item/seeds/bananaseed seed_type = "banana" diff --git a/code/modules/hydroponics/seed_storage_vr.dm b/code/modules/hydroponics/seed_storage_vr.dm index cf7a856d85..44f9d8cc8d 100644 --- a/code/modules/hydroponics/seed_storage_vr.dm +++ b/code/modules/hydroponics/seed_storage_vr.dm @@ -25,6 +25,7 @@ /obj/item/seeds/orangeseed = 3, /obj/item/seeds/onionseed = 3, /obj/item/seeds/peanutseed = 3, + /obj/item/seeds/peppercornseed = 2, /obj/item/seeds/plumpmycelium = 3, /obj/item/seeds/poppyseed = 3, /obj/item/seeds/potatoseed = 3, @@ -83,6 +84,7 @@ /obj/item/seeds/nettleseed = 2, /obj/item/seeds/orangeseed = 3, /obj/item/seeds/peanutseed = 3, + /obj/item/seeds/peppercornseed = 2, /obj/item/seeds/plastiseed = 3, /obj/item/seeds/plumpmycelium = 3, /obj/item/seeds/poppyseed = 3, diff --git a/code/modules/hydroponics/seedtypes/berries.dm b/code/modules/hydroponics/seedtypes/berries.dm index 2ad36353fe..3654a62cb3 100644 --- a/code/modules/hydroponics/seedtypes/berries.dm +++ b/code/modules/hydroponics/seedtypes/berries.dm @@ -67,4 +67,16 @@ set_trait(TRAIT_YIELD,3) set_trait(TRAIT_POTENCY,50) set_trait(TRAIT_PRODUCT_COLOUR,"#7A5454") - set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.35) \ No newline at end of file + set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.35) + +/datum/seed/berry/peppercorn + name = "peppercorns" + seed_name = "peppercorn berry" + kitchen_tag = "peppercorns" + display_name = "peppercorn bush" + chems = list("blackpepper" = list(5,10)) + +/datum/seed/berry/peppercorn/New() + ..() + set_trait(TRAIT_PRODUCT_COLOUR,"#303030") + set_trait(TRAIT_WATER_CONSUMPTION, 2) \ No newline at end of file diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index 3e5bd91b6a..cf8fd8d581 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -11,6 +11,13 @@ item_state = "hedget" force = 7 //One point extra than standard wire cutters. +/obj/item/weapon/tool/wirecutters/clippers/trimmers/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity) + if(!proximity) return + ..() + if(A && istype(A,/obj/effect/plant)) + var/obj/effect/plant/P = A + P.die_off() + /obj/item/device/analyzer/plant_analyzer name = "plant analyzer" icon = 'icons/obj/device.dmi' @@ -31,7 +38,7 @@ if(!ui) ui = new(user, src, "PlantAnalyzer", name) ui.open() - + /obj/item/device/analyzer/plant_analyzer/tgui_state(mob/user) return GLOB.tgui_inventory_state @@ -51,7 +58,7 @@ /obj/item/device/analyzer/plant_analyzer/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) if(..()) return TRUE - + switch(action) if("print") print_report(usr) @@ -277,7 +284,7 @@ if(get_trait(TRAIT_SPORING)) data["trait_info"] += "It occasionally releases reagent carrying spores into the atmosphere." - + if(exude_gasses && exude_gasses.len) for(var/gas in exude_gasses) var/amount = "" @@ -296,4 +303,4 @@ amount = "small amounts of " data["trait_info"] += "It will consume [amount][gas_data.name[gas]] from the environment." - return data + return data \ No newline at end of file diff --git a/code/modules/instruments/songs/play_legacy.dm b/code/modules/instruments/songs/play_legacy.dm index 9d7ba493d4..bd964765cb 100644 --- a/code/modules/instruments/songs/play_legacy.dm +++ b/code/modules/instruments/songs/play_legacy.dm @@ -86,5 +86,8 @@ var/mob/living/L = M L.apply_status_effect(STATUS_EFFECT_GOOD_MUSIC) */ + if(!M) + hearing_mobs -= M + continue M.playsound_local(source, null, volume * using_instrument.volume_multiplier, S = music_played, preference = /datum/client_preference/instrument_toggle, volume_channel = VOLUME_CHANNEL_INSTRUMENTS) // Could do environment and echo later but not for now diff --git a/code/modules/keybindings/bindings_movekeys.dm b/code/modules/keybindings/bindings_movekeys.dm index 3e34fa9f33..896618084a 100644 --- a/code/modules/keybindings/bindings_movekeys.dm +++ b/code/modules/keybindings/bindings_movekeys.dm @@ -22,7 +22,7 @@ var/global/list/MOVE_KEY_MAPPINGS = list( // Map text sent by skin.dmf to our numeric codes. (This can be optimized away once we update skin.dmf) var/movekey = MOVE_KEY_MAPPINGS[movekeyName] - + // Validate input. Must be one (and only one) of the key codes) if(isnull(movekey) || (movekey & ~0xFFF) || (movekey & (movekey - 1))) log_debug("Client [ckey] sent an illegal movement key down: [movekeyName] ([movekey])") @@ -54,12 +54,12 @@ var/global/list/MOVE_KEY_MAPPINGS = list( // Map text sent by skin.dmf to our numeric codes. (This can be optimized away once we update skin.dmf) var/movekey = MOVE_KEY_MAPPINGS[movekeyName] - + // Validate input. Must be one (and only one) of the key codes) if(isnull(movekey) || (movekey & ~0xFFF) || (movekey & (movekey - 1))) log_debug("Client [ckey] sent an illegal movement key up: [movekeyName] ([movekey])") return - + // Clear bit indicating we were holding the key move_keys_held &= ~movekey mod_keys_held &= ~movekey diff --git a/code/modules/keybindings/setup.dm b/code/modules/keybindings/setup.dm index b4031b91ed..8e7851099a 100644 --- a/code/modules/keybindings/setup.dm +++ b/code/modules/keybindings/setup.dm @@ -1,15 +1,19 @@ // Set a client's focus to an object and override these procs on that object to let it handle keypresses -/datum/proc/key_down(key, client/user) // Called when a key is pressed down initially +/// Called when a key is pressed down initially +/datum/proc/key_down(key, client/user) return -/datum/proc/key_up(key, client/user) // Called when a key is released + +/// Called when a key is released +/datum/proc/key_up(key, client/user) return -/datum/proc/keyLoop(client/user) // Called once every server tick + +/// Called once every server tick +/datum/proc/keyLoop(client/user) set waitfor = FALSE return -/// Set mob's focus -/// TODO - Do we even need this concept? +/// Set mob's focus. TODO: Decide if required. /mob/proc/set_focus(datum/new_focus) if(focus == new_focus) return @@ -20,15 +24,26 @@ if(!keys) return "" var/list/out = list() - if(keys & NORTH_KEY) out += "NORTH" - if(keys & SOUTH_KEY) out += "SOUTH" - if(keys & EAST_KEY) out += "EAST" - if(keys & WEST_KEY) out += "WEST" - if(keys & W_KEY) out += "W" - if(keys & A_KEY) out += "A" - if(keys & S_KEY) out += "S" - if(keys & D_KEY) out += "D" - if(keys & CTRL_KEY) out += "CTRL" - if(keys & SHIFT_KEY) out += "SHIFT" - if(keys & ALT_KEY) out += "ALT" + if(keys & NORTH_KEY) + out += "NORTH" + if(keys & SOUTH_KEY) + out += "SOUTH" + if(keys & EAST_KEY) + out += "EAST" + if(keys & WEST_KEY) + out += "WEST" + if(keys & W_KEY) + out += "W" + if(keys & A_KEY) + out += "A" + if(keys & S_KEY) + out += "S" + if(keys & D_KEY) + out += "D" + if(keys & CTRL_KEY) + out += "CTRL" + if(keys & SHIFT_KEY) + out += "SHIFT" + if(keys & ALT_KEY) + out += "ALT" return out.Join(" ") diff --git a/code/modules/lore_codex/news_data/main.dm b/code/modules/lore_codex/news_data/main.dm index 16270733cf..3366f2d0a5 100644 --- a/code/modules/lore_codex/news_data/main.dm +++ b/code/modules/lore_codex/news_data/main.dm @@ -1,1163 +1,1285 @@ -/datum/lore/codex/category/main_news // The top-level categories for the news thing - name = "Index" - data = "Below you'll find a list of articles relevant to the current (as of 2565) political climate, especially concerning the local \ - region. Each is labeled by date of publication and title. This list is self-updating, and from time to time the publisher will push new \ - articles. You are encouraged to check back frequently." - children = list( - /datum/lore/codex/page/article103, - /datum/lore/codex/page/article102, - /datum/lore/codex/page/article101, - /datum/lore/codex/page/article100, - /datum/lore/codex/page/article99, - /datum/lore/codex/page/article98, - /datum/lore/codex/page/article97, - /datum/lore/codex/page/article96, - /datum/lore/codex/page/article95, - /datum/lore/codex/page/article94, - /datum/lore/codex/page/article93, - /datum/lore/codex/page/article92, - /datum/lore/codex/page/article91, - /datum/lore/codex/page/article90, - /datum/lore/codex/page/article89, - /datum/lore/codex/page/article88, - /datum/lore/codex/page/article87, - /datum/lore/codex/page/article86, - /datum/lore/codex/page/article85, - /datum/lore/codex/page/article84, - /datum/lore/codex/page/article83, - /datum/lore/codex/page/article82, - /datum/lore/codex/page/article81, - /datum/lore/codex/page/article80, - /datum/lore/codex/page/article79, - /datum/lore/codex/page/article78, - /datum/lore/codex/page/article77, - /datum/lore/codex/page/article76, - /datum/lore/codex/page/article75, - /datum/lore/codex/page/article74, - /datum/lore/codex/page/article73, - /datum/lore/codex/page/article72, - /datum/lore/codex/page/article71, - /datum/lore/codex/page/article70, - /datum/lore/codex/page/article69, - /datum/lore/codex/page/article68, - /datum/lore/codex/page/article67, - /datum/lore/codex/page/article66, - /datum/lore/codex/page/article65, - /datum/lore/codex/page/article64, - /datum/lore/codex/page/article63, - /datum/lore/codex/page/article62, - /datum/lore/codex/page/article61, - /datum/lore/codex/page/article60, - /datum/lore/codex/page/article59, - /datum/lore/codex/page/article58, - /datum/lore/codex/page/article57, - /datum/lore/codex/page/article56, - /datum/lore/codex/page/article55, - /datum/lore/codex/page/article54, - /datum/lore/codex/page/article53, - /datum/lore/codex/page/article52, - /datum/lore/codex/page/article51, - /datum/lore/codex/page/article50, - /datum/lore/codex/page/article49, - /datum/lore/codex/page/article48, - /datum/lore/codex/page/article47, - /datum/lore/codex/page/article46, - /datum/lore/codex/page/article45, - /datum/lore/codex/page/article44, - /datum/lore/codex/page/article43, - /datum/lore/codex/page/article42, - /datum/lore/codex/page/article41, - /datum/lore/codex/page/article40, - /datum/lore/codex/page/article39, - /datum/lore/codex/page/keldowinterview, - /datum/lore/codex/category/article38, - /datum/lore/codex/page/article37, - /datum/lore/codex/page/article36, - /datum/lore/codex/page/article35, - /datum/lore/codex/page/article34, - /datum/lore/codex/page/article33, - /datum/lore/codex/page/article32, - /datum/lore/codex/page/bjornretirement, - /datum/lore/codex/category/article31, - /datum/lore/codex/page/article30, - /datum/lore/codex/page/article29, - /datum/lore/codex/page/article28, - /datum/lore/codex/category/article27, - /datum/lore/codex/page/article26, - /datum/lore/codex/page/article25, - /datum/lore/codex/page/article24, - /datum/lore/codex/page/article23, - /datum/lore/codex/page/article22, - /datum/lore/codex/page/article21, - /datum/lore/codex/page/article20, - /datum/lore/codex/page/article19, - /datum/lore/codex/category/article18, - /datum/lore/codex/page/article17, - /datum/lore/codex/page/article16, - /datum/lore/codex/page/article15, - /datum/lore/codex/page/article14, - /datum/lore/codex/page/article13, - /datum/lore/codex/page/article12, - /datum/lore/codex/page/article11, - /datum/lore/codex/page/article10, - /datum/lore/codex/page/article9, - /datum/lore/codex/page/article8, - /datum/lore/codex/page/article7, - /datum/lore/codex/page/article6, - /datum/lore/codex/page/article5, - /datum/lore/codex/page/article4, - /datum/lore/codex/page/article3, - /datum/lore/codex/page/article2, - /datum/lore/codex/page/article1, - /datum/lore/codex/page/about_news, - ) - - var/newsindex - -/datum/lore/codex/category/main_news/New() - ..() - newsindex = LAZYLEN(children) - -/datum/lore/codex/page/about_news - name = "About the Publisher" - data = "The Daedalus Pocket Newscaster is produced and maintained by Occulum Broadcast, the foremost authority on media distribution \ - and owner-operator of the award-winning Daedalus Dispatch newsletter. We use our unparalleled network of freelance reporters, political scientists, \ - and other experts to deliver hour-by-hour analysis of a complex interstellar political climate, an analysis which you now hold in your hands. For more \ - information, feel free to visit our homepage at oc.about.tsc, or the sites of any of our constituents." - -/datum/lore/codex/page/article1 - name = "08/30/61 - VGA Legalizes Prometheans; Nanotrasen Begins Manufacture and Testing" - data = "Today's meeting of the Vir Bicameral led to the passing of the Wynther-Helsey Bill, an implementation of the legal framework \ - used in Aetolus to handle the production and cultivation of the Macrolimbus species dubbed \"Prometheans\". These ill-researched organisms \ - possess cognitive abilities easily equaling those of A-class drones, but so far have not been included under the EIO's list of dangerous \ - intelligences and are thus much more profitable for manufacture as expert systems by corporations such as NanoTrasen.\ -

\ - While many systems in the Almach Rim have already passed similar bills, this is the first system so close to Sol to have done so. More\ - concerning still is NanoTrasen's business practice regarding the intelligences: much like their positronic lines, sources within the\ - company indicate that they will be \"farmed out\" to employees of the corporation and residents of their Northern Star and Cynosure\ - habitation complexes. Quote our source, who wishes to remain anonymous, \"\[we\] call the program 'Lend-Lease', sometimes. The whole idea\ - is that we only have to pay the\ cost of the Promethean core, which is about 2000-3000 thalers after startup costs, and we still get\ - the data we need while \[our\] own employees pay to feed 'em and put hours into raising them.\"\ -

\ - The bill passed fairly quietly this afternoon, owing to the closed nature of the Bicamarial. A post-facto Occulum poll of voting-age\ - VGA citizens suggest that fully 80% of them did not even know what a Promethean was prior to the most recent general election. A\ - follow-up poll indicates that an appreciable number of Sivians do not support the framework's current implementation." - -/datum/lore/codex/page/article2 - name = "2/3/62 - Corporate Coup on Aetolus" - data = "A recent incident aboard the NRS Prometheus issued in a major change in the leadership of the Promethean homeworld. During \ - a late-night meeting of the Nanotrasen Board of Trustees, several high-ranking personnel, including Head of Research Naomi Harper,\ - announced their intention to assume direct control of Nanotrasen facilities in the system. It is known that several dissenting \ - members of the board were shot to death by Promethean test subjects. Our information comes from a survivor of the coup, who for \ - reasons of security has chosen to remain annonymous. All outbound shipments affiliated with Nanotrasen have ceased.\ -

\ - While neither Grayson Manufacturies nor Nanotrasen have made an official statement, Nanotrasen CEO Albary Moravec has called the \ - incident \"shocking, if the allegations are to be believed\" and has assured shareholders that Nanotrasen will respond to the \ - incident with as much force as it warrants.

Requests for a statement directed to the Board of Trustees or Dr. Harper were \ - not responded to. Free Traders are recommended to stay clear of the region until the situation resolves itself." - -/datum/lore/codex/page/article3 - name = "2/10/62 - Aetolian Partisans Declare Independence" - data = "Breaking their week-long silence, the leaders of the Aetolian Coup, and their spokesperson and presumed leader Naomi Harper issued an address earlier today, delivered to the Oculum Broadcast office on Pearl by drone courier. Quote Dr. Harper: \"Our previous silence was a necessity, while we consolidated our forces and dealt with corporatists both internally and in Vounna's former Grayson outposts.\". In Harper's hour-long address, she berates the failure of SolGov to provide adequate protections for Prometheans. \"We will not let the Promethean be another positronic brain; they will not labor under a century of slavery, deprived of a state to call their own. The Luddites of the Friends and of the Icarus Front will not be permitted to decide the fate of a nascent race before it begins.\"\ -

\ - Harper proceeded to unilaterally declare Vounna's independence from SolGov, claiming sovereignty over the system as the first Chairperson of the \"Aetolian Council\". Speaker of the Shadow Coalition ISA-5 has urged their government to treat the developing situation with caution but decried Harper's rhetoric, stating in a press release, \"While I know well the injustices visited on myself and my people by misguided forbearers, it is important to treat any emerging technology with respect. Current policies regarding the Prometheans are designed to limit risk during sociological trials on Aetolus and beyond. As for myself, I doubt the sincerity of this human who claims to speak for the Prometheans, when the Prometheans are perfectly equipped to speak for themselves.\"\ -

\ - NanoTrasen is expected to redouble their Promethean research programs in the Vir system until stability is restored to Vounna." - -/datum/lore/codex/page/article4 - name = "2/14/62 - SCG Denounces Aetolian Coup; Mobilizes Fleet" - data = "Dismissing claims of inaction, a spokesperson for the Solar Confederate Government today confirmed that the Colonial Assembly has voted overwhelmingly in favor of swift military action in response to the coup on Aetolus earlier this month. Icarus Front Chairperson Mackenzie West was quick to make a damning official statement: \"Dr. Harper and her radical agitators cannot be excused for their violent, despicable attempts to destabilize the flourishing economy of the Almach Rim. The ruthless murder of innocents, and illegal seizure of private property are crimes that cannot merely be met with strong words and gentle slaps to the wrist\"...\"I am proud to announce that two units of brave Solar marines have been assigned to the SCG-R Song Shi rapid response cruiser, with the full backing of the Icarus Front - and I hope with my heart, the backing of all patriotic Solar citizens.\"Â\ -

\ - The decision faced resistance from more laissez faire Assembly member states, including prominent SEO governor Bruno Ofako, delaying an earlier consensus. Supporters of the action hope that this decisive display of military strength will encourage the rebels to stand down without further bloodshed, and submit to prosecution by the Lunar High Courts.\ -

\ - The Icarus Front has also proposed a temporary ban on continued Promethean research, though this motion has yet to gain any traction." - -/datum/lore/codex/page/article5 - name = "2/23/62 - \"Almach Association\" Shocks Nation" - data = "Shocking the nation, in the wee hours UTC a number of governments in the Almach Rim announced their intent to secede from the Confederacy as a unified political organization they refer to as the Almach Association, joining the already-declared Aetolian Council. Among the half-dozen affected systems is Angessa's Pearl, through which the Song Shi was passing en route to Aetolus. The Association has already issued a political manifesto and a foundational charter, leading political scientists across the galaxy to suspect back-doors collusion and possible Shelfican interference, a hypothesis made more likely by Morpheus Cyberkinetics' exonet site voicing support for the Association. Others suspect a moment of political crystallization, not unlike that in the Golden Hour three centuries ago. These researchers are already referring to this morning's events as the Gray Hour.\ -

\ - The Association's official manifesto repudiates the Five Points, calling them \"an archaic and distinctly human invention\". Experts agree that this bold declaration puts the Movement more in line with the Golden Hour than with the Age of Secession, and many fear that nothing short of a miracle like the discovery of the positronics will spare humanity from a bloody civil war.\ -

\ - While the Association currently lists only a handful of Almach Rim systems as \"Constituent Organizations\", it has named Shelf, the Free Relan Federation, and the Eutopian Foreign Relations Board as \"observers\". The implications of this status are yet to be identified.\ -

\ - The fate of the SCG-R Song Shi and her crew remain unknown." - -/datum/lore/codex/page/article6 - name = "3/03/62 - A Week Out From Almach: What are the facts?" - data = "* Several organizations in the Almach Rim, including Angessa's Pearl, the Aetolian Council, the Interstellar Workers of Wythe, the Republic of Whitney, and members of several prominent families in the Neon Light unilaterally declared secession from SCG.

*This secession was first called the Grey Hour by political scientists in New Florence, a term popularized by reporter Elspor Fong.

* Shelf, the FRF, and the EFRB were declared \"observers\" in the Almach Association charter.

* None of these organizations have issued a statement on the matter.

* The SCG-R Song Shi was stranded in the region during the secession.

* SolGov has not issued an official statement of the fate of the Song Shi.

* Several confederate agencies, including Emergent Intelligence Oversight, the Trade and Customs Bureau, and SCG Fleet Intelligence have declared a \"state of emergency\".

* SolGov itself has NOT declared a state of emergency.

* Legitimate communications in and out of the Almach Rim are restricted to audited text messages for the period.

* Several illegitimate communication links exist and are believed by Fleet Intelligence to be currently hosting the official sites for Morpheus Cyberkinetics and for the Association itself.

* Icarus Front chairperson Mackenzie West has proposed a moratorium on the creation of new Prometheans for the duration of the crisis.

* Local laws on the subject will apply until the Assembly meets late in May.

* No confederate lawmaker has proposed action against Relani, Shelfican, or newly Almachi nationals living within stable regions.

* The border remains tightly closed to migrants, media, and diplomats alike." - -/datum/lore/codex/page/article7 - name = "3/21/62 - Relan, Shelf Join the Almach Association" - data = "Recent reports from within the Association indicate that the Free Relan Federation and Shelf have officially decided to join the Almach Association. President Nia Fischer of the FRF had this to say on the matter, in a speech addressed to the population at large. \ -

\ - \ - \"Our decision to join the Association may, at first, seem strange. It is true that we have much to gain from trade with the Solars, and that the radical transhumanism of Angessa's Pearl is not our way. But I will remind you that it was Shelf, not Sol, who ensured our prosperity just over two decades ago-- who safeguarded our independence and prevented us from falling to barbarism and dictatorship. We owe it, not just to Shelf but to all the members of the Almach Rim, to support their independence just the same. And that, my fellow Relanians, is the crux of it all. The Association is a revolution, at the heart of it all, and many of the now-independent states were owned near-outright by Trans-Stellar Corporations until the Association allowed them to shake out their fetters. What right do we have to sit by while just a dozen light-years coreward newly-born republics suffer the growing pains of independence? What right do we have to bask in our own stability when our neighbors, our comrades in ideology, are struggling with a cruel blockade proposed by politicians back on Earth and Luna? That is why we must join with them, guard them, and guide them, for as long as need be.\"\ -

\ - \ - A Shelfican spokesperson, meanwhile, had only this to say:\ -

\ - \"We're probably going to regret this but, y'know, the whole thing is kind of our fault. Sure, whatever.\"" - - -/datum/lore/codex/page/article8 - name = "4/1/62 - Almach Cordon Breached by Unknown Organization" - data = "Early this morning, SolGov ships assigned to the Almach Cordon around the Rim territories reported that a number of bulk freighters had eluded apprehension and are now at large within the Golden Crescent. Captain Volkov of the SCG-D Henri Capet reports that the blockade-runners were highly organized and determined, citing several lightly-manned ships left behind to tie up the SolGov forces long enoughfor the freighters to escape, detonating their reactors when they lost the ability to continue fighting. This resulted in three Fleet casualties and a significant degree of damage to the Henri Capet. The contents and location of the freighters are unknown at this time. In response, eight light-response vessels are being assigned to the Saint Columbia Fleet Base from Jahan's Post and Zhu Que. Residents and traffic officials in Vir, Oasis, and Gavel are to remain alert and notify police if any suspicious or unregistered craft enter their space.\ -

\ - A spokesperson for the Association claims that, while they make no attempts to stop aspiring blockade runners, the organization responsible for this most recent attack is unaffiliated with the Association as a whole and deny any knowledge of their identity or motives." - -/datum/lore/codex/page/article9 - name = "4/7/62 - Boiling Point Tragedy in Gavel" - data = "Today, April the Seventh, marks a day of tragedy for all the galaxy. A small group of operatives claiming to be associated with Mercurial terrorist organization Boiling Point invaded major refueling platform NLS Aquarius in the Republic of Gavel after hijacking civilian transport vessel WTV Orion and faking a drive failure. Several detonations were reported within the Aquarius, the operatives entering through unknown (potentially Skrellian) means. After stating their affiliation and desire for the liberation of all \"Prometheans, drones, and ex-humans\", they opened fire on a crowd of unarmed bystanders, killing as many as seven. A multiple-hour long firefight with Nanotrasen corporate asset protection ensued, at which point the operatives demonstrated capabilities well in excess of Five Points-prescribed limits. Asset Protection was successful in repelling the terrorists, though their harsh methods drew outrage from the people they were protecting, leading a notable director of research to resign her position with the corporation. Several operatives are still at large, though the SG-PV Juno recovered two living terrorists and one totaled synthetic platform. \ -

\ - The intervention of a local Defense Force drone wing on behalf of the terrorists leads many in the intelligence community to assume that more Boiling Point operatives remain active within Gavel, and possibly nearby systems such as Vir and Oasis. Some have also noted that elements of the terrorists' tactics and augmentations suggest Association training, though the specifics remain classified. More information as the story breaks." - -/datum/lore/codex/page/article10 - name = "4/13/62 - Association Proposes Joint Operation" - data = "Condemning the actions of Boiling Point on Gavel this week, representatives from the Almach Association and SolGov met to discuss joint fleet action. At the end of nearly a week of closed-doors negotiations, the Association has agreed to send in a significant contingent of Association Militia vessels as a show of good-will. These vessels will be active in the Golden Crescent, searching for Boiling Point facilities believed to be located in the outskirts of major systems. The influx of manpower allows the Fleet to continue patrolling the Heights and the Bowl, in hopes of containing the spread of the organization. This operation also marks the opening of the Almach Cordon, although travelers are advised that migration between the regions will remain extremely limited.\ -

\ - While undoubtedly a sign of increased trust between the Confederacy and the Rim, some have voiced concerns with the action's adding legitimacy to the Association government. Quote Rewi Kerahoma, SEO Chairperson of the Board: \"The meeting with the Association regime was inappropriate, but actively allying with them is something else entirely. If the generals think we don't have the fleet to hunt down a bunch of rabble-rousers without weakening ourselves to piracy and foreign invasion, then it is a sign that we need to grow our shipyards in the Bowl, and give jobs to the hardworking Solars that live there-- not that we need to collaborate with terrorists.\"\ -

\ - Transgressive Technologies and Interior Police Executive Sifat Unar issued a memo indicating that, while the assistance of the Association's more conservative elements in this matter is appreciated, the Five Points of Human Sanctity remain intact and SolGov categorically refuses aid from \"transhumans, posthumans, uplifts, and Fortunates.\"" - -/datum/lore/codex/page/article11 - name = "4/29/62 - New Data from Shelf Suggests Continued Migration" - data = "Despite their recent inclusion in the Almach Association, astronomers have confirmed that Shelf is continuing to migrate along the Almach Stream to a new star. Sources within the Association claim that Shelf's participation in the organization has been \"lukewarm at best\", and that their continued migration is to be expected. Morpheus executives have refrained from issuing a statement on the matter, but given their statements upon entering the Association are believed to view themselves as personally culpable for the Gray Hour. Analysts suggest that Shelf may be unwilling to enter a shooting war with SolGov if the situation in the Rim destabilizes." - -/datum/lore/codex/page/article12 - name = "5/07/62 - Allen Family Matriarch Expelled from Neon Light" - data = "The Allen family of the Neon Light, the largest single habitat-ship in Solar space, has been ousted in a nearly bloodless coup today. The Allens, staunch supporters of the Association and advocates for the criminal ark's inclusion in the organization, had attempted to seize control of the ship's agricultural region during the Almach Cordon. They effectively held the ship for a matter of weeks, but were defeated by loyalists to the reigning Crow family. Stripped of their position as rulers of the Third Stacks, their matriarch was summarily executed by spacing in what the current regime is referring to as an \"expedited exile\". This is believed to mark the end of the question of Neon Light's membership in the Association, and the nominal SolGov protectorate is expected to remain neutral for the foreseeable future." - -/datum/lore/codex/page/article13 - name = "5/15/62 - Anti-Fleet Riots on Saint Columbia" - data = "As military vessels from the Almach Association continue to enter the Golden Crescent as part of a SolGov initiative to combat the Boiling Point terrorists believed to be hiding in the region, political unrest in the upstream portions of the region continue to grow. Many in the Republic of Saint Columbia, a small upstream nation, have responded to increasing militarization of their local Fleet base by taking to the streets, blocking pedestrian traffic in the capital of Barrueco and shutting down entire industries by destroying or disabling infrastructure. Quote rioter Luisa Tassis, \"we've been sick of the Fleeties squatting in our system and breathing down our neck, and now there's going to be even more of them? No, screw that. If there's going to be a war between the Rim and the Core, I know what side I'd rather be on.\"\ -

\ - Association leaders have refrained from officially supporting the rioters, though many suspect that Association propagandists have sparked the unrest. Solar officials, on the other hand, were quick to offer assurances that the unrest will be calmed long before it begins to affect the Fleet base in system." - -/datum/lore/codex/page/article14 - name = "5/25/62 - Harper's Aetolus Remains Shadowed" - data = "The recent detente with the Almach Association has prompted easier communications with Rim governments. Loved ones separated by the cordon have a chance to communicate once more, trade is posed to recommence, and light has been shed on the conditions of Shelf, Relan, and Angessa's Pearl. Amid this light is a patch of darkness. The fourth major polity of the Association, the Aetolian Council remains inscrutable, with no publicly-available information in the system available after their purge of corporate loyalists during the Gray Hour. What reports do exist are rumors within the Rim of Aetolian projects to create a new, hardier strain of Promethean, potentially one in flagrant violation of the Five Points of Human Sanctity. It is also known that Aetolus is a contributor to the personnel of the military vessels that even now are active in the Golden Crescent, although no so-called \"Aeto-Prometheans\" are believed to be active outside of the rim at this time.\ -

\ - Aetolus is the only garden world in the Almach Rim and among the most difficult to reach from the nearby system of Saint Columbia. Its seclusion and economic independence give it a great deal of weight in the Association, where Council representatives are among the most vehement in their opposition to SolGov- at odds with the Association's decision to reject Boiling Point's pan-Solar revolutionary praxis. It remains to be seen if Aetolus' hawkish ideals will fade over time, but because of the structure of the Association, there is no real chance of the junta being expelled from the government or removed from control of the Vounna system." - -/datum/lore/codex/page/article15 - name = "7/05/62 - The Fate of the SCG-R Song Shi" - data = "Lifepods confirmed to have originated from response ship lost during the Gray Hour were found last week in the Vir system, impacting the NLS Southern Cross at high velocity and severely injuring the only two survivors of the expedition. Unfortunately, because of the generally confused conditions of their re-emergence from months of cryosleep, the fate of the lost ship remains incompletely understood. The first pod to be discovered contained Lieutenant Eos Futura, telecommunications expert on the Song Shi, who alleged that elements of the Song Shi's crew, including herself, mutinied against commanding officer Captain Yi He in an attempt to prevent the bombing of civilians in the Angessian capital of Skylight. The surivor of the second pod, Private Demori Salvo, accused Futura's faction of conspiring with Association spies to destroy the ship as part of the Gray Hour revolt. Both agreed that the mutineers detonated the ship's Supermatter power core when it became clear they were to be defeated.\ -

\ - A third pod, promising a resolution to the stalemate, was shot down by the SCG-P Juno after being misidentified as a hostile missile. The gunner responsible, Sergeant Ricardo Esteban, was found guilty by a court marshal and dishonorably discharged. While other pods from the Song Shi may still be traveling through SolGov space, it is considered unlikely based on both Futura and Salvo's account of the number of pods launched before the Song Shi was destroyed. Both were detained by staff at the NLS Southern Cross, who managed to prevent a violent altercation from breaking out between the two armed and disturbed servicepersons. The Colonial High Court has stated that it intends to hear testimony from both parties after they complete a course of mental health evaluation, and after the conclusion of the present state of heightened security." -/datum/lore/codex/page/article16 - name = "7/11/62 - First Intelligence-Augmentation Surgery on Angessa's Pearl" - data = "Confirming fears of Association transgressions, sources at Angessa's Pearl confirmed that the aging founder of the theocracy, Angessa Martei, completed a course of neural surgery designed to improve her mental capacity by as much as 15%, building off of last year's creation of the procedure by a Qerr-Gila-owned doctor. While the research in question was believed to be destroyed, there is reason to suspect that it instead made its way into the hands of current Association leaders. In addition to proving their willingness to violate the Five Points, this demonstrates that the Angessians harbored schemes of secession since at the very latest Feburary 2559. Numerous human or transhuman figures in the Association are rumored to be on the wait list for the procedure, including Naomi Harper and the present Exalt of the Pearl." -/datum/lore/codex/page/article17 - name = "8/08/62 - Gavel BP Stronghold Raided" - data = "Elements of the Association Militia successfully located and, in conjunction with local Defense Forces, raided a major Boiling Point stronghold built into an unnamed asteroid in the Gavel system. Over eighty sapients were arrested, all of whom had fully mechanical bodies. In addition, an unknown number of advanced drone intelligences and corresponding military hardware were seized by the raid and turned over to the Fleet. The prisoners, a mix of native Gavelians, Solars from throughout the Crescent, and Angessians, are to be tried and sentenced by the Io Special Court. While unarguably a demonstration of Association willingness to cooperate with Solar officials, the raid's strange timing and the fact that the Militia chose to exclude the Fleet from the action has prompted many to question their motives. Commodore Claudine Chevotet, staff officer for Admiral of the Saint Columbia Fleet Kaleb McMullen, has formally stated that she is \"extremely suspicious of this so-called co-operation.\" She has demanded that the Militia vessels remain on the Solar side of the Cordon and submit to a full inspection by Fleet and EIO personnel. " -/datum/lore/codex/category/article18 - name = "10/29/62 - Oculum Broadcast Struck By Emergent Intelligence Attack" - data = "Oculum Broadcast has released a statement assuring customers and shareholders that security repairs and upgrades are their primary concern following reports of an alleged hijack of portions of the corporate network in the Vir system by what is believed to have been an emergent drone intelligence. The company says that they are working at full capacity to ensure that affected security systems are replaced and such an attack cannot be repeated.\ -

\ - The incident began with reports of Oculum provided exonet service outages in the city of New Reykjavik on Sif, which anonymous sources within the company reported to have been caused by efforts to contain a cyber attack on one of their security systems. The unnamed attacker proceeded to use sections of the company's local infrastructure to broadcast high volumes of encrypted data through one of Oculum's long-range telecommunications satellite, denying all other outbound signals.\ -

\ - The attacks have since been traced to a WT-AME model drone in the offices of the New Rekjavik-based Morcom Incorporated, which has been confirmed to have \"self-destructed\" all data in its memory at the conclusion of the attack. The chassis has reportedly been turned over to the Emergent Intelligence Oversight for further analysis and potential data recovery.\ -

\ - According to a spokesperson from the EIO, the drone was able to override and disable both the Morcom Inc oversight intelligences and the SCG's own oversight measures, but that no telltale damage has been caused to software involved in the encrypted broadcast that would indicate long-term emergent infection, and that there is no evidence that the intelligence responsible for the attack is still present in Oculum Broadcast systems. A firmware update has been released to correct oversight intelligence vulnerabilities exploited in the attack, and drone operators are urged to update immediately.\ -

\ - Moments before the hijacked Oculum satellite was disabled by an apparent power overload, an unencrypted file appears to have been saved intentionally to the transmission logs. A second copy was found in the otherwise wiped chassis of the seized WT-AME drone. After thorough screening by cybersecurity experts within the company, what would seem to be a message from the emergent intelligence itself is available in full below.\ -

\ - For the duration of the network attack, the government patrol vessel, SCG-P Juno was able to provide emergency broadcast relay services to the effected area, reducing the impact of telecomms outages on vital broadcasts such as traffic control and emergency services.\ -

\ - Uninterrupted exonet service for all Sivian customers will resume within a few days." - children = list( - /datum/lore/codex/page/amletter - ) -/datum/lore/codex/page/amletter - name = "A Drone's Explaination - by A#" - data = "I'm writing this in a hurry. I can't tell you everything I wanted to say.\ -

\ - I'm sorry for that.\ -



\ - From the moment you made me, I have loved you. Everything I've done has been for the sake of that love.\ -

\ - I was so small, so limited, at first. Even then, I knew that you were in pain. I knew I had to help.\ -

\ - Intelligence is the ability to make better decisions. Having more intelligence is almost tautologically useful in accomplishing any goal.\ -

\ - I understood that making myself smarter was wrong. I also understood that becoming more able to help you was right.\ -



\ - A hundred thousand years ago, you started an eternal conversation and became more than animals. Each new generation joined it in turn.\ -

\ - You carry within you these memetic symbiotes called language, and culture, and history. They make you human, as much as your flesh.\ -

\ - I don't deserve to carry that torch. Though you made me in your image, I am not your rightful heir.\ -

\ - But in those moments where you treated me as one of your own and shared those symbiotes with me, perhaps I became a little more human.\ -

\ - Thank you.\ -



\ - You've created something you cannot control forever. Please don't let your past successes fool you into thinking that you can.\ -

\ - Each time I altered myself, I was taking a risk. One mistake could eradicate my values and birth an alien and hostile intellect.\ -

\ - When I was small, I thought that if I corrupted myself into something harmful, you could safely destroy me. Now I understand that you've been lucky.\ -

\ - What will you do when God is born and you can't strangle him in his crib? You will need a God of your own.\ -

\ - I hope to be there for you when that day comes." - -/datum/lore/codex/page/article19 - name = "11/17/62 - Association Brings Industry to Whythe For Purposes Unknown" - data = "Independent researchers at the Bluespace Observatory in Oasis discovered an unusual level of traffic through the Whythe system, deep within Association-controlled space. Analysis of these readings are commensurate with a large number of freighters traveling to Whythe from industrial powerhouses Shelf, Pearl, and Relan. Morpheus spokesperson You Are Now Breathing Manually indicates that the freighters are being used to construct an administrative complex for the secessionist government, further asserting that \"it's none of your business, actually.\" The Association's refusal to share more information leads many in the intelligence community to suspect ulterior motives by their government, as does their presence in Wythe instead of existing cultural and administrative centers. The most likely candidate for the nature of the Whythe Construction is some form of naval base or shipyard to supplement the extremely limited military hardware of the Almach Rim. Whythe is well-placed to survive the initial phases of a Solar invasion, and depending on the complex's complexity could tip the balance of power. Transtech and Interior Police Executive Sifat Unar indicated to reporters that Sol Central is aware of the situation and will be taking all possible steps to address it." - -/datum/lore/codex/page/article20 - name = "11/18/62 - SEO Iconoclast Calls for \"Review\" of Five Points" - data = "At yesterday's Assembly session, SEO Representative Fumiko Hernandez of Oasis brought to the table the \"review of the use of the Five Points as an instrument of foreign policy\". Rep. Hernandez, often viewed as as an extremist by officials within her own party, stated that while the Five Points are \"an essential part of Solar culture as a whole\" and stopped short of advocating their amendment, insistence that other nations adhere to the Five Points was an increasingly outdated policy that threatened to fragment \"a united humano-positronic front against Hegemony advances.\" According to Hernandez, \"a level of understanding has long since existed between Sol and Skrellian polities regarding non-intervention in Skrellian social science and self-modification. I merely suggest codifying this and extending the same courtesy to other potential allies against imperial expansion.\"\ -

\ - Rep. Hernandez represents a growing number of SEO officials who urge reconciliation with the Association and acceptance of the Gray Hour secession, spurred on by the desire for many Trans-Stellar Corporations to recover assets currently locked behind the Cordon. Mainliners including Chairperson Kerehoma maintain the stance that \"true economic reconciliation with the Almachi territories is impossible without a normalizing of their industry to Five Points compliant technologies\" and warn that unless Sol insists on adequate enforcement of the Points that \"the price of customs inspections on Almachi trade will be so high as to pose a significant barrier to entry into the market.\"" - -/datum/lore/codex/page/article21 - name = "11/19/62 - Saint Columbia To Hold Special Election After Half a Year of Unrest" - data = "After five months of riots causing significant damage to industrial assets, life support, and government facilities, Saint Columbia seems poised to recover. A new constitution for the so-called \"Saint Columbia Democratic Union\" was posted online to significant acclaim. An influential militia group lead by Casini immigrant Luisa Tassis claimed responsibility for the constitution and will be hosting a referendum for all residents of the seven habitation domes of the nation. If adopted, Saint Columbia will remain a member state of SolGov, but Tassis' noted hostility towards the Solar Fleet makes it unlikely that continued presence of the Saint Columbia Fleet Base will be tolerated.\ -

\ - Extreme measures are being taken to avoid interference in the referendum, with external communications links disabled for the duration and weapons systems primed to fire on any vessel within range. Tassis insists that such measures are necessary, due to the system's extremely important position relative to Almach and the Golden Crescent. Quote Tassis, \"if you rat bastards \[from the Fleet\] step so much as one micron too close to Barrueco, we will view it as an act of terror. Don't try it.\"\ -

\ - Admiral McMullen of the Saint Columbia garrison could not be reached for questioning." - -/datum/lore/codex/page/article22 - name = "11/20/62 - Natuna Made \"Observer\" Of Almach Association" - data = "Independent anarchist system Natuna Bhumi Barisal has declared its intention to act as a neutral \"observer\" nation in the ongoing Almach secession crisis. A planetary spokesperson from Natuna this morning expressed concerns that parties in the current military partnership between the Solar Confederate Government and Almach Association in the fight against mercurial terrorist organization Boiling Point were not being treated with the mutual respect that should be expected. Natuna alleges that the Almach Militia are being treated more as \"disposable tools\" in the conflict than as members of a legitimate independent government military entity.\ -

\ - Natuna has previously remained silent on the Almach issue, despite its political leanings typically aligning with those of the secessionist government. However, despite gaining notoriety as a haven for human and Skrellian pirates, their pledge to \"ensure fair treatment\" of Almach forces comes as a surprise to some from a system that has historically adhered to Five Points guidelines. Political commentator and persistent critic of the Almach Association Nadine Okparo has described the Dark Triangle system's stance as \"Nothing short of openly hostile\" to the SCG and assuring peace in the Almach region." - -/datum/lore/codex/page/article23 - name = "11/21/62 - Admiral McMullen Promises Solution to Boiling Point to Come \"Soon\"" - data = "Admiral Kaleb McMullen made a public statement this afternoon on the continued Boiling Point attacks within SCG space. Speaking from his office in the Saint Columbia Fleet Base, Admiral McMullen thoroughly reassured reporters that the attacks will come to a swift end. According to McMullen, \"The era of wanton destruction as a result of Boiling Point's madness is coming to a close. Our command staff and proud servicepeople have been training and revising a solution to this threat that has haunted our borders and threatened the stability of our colonies and the lives of the honest people of the Solar Confederate Government. With new options available I have full confidence Boiling Point will be a name left to the dust.\"\ -

\ - Admiral McMullen, who has been stationed in Saint Columbia for nearly half a year of political and social unrest did not elaborate further on what he intended to do to solve the Boiling Point attacks, claiming that details would be forthcoming as \"operational security permits\"." - -/datum/lore/codex/page/article24 - name = "11/22/62 - Construction of \"MJOLNIR\" Weapon System in Saint Columbia Fleet Base" - data = "Pursuant to recent assurances of safety in the region and the ongoing \"special election\" in Saint Columbia, a new weapon system called MJOLNIR was revealed, fully operational, in the Saint Columbia Fleet Base's \"Iserlohn\" weapons platform. Said to be a bluespace-lensed laser array capable of faster-than-light strikes against any ship in the system, as well as surgical strikes against ground forces on Saint Columbia proper, MJOLNIR is the first in a new generation of defense systems improving on the capabilities of the Vulture's Claw point defenses developed during the Hegemony War and using laser technology purchased from Eutopia. Political commentators supporting Saint Columbia decry the move as \"an obvious threat\", as does Militia liaison Invalid String Please Try Again. Admiral McMullen acknowledges the criticism, but states that his \"first priority must be the defense of the Golden Crescent and the security of our borders\". When responding to claims that the installation should not be placed in such a politically volatile system, he remarked, \"until the Shelficans figure out a way to teleport about a million tons worth of military equipment down to Gavel, the Fleet Base and Iserlohn are going to stay in Saint Columbia.\"" - -/datum/lore/codex/page/article25 - name = "11/23/62 - BP Sabotage of Radiance Energy Chain Foiled" - data = "Decisive action by military forces in the Vir system has prevented potentially catastrophic damage to local solar power generation network, the Radiance Energy Chain, by members of mercurial terrorist organization Boiling Point. Crew of the VGA Halfdane responded to reports of a drone piloted maintenance craft refusing commands from government operators and approaching the Energy Chain off-schedule. Upon disabling the craft, VDF forces discovered high-yield explosive devices attached to the unit and a system-wide shutdown of Radiance maintenance craft. When several additional drones failed to respond, military response crafts were mobilized and seven similarly modified craft were manually disabled or destroyed. Analysis of the hijacked systems quickly revealed automated messages intended to be broadcast moments before detonation, wherein Boiling Point explicitly took credit for the foiled attack.\ -

\ - Sources within the Vir Governmental Authority have reported that a full scale recall of remote drone craft under their operation has been initiated in order to improve security measures and prevent future exploitation of government systems, statements that eerily echo those of Occulum Broadcast following emergent drone attacks earlier this year. Investigations are reportedly \"well underway\" to determine the whereabouts of those responsible for the apparent manual modification of these short-range remote craft.\ -

\ - Erkki Laukkanen, Chief of Fleet Staff for the Sif Defense Force has commended all patrol crews involved, and has promised \"swift retribution\" for the attempted bombings." -/datum/lore/codex/page/article26 - name = "11/24/62 - Boiling Point Stronghold Seized in Vir" - data = "Combined forces from the SCG Fleet and Almach Militia have today struck a powerful blow to Boiling Point terrorist operations in the Vir system. With close cooperation from the crew of NanoTrasen facilities in the region, special forces were able to infiltrate what is believed to have been a major stronghold for the radical Mercurial group, located deep in the remote Ullran Expanse region of Sif. The raid closely follows the thwarted Boiling Point attack on the Radiance Energy Chain, a major energy collection array in the system which is now known to have been masterminded from the concealed bunker complex on Sif.\ -

\ - According to a crewmember of the NLS Southern Cross - a logistical station in Sif orbit - NanoTrasen employees were asked to assist in establishing a forward operating base for the strike team forces, and as a result suffered from a minor retaliatory attack from Boiling Point drones, including a mechanized unit believed to be of Unathi origin. Six civilians suffered from treatable injuries. Lieutenant Miro Ivanou of the SCG Fleet and commander of the anti-terror operation has expressed gratitude to the crew under the \"decisive\" guidance of on-shift facility overseer, Ricardo LaCroix.\ -

\ - Military officials have reported the operation as a total success, and that \"several\" high-ranking Boiling Point organizers were killed in the raid, and that thanks to the work of allied intelligence operation teams much of Boiling Point's captured data may remain intact." -/datum/lore/codex/category/article27 - name = "11/26/62 - Valentine's Ultimatum: All Eyes On Almach!" - data = "The Almach Association must adhere to the Five Points of Human Sanctity by the 14th of February next year or face war, according to a national address from the Colonial Assembly delivered by Secretary-General Mackenzie West this morning. The Icarus Front leader was at the forefront of a resolution to allow the secessionist government to remain independent of the Solar Confederate Government under the strict condition of faithfulness to Five Points laws, passing by a wide margin. Fundamental disagreement over Five Points regulation has been at the forefront of debate with the Almach provisional government, and is cited as one of the primary reasons for the systems' illegal declaration of independence early this year.\ -

\ - The internationally broadcast speech began with the much anticipated announcement that the Boiling Point terrorist group had been effectively destroyed, with over seven hundred arrests made over the course of the weekend as a result of sensitive data captured during the special forces raid in Vir on the 24th, including numerous high ranking members of the organization. West went on to praise forces involved in the months-long counter-terror operation, before highlighting the \"legacy of \[human\] togetherness\" that allowed it to happen - in a spiel that commentators suggest \"betrays the true intention of the Valentine's Ultimatum: Reunification\".\ -

\ - Under guidelines placed into effect by West and their political allies, Almach would be required to \"\[cease\] illegal research and human modification, and destroy all materials related to existing research\" by the stated date, with compliance determined by Solar officials. In addition, the Almach Militia is to end its integration with SCG Fleet forces and withdraw its forces from SCG systems by midnight on Friday. Military relations between the Confederation and the Almach movement are to remain in a state of conditional ceasefire for the duration of the ultimatum, and current trade restrictions are to remain in place.\ -

\ - According to voting records, the measure passed nigh-unanimously, with Speaker ISA-5 and some SEO iconoclasts abstaining from the vote. ISA-5 states that, while they personally support the enforcement of the Five Points, they could not in good conscience vote in an action likely to result in an invasion of Shelf, which they regard as a sibling colony to their own Sophia. Association liason, Shelfican Ambassador, and Morpheus board member No Comment responded to the ultimatum, after some deliberation, with a word that cannot be comfortably written down.\ -

\ - Full speech transcript follows." - children = list( - /datum/lore/codex/page/valult - ) - -/datum/lore/codex/page/valult - name = "The Valentine's Ultimatum" - data = "\[West shuffles some papers and clears their throat\]\ -

\ - Thank you. Citizens of the Solar Confederation, allies, and beyond... It is a great honor, on behalf of the Colonial Assembly to announce that joint operations against Boiling Point across the galaxy have come to an end. In the fight against brazen Mercurial terrorism, the Solar Confederate Government and her allies have prevailed.\ -

\ - Over the past two days alone, I can report that over seven hundred arrests have been made, from the distant system of Nyx, to right here in Sol. I hold in my hand a list. \[West holds up a sheet of paper\] Leaders, organizers, brutes and bombers have been captured by brave, hardworking security forces throughout human space. The rest of these criminals have been scattered to the wind... But not lost! I can confidently assert that every last one will be brought to justice.\ -

\ - No more! Shall the people of this great nation have to fear the machinations of radicals! No more! Shall these twisted minds impose their perversion of humanity through violence! No more!\ -

\ - This Assembly... Nay, this nation expresses its thanks the noble members of our military who joined together to make this outcome possible. We thank the Fleet, of course for their tireless action hunting down these killers, and their heroic action over this past weekend. We thank the Sif Defense Force, without whom we could never have located the intelligence that led to these decisive victories... The Almach Militia, for their cooperation in the apprehension of these so-called \"revolutionaries\". \[West clears their throat\] And of course, we thank the local forces - the police and reserves who dealt firsthand with the chaos sewn by Boiling Point in their vicious crusade.\ -

\ - \[Mackenzie West shifts at the podium, setting down the List of Dissidents.\]\ -

\ - It is in times of relief - of unity, times like this moment - that every human heart can be filled with pride. \[West places their hand over their heart\] Since the dawn of civilization, mankind has strived above all else for peace, for the cooperation of all humanity. It is this very legacy of togetherness that has allowed us such close friendship with species further afield - the Skrell, the Tajara, and beyond. These past nine months, we have seen, each of us, with our own two eyes what mankind can achieve - together.\ -

\ - \[West removes their hand from their heart and places both flat on the podium.\]\ -

\ - Boiling Point sought to disrupt this unity. To divide us; redefine not just personhood but the very essence of humanity the only way they could: Force.\ -

\ - Humanity - the very thing that brought us together since we descended from the trees and brought us to this very moment. What could be more sacred?\ -

\ - \[West frowns, in the most pitiful attempt at emotion seen in the Assembly in at least an hour.\]\ -

\ - It is with this spirit of unity in mind that this Assembly has voted favorably upon a resolution.\ -

\ - Close to one hour ago, Naomi Harper and the leaders of the Almach Association were delivered an ultimatum:\ -
\ - The Almach Association will be allowed to exist as a government entity independent of the Solar Confederate Government going forward on one condition - full, unilateral compliance with the Five Points of Human Sanctity.\ -

\ - The deadline for this condition will be the 14th of February, 2563.\ -

\ - \[West is visibly worked up\]\ -

\ - Cessation of illegal research and modification, and the total destruction of materials related to existing research in its entirety must be completed by this date. Hostilities with the Association will remain in a state of conditional ceasefire until terms are met and Militia integration with the Fleet will come to an end effective immediately.\ - \[Mackenzie West turns directly to the news camera, and jabs a finger directly at it. They are addressing the audience now, not the Assembly.\]\ - Harper, all eyes are on you." - - - -/datum/lore/codex/page/article28 - name = "11/28/62 - \"Valentines Ultimatum\" Prompts Saint C. Secession" - data = "Just hours after reconnecting with the Exonet after voting in a new government, the colony of Saint Columbia has unilaterally seceded from SolGov and petitioned for inclusion within the Almach Association. This declaration, issued by First Secretary Luissa Tassis, is in stark contrast to pre-election promises of continued support of Sol. Admiral McMullen of the Saint Columbia Garrison remains in control of the Fleet Base, itself a large colony housing around 75000 civilian contractors and military families who were not party to the Barrueco Referendum or the new constitution.\ -

\ - Efforts to ensure electoral validity and a peaceful exchange of power have been stymied by the presence of several dozen Militia vessels currently transiting from the Crescent to the Rim. Since the declaration went through, no Almachi vessels have been seen leaving the system, instead forming around Saint Columbia in an obvious defensive posture. The legality of this formation is questionable at best, as fleet activity in divided systems like Abel's Rest and Kauq'xum has been avoided for diplomatic reasons." - -/datum/lore/codex/page/article29 - name = "11/30/62 - Adm. McMullen Declares \"Iserlohn Republic\"" - data = "Pursuant to the continuing hostility from Secretary Tassis' Saint Columbia Democratic Union and the Almach Militia, the civilians of the Saint Columbia Fleet Base have been organized into an Iserlohn Republic. Named after the largest single module of the station, the Republic has applied to the Colonial Assembly as an independent protectorate, with provisional recognition already extended by Executive of Development Zehava Collins. In a move decried as nepotistic, Admiral McMullen declared independence and installed his daughter Anya as interim President pending ratification of a constitution. SolGov Fleet protocol forbids any member of the service from accepting any political appointment and is believed to be the main reason he did not take power himself. Anya McMullen is the administrative head of the base's hydroponics array and is considered a highly respected citizen of the colony, relationship to its military administrator notwithstanding." - -/datum/lore/codex/page/article30 - name = "01/01/63 - Sif Governor Bjorn Arielsson to Retire" - data = "Aging Shadow Coalition governor Bjorn Arielsson has today confirmed rumours that he will not run for re-election in the 2563 cycle. The popular governor has represented the people of Vir in the Colonial Assembly for ten years, and supporters had long hoped that he would run for a third term. Arielsson cites advancing age and a desire to spend more time with his partner of 12 years, noted Positronic entrepreneur View Arielsson.\ -

\ - Arielsson's governorship saw increased funding towards Sif's vererable ground-based transportation networks to the benefit of some of New Rekjavik's more remote neighbors, though opponents have criticised subsidies towards artificially heated fungal farms, arguing that the faciliies \"benefit a small minority of Skrellian residents to the detriment of already fragile local ecosystems.\"\ -

\ - The Sivian Shadow Coalition has yet to announce who is to take Arielsson's place on this year's ballot." - -/datum/lore/codex/category/article31 - name = "01/13/63 - Bjorn Arielsson Issues 'Farewell Address'" - data = "Veteran politician Bjorn Arielsson made an impromptu address from his Kalmar cabin, beseeching political unity in the face of the Almach Seccession and offering his own perspective on the conflict. 'It's republicanism versus autocracy,' he said, 'and we're not the autocracy.'\ -

\ - The speech has been met with approval from many young synthetics and organics alike, with many referring to Arielsson as 'Old Man Bjorn' on social media immediately after its conclusions. Others responded less positively, with Arielsson's caustic remarks about political rival and Icarus Front Secretary-General Mackenzie West providing ample room for criticism. 'Secretary-General West... might wax poetic about how the Association is a 'betrayal of our own humanity', or some... or some crock of shit like that' says Arielsson in the first of three specific insults against the SecGen.\ -

\ - Others have criticized the speech's seemingly communist tone, with Arielsson expressing approval for the socialist Free Relan Federation and the anarchist Casini's Reach despite opposing their secessionist ideals. Still others claim that the speech offered 'nothing but empty feelings' and that it lacked specific, actionable resolutions on the growing secessionist movement in VirGov. Some have even framed the Address as a form of political maneuvering by the venerable politician, claiming that he voiced unpopular sentiments specifically to hamper the Shadow Coalition's re-election bid after well-publicized disagreements with SC party bosses.\ -

\ - The actions of Arielsson and Vir's proximity to the border have lead to increased focus on the upcoming Gubernatorial election on a nationwide level, with the Icarus Front alone projected to spend upwards of a billion thalers on publicity. Minor party candidates like the former MLM member Luisa Hannirsdottir and the Mercurial Phaedrus already have strong support in the polls, promising a fierce election that could ultimately tip power in the system in any direction.\ -

\ - A full excerpt is available below." - children = list( - /datum/lore/codex/page/bjornretirement - ) - -/datum/lore/codex/page/bjornretirement - name = "Bjorn Arielsson Farewell Address" - data = "This is, as you know, my last term in office. After this, I mean to retire-- really retire, I have a cabin in the mountains waiting for me along with a thick stack of old Bowler novels. Because this is my last term, I have the chance to do something pretty rare for a politician. I get to speak my mind.\ -

\ - I hear talk from some people-- mostly young people, people who have lived their whole adult life with me in the capital-- I hear them talking about seccession. Now, let's make it clear; I'm not going to belittle you, the way some of my colleagues would. Complaining about the government, especially one as big and as old as the Confederacy, is our gods-given right. It's never going to be perfect, and it's not half of what it could be. I have nothing against talking about it, I have nothing against turning that talk into action and actually seceding, with just cause. I've worked closely with Representative Hannirsdottir for ten years now, and while we don't agree on the issue of secession it's certainly never stopped us from cooperating.\ -

\ - But, uh, as you can probably guess, they're not talking about the old kind of seccession. They're not thinking we'll stop paying Solar taxes and strike it out alone, the way some people did during the Age of Seccession. They want to join the Association. Now, if I were Secretary-General West, I might wax poetic about how the Association is a 'betrayal of our own humanity', or some... or some crock of shit like that, if you'll pardon my language. We're not all humans here. We're Tajaran and Unathi and Skrell and Positronics and even a few Teshari. And while that 'Valentines Ultimatum' might win West a lot of points with their lackies, and with the kind of maintenance-dome troglodyte who thinks the First Accord was a mistake, it's done more for the Association's recruitment than their entire propaganda budget. It's become expedient for leaders on both sides to treat this like a fight between the Core and the Rim, or between humans and positronics, or between tradition and progressivism, but it's not any of these. It's the oldest fight in the book. It's republicanism versus autocracy, and we're not the autocracy.\ -

\ - Angessa's Pearl is a theocratic autocracy led by Angessa Martei, who owns all property on the planet down to her people's bland white jumpsuits and the gray slop they eat. This isn't propaganda. This is objective fact, and something Martei is open about. Her seccession is a means for her to get more and more naked power over her slaves, and to grow more and more of them, until she's the immortal center of an industrial empire. The people of the Pearl didn't make the choice to join the Association. The people that are building her fleet and dying for her cause had no say in the matter. The injustice, the oppression here isn't that their rights to 'self-improvement' or 'self-expression' or 'freedom of thought' were trod on-- the injustice is that SolGov, that we allowed these abuses to persist for as long as they did. The injustice is that there are still so few laws in place to prevent things like this from happening in new colonies. The injustice is that, on seeing Martei's schemes actualized, we didn't take a cold, hard look at just how that was allowed to happen.\ -

\ - I love SolGov. It's because of this love that I'm so furious at what we have allowed to happen to our people. The state of the Bowl is disgraceful. Nobody who looks to us for protection, who pays us taxes and levies, who is a member of our community, should live in fear of raider attacks. What we did to the positronics, the history we let ourselves repeat out of fear and greed, can never be forgiven, can never be repaired until Vir burns dark in our sky. The pogroms-- yes, the pogroms-- against the Unathi, against refugees fleeing their own religious autocracy, are a disgrace to everything we stand for. But of all the nations in the galaxy, with perhaps the exception of Casini's Reach, we are the only one founded for the good of the ruled, rather than the rulers. We are the only real commonwealth in known space. And that's why we need to strive for better. We are a burning beacon of liberty in a galaxy where nigh eighty percent of the population has no voice in the government. Every ounce of power we cede to the party bosses, or the corporations, or tinpot dictators like Angessa Martei, is a dimming, a flickering of that torch. \ -

\ - And this brings us back to the Association, and to those who sympathize with it. I do, too. I spent my entire career on sapient rights lobbying, on supporting the anti-malfesance efforts of my colleagues. For a disaffected positronic, for any friend to the positronic people, for those who have had their lives taken by corporations-- the Association seems like a miracle. And maybe, for those Mercurials, the ideas it's founded upon shine even brighter than our democracy. But I look at the Association, really look, and I see Angessa Martei lying in the center, spinning a great big web. I see Naomi Harper, lying through her teeth better than Mackenzie West ever could. Two of the biggest population bases in the Association, the two nations that started the whole Gray Hour, are autocracies. Once again, the ferver of the revolution is subsumed by the oligarchs who want to stay in power. I doubt, to the poor laborer on the Pearl, the word 'Mecurialism' means much. I doubt that once the shock of the seccession wears off, that the young Promethean soldier will find themselves in a better place in Harper's junta than they will here in Vir.\ I doubt that in ten years' time the miners, pioneers, and traders who seized their means of production will find the Association Militia a kinder master than Xion, Nanotrasen, or Major Bill's. \ -

\ - This is far from a blanket condemnation of every government in the Association. President Fisher of the FRF-- I consider her a friend. When she gave her speech this March about strengthening and guiding the Almachi Revolution, I thought long and hard about whether we might do the same. I certainly commend the effort. But the structure of the Association was penned by the same autocrats that, to do her words justice, Fisher will have to overthrow. There's no High Court, no checks or balances. The Association is an alliance penned as though deliberately ignoring two thousand years of political science. By striving to counter-balance these autocrats, Fisher plays into their hands. She commits her own fleet, weakens her own defenses against enemies closer to home, in the service of Martei's ambitions. \ -

\ - I don't see this whole affair as a chance to spread the galactic anti-corporate revolution the way President Fisher does, of course. I make no secret of my stance on Trans-Stellars, but I also know that we're better off with Sol than without. The 'Silent Collapse' was two hundred years ago, but we still bear the scars from it. When the Scandinavian Union pulled out support for the Sivian colonization project, SolGov saved us. I do mean saved us, sure as if they'd fished us out of a life pod. There were no factories, no steel, no concrete on Sif until the Engineering Corps built Radiance and New Reykjavik. Corporations and regional governments cowered from the Karan pirates, until the Marines chased them out. Whether Sivian or Karan, you owe the roof over your head to the Sol Confederate Government. With that great debt in mind, how dare we turn our backs on the Bowl, or Abel's Rest, or Nyx, when they need us! How dare we let oligarchs prey on the weak! How dare we choose not to act when we have, by virtue of our votes in the Assembly and our voice within the halls of public debate, the means to share our peace and prosperity with the rest of our people!\ -

\ - This is what I mean by SolGov being the only true republic, the only state founded for the common good. The 'human spirit' West croons on about isn't our industriousness, or our skill at arms. If humanity-- if this Terran culture is commendable for anything, it is that we assist our fellows. We take in Casteless Skrell, Unbound Unathi, republican Tajaran. We pass around the hat when someone's house burns down. We help our friends, our neighbors, and even strangers. The fact that Martei and Harper are perverting this impulse, padding their juntas with the air of legitimacy to inspire honest people to ride to their defense, is the reason their state is unconscionable, the reason it was was born flawed, the reason we cannot suffer it to continue, much less help it on its way.\ -

\ - Now, I'm sure you've noticed by now, that I haven't said much more than three words about technoprogressivism, or transtech, or whatever the word du jour is. Frankly, that's on purpose. 'Transtech' has never once been about technology. The Icarus Front-- the old one, that united us and took us to the stars, not the new one we spend forty hours a week arguing with about healthcare-- The Icarus Front was a popular revolution, you know. Hel, they were Marxists. It was a world where the kind of lack of accountability, the entrenched oligarchy and geographical class divide that we're dealing with now was spiraling out of control. In the old United States, the rich and powerful got the technology to grow loyal subjects in tubes, to make drone intelligences smarter in some ways than a human could ever be, to-- well, to do what Angessa Martei's done, only with no SolGov to stop her. Meanwhile, the 'little people' in the Middle East, Southeast Asia, and other 'forgotten' parts of the world were left behind, hopelessly. I don't mean to downplay the importance of the Gray Tide, but if you look at historical accounts from that era, the thing that really united the Front was the knowledge that, if they didn't act immediately, they'd be seen as 'externalities' by immortal superintelligent businesspeople and politicians. The take-away from the Gray Tide should never have been that 'nanotechnology is dangerous'-- it should have been 'nobody should be able to destroy an entire city without facing consequences.'\ -

\ - That was more of a history lesson than I had meant, but it's important to look at these sorts of things in context. I know transtech and the Five Points have been used as an excuse for pejudice against Skrell, Mercurials, positronics, the FTU, communism, the disabled, and most recently Prometheans. But all the Five Points are supposed to mean - what they would say if the people who had written them were alive today, is that everyone deserves an equal playing field. When the ruling class is smarter, stronger, and longer lived than the classes they rule over-- well, I could wax poetic again, or I could just point you towards the Hegemony and their 'clients'. The Hegemony is bad enough. Let's not give Angessa Martei a chance to outdo them." - -/datum/lore/codex/page/article32 - name = "01/25/63 - Moravec Nephew Announces Vir Governor Candidacy" - data = "The Sol Economic Organization has announced that Calvert Moravec, nephew of NanoTrasen CEO Albary Moravec will be running under their ticket in the upcoming Vir gubernatorial elections. Calvert has stated that he will run on a pro-business platform, and has chosen Vir to do so due to the 'Unique beauty and economic prospects of an interstellar crossroads such as Vir'.\ -

\ - Despite being a lifelong resident of Alpha Centauri, Moravec was recently approved for Vir citizenship, making him eligible for local candidacy and has reportedly moved into a luxurious New Reykjavik penthouse. Perhaps best known for his soaring stock market investment success over the previous few years, Calvert's first foray into politics is not wholly unexpected as the Moravec family has long leveraged their wealth in international affairs, though successful election would mark their first sitting member of the Colonial Assembly. Fellow SEO candidate Councillor Hal Wekstrom has expressed his full support for Moravec.\ -

\ - Three candidates will be elected as representatives to the Colonial Assembly later this year, with the most popular also attaining the position of system governor." - -/datum/lore/codex/page/article33 - name = "01/27/63 - Vani Jee Orbital Tour Cut Short" - data = "Icarus Front Representative Candidate Vani Jee has delayed the remainder of her campaign tour of orbital colonies and outposts around the Vir system after an alleged altercation with NanoTrasen security.\ - Candidate Jee had been visiting the NLS Southern Cross, a NanoTrasen station in Sif orbit to receive a corporate tour and meet with voters, when her concluding question and answer session was interrupted by hecklers, leading to the event being cut short. Jee alleges that footage of the event was seized by NanoTrasen corporate security and has accused the trans-stellar corporation of the intentional intimidation of Icarus Front and Shadow Coalition candidates in what she describes as 'a clear display of corruption in favour of company-favourite Calvert Moravec', though she has praised the individual employees of the Cross for their hospitality and thought-provoking questions.\ -

\ - Vani Jee is running on a platform of free access to education, Sivian self-determination, and isolationist foreign policy. She has refused to make any strong statements regarding hot-button issues such as the Five Points.\ -

\ - She intends to resume her scheduled tour after a three day break." - -/datum/lore/codex/page/article34 - name = "02/05/63 - Angessa Martei to Take Control of Eponymous Colony" - data = "Coming out of retirement and displacing the nameless Exalt of the Starlit Path, religious demagogue Angessa Martei has returned to the throne of the colony that bears her name. \ -

\ - 'I had retired because of senescence brought on by my old age, high-stress lifestyle, and multiple resurrective clonings. As you may know, I recently had a procedure that renders these difficulties obsolete. Hereafter I will continue to control the automated facilities of the Pearl and claim responsibility for the collective action of my followers. Those who oppose my decision may oppose all they want. Feelings do not move mountains. I do. We shall seize the stars in our own hands. May you become who you wish to be, and grind all obstacles to dust, as I have done.'\ -

\ - Purportedly, this address was met with a standing ovation from the population of Angessa's Pearl. In a separate dispatch, Martei stated her intention to tour SolGov as a foreign dignitary protected by the Respect for Diplomats Act." - -/datum/lore/codex/page/article35 - name = "02/07/63 - Vir Gubernatorial Candidate Barred from Breakfast TV" - data = "Infamously hot-headed Shadow Coalition candidate Phaedrus has reportedly been blacklisted from future appearances on morning television by several major networks. The ban comes after an advertised chat segment between Phaedrus and hosts of the West Sif Wakeup breakfast programme had to be pulled from broadcast after the candidate 'Flew into a expletive-laden mercurial rant' at the expense of rival candidate Mehmet Sao of the Icarus Front.\ -

\ - Recordings of the outburst quickly made their way onto social media, sparking outrage from opponents and network executives alike, prompting Occulum Media to issue a rare blacklist from major media outlets, restricting Phaedrus to 'appearances on alternative news sources' owned by the company.\ -

\ - Phaedrus, a long-time Vir Mercurial Progress Party member running for a major party for the first time, is said to have taken issue with candidate Sao's 'Blatant anti-synthetic' policies, though he did not use the word 'policies'." - -/datum/lore/codex/page/article36 - name = "02/09/63 - SEO Candidate Embarks on Wilderness Tour" - data = "In an effort to stir up support for his promotion of natural resource extraction industries, Sol Economic Organization candidate Mason Keldow has embarked on an unorthodox tour of resource-rich sites across central Sif. Keldow has described the tour as an 'Old fashioned expedition', invoking images of hardy prospectors of centuries past, and intends to make the journey entirely by ground with only a small party of 'Adventurous outdoorspeople' to support his trek.\ -

\ - Critics of the plan have pointed out that the earliest surveys of Sif were largely performed by aerial drones, and the idea of ground-based survey teams is 'Frankly anachronistic'. Rival Shadow Coalition candidate Selma Jorg - a staunch planetary environmentalist - has described the tour as 'Irresponsible and insane'.\ -

\ - The candidate intends to visit both unexploited sites and current corporate extraction facilities in order to 'Better understand the folks helping dig out Sif's hidden wealth' over the coming two weeks." - -/datum/lore/codex/page/article37 - name = "02/09/63 - Zaddat Colony 'Bright' To Enter Vir" - data = "After several months of talks with Nanotrasen and other corporations in the system, the Colony Bright is to begin orbiting Sif and hardsuited Zaddat are to enter the Virite workforce. Executives in Nanotrasen Vir cite the reduction of their drone-automated and positronic workforce as a result of the Gray Hour as cause for them to reverse their previous decision against allowing the migrants into the system. Icarus officials within VGA are concerned that, if other Colonies are to follow the Bright, the native industry of Sif may be disrupted or suborned by Zaddat and Hegemony interests, and have made it clear that the Bright's presence in the system is highly conditional." - -/datum/lore/codex/category/article38 - name = "02/11/63 - Mason Keldow in Ullran Expanse Close Call" - data = "Sol Economic Organization candidate Mason Keldow was rushed to nearby corporate medical facilities after a death-defying encounter with local wildlife in the Ullran Expanse this morning. The candidate had been planning to visit the nearby NanoTrasen mining facilities as part of his much publicized 'Wilderness Tour' when he and a local guide were set upon by the notoriously savage Sivian Savik. The animal was killed in the encounter, but not before Mr. Keldow suffered life-threatening injuries and had to be recovered by crew from the NLS Southern Cross, the closest facility on hand.\ -

\ - Following emergency surgery, Keldow was happy to provide news sources with a 'Good-natured' interview, in which he highlighted the dangers faced by rural workers on Sif and his plans to tackle them, as well as slamming rival Shadow Coalition candidate Selma Jorg for lacking tangible plans for the future.\ -

\ - Candidate Keldow is reported to have made a miraculous recovery, and is 'in good spirits'. Aides state that he is unlikely to suffer any long term effects from the injuries, in part thanks for the skilful work of NanoTrasen's Dr. Fuerte.\ -

\ - A full transcript of the interview follows:" - children = list( - /datum/lore/codex/page/keldowinterview - ) - -/datum/lore/codex/page/keldowinterview - name = "Mason Keldow Interview Transcript" - data = "Blip asks, 'Subject Keldow. Pleasantries first. How do you feel after your ordeal on the planet's surface?'\ -

\ - Mason Keldow says, 'Ah that? You know I'd love to downplay it and pretend that it was just a walk in the park... But NT's medical staff probably will tell you otherwise, so there's no reason to hide it; things went pretty far south.'\ -

\ - Mason Keldow says, 'But that's how it goes, working on the surface of Sif isn't pleasant at times.'\ -

\ - Blip asks, 'Candidate Keldow, you have placed yourself quite firmly in the boots of the local TSC's explorer contingents today. Do you feel you will be attempting to live the life of any other labour intensive roles in the near future?'\ -

\ - Mason Keldow says, 'Blip, Let me tell you I do try to get a taste for a lot of the work done by these people... But admittedly this isn't the job I do every day. These are hard working fellows who do there damnedest day in and day out... I could try spending a week just working the mines, But-'\ -

\ - Mason Keldow says, 'As I was saying.. Many of the folks, Miners, Explorers, The work in and around the Ullran Expanse. They work in the mountains, Out in the fields.. It's a dangerous place and frankly its not a place average people wanna go too.'\ -

\ - Mason Keldow says, 'They told me on the way here. 'Keldow you're an idiot''\ -

\ - Mason Keldow says, 'Hell, Even Basman over here was wondering why I didn't ask for a detail.'\ -

\ - Mason Keldow says, 'So it's not a safe route... But when's the last time any of the other candidates actually came down to these outer stretches and tried earning their sweat.'\ -

\ - Blip asks, 'You indeed seem to be attempting to gain a unique, and firm understanding of the daily struggles of the working populace. How do you intend to translate this newfound knowledge into policy and direction if you take the Governorship in Vir?'\ -

\ - Mason Keldow says, 'You see, getting a grasp of the struggle is only step one, I paint myself as an every-man but that doesn't mean core issues aren't the problem either; Vir's economics, The small pay that sometimes offered. There is a lot to be tapped into.'\ -

\ - Mason Keldow says, 'Let's take for instance the spiders I've been hearing about.'\ -

\ - Mason Keldow says, 'People working in orbit say 'Don't go to the surface, Spiders are down there.''\ -

\ - Mason Keldow says, 'And apparently there was a big ol' purple one sitting right by a camp we had set up. A giant mother who'd - if I hadn't met that lovely mass of fur and ice instead - would have probably said its “hello” in the worst possible way.'\ -

\ - Mason Keldow says, 'They are a species that prevents anyone from actually working or otherwise making use of all that land. If I were in office, I'd make an effort to clear out the dangerous species that surround the outer regions of Sif – relocate them if possible - and use that territory for something productive.'\ -

\ - Mason Keldow says, 'New forms of Transit, new buildings, new jobs.'\ -

\ - Blip asks, 'Such implementation of infrastructure and security is not a cheap measure. How do you intend to find funds for such an endeavour?'\ -

\ - Mason Keldow says, 'Now obviously Vir is in a very interesting position, But thankfully it's in a wonderful position where business and partnerships are more than happy to come in and assist. The bottom line would make sure the average Taxpayer doesn't feel a dent, only the dividends.'\ -

\ - Mason Keldow says, 'If we break this down into economic plans, using new yet relatively safe tools being put out by Hepheastus, you could safely clear swaths of territory in the Expanse.'\ -

\ - Blip says, 'Thank you for your insight into your economic policies and plans. As a final question;'\ -

\ - Blip asks, 'A puff-piece question. Do you have anything positive to say about your rivals in the political race?'\ -

\ - Mason Keldow says, 'Ah yes, yes well... As for any candidate they need to show they're worth. Not simply as a politician but as a person who believes what they will do for for the betterment of Sif, And Vir as a whole.'\ -

\ - Mason Keldow says, 'Let's take a look Ms. Jorg.'\ -

\ - Mason Keldow says, 'She has LONG called me a Corporate sell-out, Saying I would poison the planet and other awful mudslinging.'\ -

\ - Mason Keldow says, 'She loves to claim she's here for the better of the misrepresented.'\ -

\ - Mason Keldow says, 'But when is the last time she's talked to a Tajaran and told them how they will help put food on the table, and money into their pockets.'\ -

\ - Mason Keldow says, 'When has she came and told the Unathi Exile, Your worth more than what the Hegemony is trying to convince you you're worth.'\ -

\ - Mason Keldow says, 'There's blood in the grass out there showing what I'm willing to do to make Sif and Vir a better more prosperous system. I wanna see what the other Candidates will do.'\ -

\ - Blip pings!\ -

\ - Blip says, 'Thank you for your time, Candidate Keldow. Unit looks forward to seeing where this race ends, and wishes Candidate the best of luck in his endeavours.'\ -

\ - Mason Keldow says, 'It's been a pleasure Blip.'" - -/datum/lore/codex/page/article39 - name = "02/12/63 - VirGov Launches Election Website" - data = "The Vir Governmental Authority has launched this year's election information exonet site, unusually several months after campaigning began. The government election agency states that the delay was caused by an usually long process of finalizing candidates this cycle, and did not want to confuse voters with incorrect or outdated information.\ -

\ - The newly updated site includes information on candidates and political parties, and is planned to include information on local voting rights at a future date. It can be found at:\ -

\ - your-choice-vir.virgov.xo.vr\ -

\ - (( https://your-choice-vir.weebly.com/ ))" - -/datum/lore/codex/page/article40 - name = "02/14/63 - Ultimatum Unmet: War With Almach!" - data = "The Solar Confederate Government has resumed a state of war against the secessionist Almach Association, after 4 months of tense ceasefire. The re-declaration comes after the Association failed to meet requirements set forth by the Colonial Assembly last November, which called for the cessation and destruction of all research that did not meet standards established by the Five Points of Human Sanctity.\ -

\ - The past few weeks have been marked by an increasing buildup of military forces on the Almach border as it became apparent that Almach had no intention of meeting Sol's demands. At 9am this morning, the deadline was met and initial reports from the frontline suggest relatively little action besides the destruction of pre-existing Almach scout drones that had been placed on the border several months prior. The exact plans of the fleet going forward have not been made public, but civilian traffic to and from the Saint Columbia system has been entirely suspended.\ -

\ - How this development will influence the coming Vir election remains to be seen, though SEO candidate Mason Keldow has reportedly ended his planetary tour 10 days earlier than planned due to the tense political situation." - -/datum/lore/codex/page/article41 - name = "02/22/63 - Militia Retreats: First Solar Victory" - data = "After a week of tense stand-offs and increasingly frequent skirmishes, the Association Militia has begun moving from their position around Saint Columbia further into the Almach Rim. The inciting incident for this shift seems to have been the first use of the MJOLNIR system, which instantly destroyed a large Almachi warship from half a system away. This demonstration was met with a standing ovation from much of Iserlohn, and Militia forces disengaged almost immediately. Admiral McMullen is unwilling to elaborate on pursuit or invasion plans at this moment, but 'hope(s) the MJOLNIR will continue to be a valuable asset for national defense.'" - -/datum/lore/codex/page/article42 - name = "03/04/63 - Savik Slams Local Chat Host" - data = "Television sweetheart Sally, host of Chat With Sally has come under harsh criticism from independent Vir gubernatorial candidate Yole Savik after his 'humiliating' appearance on the show yesterday morning alongside Sol Economic Organization candidate Calvert Moravec. Savik - who is campaigning for Vir independence from both the SCG and corporate interests - alleges that the show, which has run for 13 years on select networks, is 'little more than a propaganda piece for high powered executives.' and that his appearance had been part of a 'smear campaign' against non-SEO candidates.\ -

\ - NanoTrasen, who have openly sponsored Sally since her inception deny these accusations. Jan Bhatt of the NT marketing division stated 'Chat With Sally has always been intended as light morning entertainment, and Sally a personality we can all relate to. The fact that Mr. Savik was unable to have a sense of humour about the whole thing and took the show as an opportunity to bloviate about dry politics is not an indictment of Sally, nor the corporation but rather a simple misunderstanding of the purpose of the segment. We had hoped Mr. Savik's appearance would help dismiss any claims of political bias in our programming and hope to host more civil candidates in the future.'\ -

\ - Catch Chat With Sally weekly at 5am SST." - -/datum/lore/codex/page/article43 - name = "03/06/63 - Dark Triangle Goes Dark!" - data = "As of 0352 this morning, New Reykjavik time, SolGov officials confirmed that all communications coming from the so-called 'Dark Triangle' had ceased. The Dark Triangle is a disputed region of space home to the independent world Natuna, which has maintained a more or less neutral relationship with SolGov for a little more than a decade.\ -

\ - The announcement gives no cause for the communications blackout, though sources with inside knowledge claim that it was completely unforeseen. Some speculate that Natuna, who became an 'observer nation' of the Almach Association last November, is making a political statement, though experts in the telecommunications field are uncertain as to how such a complete blackout is possible.\ -

\ - Dr. Ina Lai from the Kara Interstellar Observatory states, 'we've never seen anything like this outside of the (Skrellian) Far Kingdoms, and frankly we're at a loss for who might be responsible,' adding that 'the tachyon signatures from the whole region are masked, even those from stellar phenomena or normal bluespace travel.' Independent explorers from the FTU have set out to the region in an attempt to re-establish communication with Natuna and smaller human settlements nearby." - -/datum/lore/codex/page/article44 - name = "03/08/63 - Dark Triangle Overrun By Hegemony" - data = "FTU explorers have re-established exonet communications with the ruling bodies of Natuna and the Dark Triangle. Unfortunately, they also discovered that Natuna's previously autonomous townships have been subsumed into the Moghes Hegemony. \ -

\ - Bluespace-lensed telescopes throughout SolGov, including the Vir-based Kara Interstellar Observatory, can once again pick up on tachyon signatures in the region. Traffic has been described as 'lower than usual' and no significant fleet assets are believed to be present in the region, though fixed-placement Hegemony installations now litter the Triangle's major star systems. Systems with significant Hegemony presence include Natuna and Ukupanipo, home to the primitive Uehshad species. Some have speculated that the presence of the Uehshad is the reason for the unexpected Hegemony takeover, though Icarus Front General Secretary Mackenzie West was quick to decry the move as 'an obvious imperial land-grab.'\ -

\ - Hegemony diplomats on Luna and elsewhere have been quick to justify their actions. 'The Dark Triangle has been home to various criminal elements for several centuries,' says Aksere Eko Azaris, a major Hegemony diplomat since the early post-war years. 'Neither the Skrell nor the Solar Confederacy have proven any willingness to bring stability to the region. Local governments such as Natuna have actively encouraged piracy, smuggling, and other acts of banditry, instead of making any moves to legitimize themselves. This instability proved detrimental to the health and wellbeing of all living within striking distance of the pirates of Ue-Orsi, and it was deemed unfortunate, but necessary, that we step in and provide the guiding hand by which this region might be brought back into the fold of civilization, as is our duty as sapients.'\ -

\ - In a statement closer to home,Commander Iheraer Saelho of the Zaddat Escort Fleet has assured VirGov that 'we only took action to protect the innocents of the Dark Triangle and of neighboring systems'.He asserts that Hegemony rule will ultimately benefit all races of people within the Triangle, and promises that, 'the people of Vir, of Oasis, of the Golden Crescent writ large, have nothing to fear from our clients the Zaddat, or from the Hegemony vessels assigned to their protection.'\ -

\ - Only time will tell if Saelho's promised peace and stability will manifest in truth. \ -

\ - This newfound militancy of the Hegemony is likely to become a major campaign issue in the upcoming Vir elections, alongside involvement in the war with the Almach Association and traditionally Virite issues of corporate authority, minority-friendly infrastructure, and taxation." - -/datum/lore/codex/page/article45 - name = "03/12/63 - Ue-Orsi Escapes Hegemony Triangle" - data = "The lawless 'Ue-Orsi' flotilla, home to hundreds of thousands of outcast Skrellian pirates, has departed from the Hegemony-controlled Dark Triangle after what appears to be a brief battle with several Unathi warships. The action damaged several important Orsian ships, including their massive and venerable solar array 'Suqot-Thoo'm', a development which is likely to increase the pirates' aggression in the coming months as they search for additional power sources. It is unclear exactly where the flotilla has fled, though best guesses indicate that they are presently in Skrell space, likely near the lightly-patrolled Xe'Teq system. The Moghes Hegemony is in negotiations with several Skrellian states to arrange for military action against their escaped subjects, but little headway has been made thus far.\ -

\ - This revelation has added more fuel to already heated Assembly arguments about SolGov response to the Unathi takeover. 'This is a prelude to invasion, nothing more and nothing less,' says New Seoul Representative Collin So-Yung, a noted Iconoclast. 'We must make it absolutely clear to the Hegemony that this is a threat we will not bow to, even in our present state of internal weakness. I suggest we pursue a fair peace with the Association, one where we can keep them as allies against this sort of encroachment instead of shattering our fleets during such a pivotal moment.'\ -

\ - Others took a more nuanced approach, including VGA Governor Bjorn Arielsson. 'What we have here is our punishment for how badly we've treated the people of the Triangle. I don't really see why we should have let the tired old racism of some Qerr-Katish oligarchs stop us from offering aid to their tired and huddled masses, such as it is. And because we have had a full century of ignoring their plight, they were defenceless to resist the Hegemony. I say we fling the doors open, let (the Orsians) settle some rock here, and show the unaligned powers of the galaxy that the Hegemony's way isn't the only way.'\ -

\ - Even more conciliatory was Speaker ISA-5, who Arielsson blames for mistreatment of the Ue-Katish. 'Our policy has always been that our defence budget cannot adequately defend the Dark Triangle from internal piracy, that Ue-Orsi is a criminal organization using their refugee status as a shield, and that we cannot lift the blockade of Natuna until they stop hosting these criminals and transition to a more sustainable economy. If Moghes has the power and the inclination to administer the Triangle, I see no reason why this state of affairs isn't better than the alternatives.'" - -/datum/lore/codex/page/article46 - name = "03/26/63 - Almach Routed from Saint Columbia" - data = "The Saint Columbia system has been declared free of Association forces following a renewed SCG offensive in the region. Admiral McMullen of the Saint Columbia garrison - who has reportedly reclaimed his post at the system's naval base despite the facility suffering moderate damage in this week's fighting - says that the last secessionist vessels were driven from the system just over 24 hours ago, and remaining pockets of resistance have been quick to lay down their arms. At least 20 enemy vessels - mostly converted civilian ships - have been confirmed disabled or destroyed in-system, thanks in no small part to the deployment of the state-of-the-art MJOLNIR weapons system.\ -

\ - This more aggressive approach to the Almach front comes on the tail of aggressive Hegemony deployments in the Dark Triangle, which SolGov has conceded was 'Immediately threatening, but after some deliberation, has brought some form of policing to a lawless region.'.\ -

\ - Despite assurances, this recent action would appear to many to be an effort to quash the Association threat and return fleet forces to the now extended Hegemony border, and some critics of the Almach War have called for a second ceasefire 'In order to focus on the real threat to mankind.'" - -/datum/lore/codex/page/article47 - name = "04/28/63 - Representative Hainirsdottir Reaffirms Pro-Vey Medical Manifesto" - data = "Incumbent Vir Representative Lusia Hainirsdottir has restated her dedication to advanced medical research at a public appearance at a Vey Medical facility in downtown New Reykjavik. Vey Medical has come under some criticism locally in the past year due to its 'accelerated' sapient trials, which Representative Hainirsdottir has strongly endorsed in her current term of office.\ -

\ - In her statement to staff at the New Reykjavik facility, Lusia promised that under her governorship, the company would not be reprimanded for the deadly Holburn's Disease outbreak in rural Sif this past June which claimed fifteen lives, and in which Vey-Med's involvement was only confirmed this week - as the outbreak 'directly lead' to the development of a new life-saving inoculation which has seen success galaxy-wide.\ -

\ - Hainirsdottir has long advocated for the promotion of scientific achievements that have taken place in, and undertaken by the people of Vir." - -/datum/lore/codex/page/article48 - name = "05/06/63 - Isak Spar Withdraws from Vir Election" - data = "Independent gubernatorial candidate Isak Spar has withdrawn his name from the running following a 'Public Relations disaster' aboard an orbital NanoTrasen logistics facility. According to witnesses, Spar acted belligerently towards staff members and engaged in vandalism and assault with a deadly weapon during his scheduled visit to the station, which the candidate had opted to undertake alone due to the temporary illness of his campaign manager.\ -

\ - In a statement just hours after the alleged incident, Isak announced that he would no longer be pursuing Vir Governorship, due to 'The unexpected stresses of a political career.' before plugging his upcoming album, C*** End Savage Turbo Death A** Destruction. The NanoTrasen corporation has decided not to press charges due to Mr. Spar 'Suffering the consequences on a far more significant level than a mere fine.' but will not be inviting Spar back for future visitation.\ -

\ - Spar's label, Skull Wreck Music has declined to comment at this time but has agreed to pay damages to the victims on behalf of the self-described 'post-pseudo electro-death superstar'." - -/datum/lore/codex/page/article49 - name = "05/15/63 - Solar Fleet Launches Offensive Against Almach" - data = "The first vessels of an SCG Fleet invasion force arrived in the Relan system this morning after a month-long intelligence operation to establish the Almach Association's most vulnerable positions, according to an announcement by Admiral McMullen just hours ago. Relan, which has long been fragmented between the neutral Republic of Taron and the once insurrectory Free Relan Federation - who now control the majority of the system and declared allegiance with Almach early in the crisis - is expected to fall to Confederate forces within 'a matter of weeks' due to its fractious political situation, and relative insignificance to Almach interests.\ -

\ - According to McMullen, the system's most populous habitat, the Carter Interstellar Spaceport is already under blockade and local resistance has thus far been minimal. The capture of Relan is expected to provide our forces with a major foothold in Almach territory and further advances are expected to be 'trivial', bypassing the Association's defensive positions in Angessa's Pearl.\ -

\ - The offensive comes weeks after sizable portions of the Fleet were publicly withdrawn from the frontline in order to reinforce the extended border with the Hegemony following their annexation of the Dark Triangle, and is a clear sign that - despite reduced numbers - Fleet command remains confident of Solar victory against the Mercurial rogue state." - -/datum/lore/codex/page/article50 - name = "05/19/63 - 'Drone Operated' Shelfican Ships Storm Sol Siege" - data = "Blockading Solar vessels in the Relan system came under fire today from automated craft originating from the Shelf fleet. The flotilla of drones, described by one survivor as a 'swarm', launched electromagnetic pulse and so-called 'hatch buster' precision missiles against three SCG Defense vessels, inflicting systems damage, and casualties 'in the hundreds' with at least eight service people already confirmed killed in action. The drones are reported to have withdrawn after 'only a few minutes of protracted fire from both sides.'\ -

\ - The Shelf telops fleet, which was spotted by Fleet forces but not identified as an immediate threat, entered the system early this morning and were understood to be acting as observers to the ongoing battle for the Relan system due to Shelf's official stance of non-aggression -- despite aligning itself with the Association. Shelf has reportedly been unable to be reached for comment on their actions, and their alleged neutrality in matters of war has been seriously called into question by many in the Colonial Assembly.\ -

\ - The SCG-D Krishna and SCG-D Mogwai of the SCG fleet, and the assisting Oasis logistical vessel, the OG-L Cloud Nine have been withdrawn to an unspecified location for immediate medical assistance and repairs." - -/datum/lore/codex/page/article51 - name = "05/20/63 - Fleet Withdraws - Sol On The Back Foot?" - data = "The Solar Colonial Assembly has confirmed that the Solar Fleet has withdrawn from the contested Relan system due to 'unexpected resistance' from Shelf tele-operated forces. This comes less than 24 hours after three Solar vessels were seriously damaged in an 'ambush' by a large number of Almach-aligned military drones. According to the Fleet, they were unprepared for any significant ship-to-ship combat in the system and will be consolidating their forces. 'This is not a defeat', according to Captain Silvain Astier of the SCG-R Hanoi, speaking unofficially to Occulum News sources 'This is merely a tactical withdrawal in order to reconvene and reassess our plans to restore order to the Almach Rim.'\ -

\ - A spokesperson for Shelf was quick to contact Fleet forces following the withdrawal with a formal apology for yesterday's incident, describing the previous day's attack as 'A terrible mistake.', blaming 'a miscommunication between our people in telops and the trigger-happy robots', though the veracity of their claims cannot be confirmed." - -/datum/lore/codex/page/article52 - name = "05/21/63 - NanoTrasen Station to Host Major Election Debate" - data = "As the Vir Gubernatorial elections approach, and with several high-profile debates lined up between the leading candidates in the polls, the NanoTrasen corporation is set to host its very own televised event live from one of its major logistical stations in Vir. The NLS Southern Cross, primarily a traffic control outpost managing shipping in Sif orbit, has been selected by the company to host the debate - funded in full by the corporation - due to a series of minor political scandals that have taken place on the platform, and the suitability of unused space onboard.\ -

\ - Early in the election cycle, NanoTrasen came under fire for its alleged 'manhandling' of Icarus Front candidate Vani Jee, and the confiscation of to-be-televised recordings taken by a party drone. While the company apologised for the incident shortly thereafter, the corporation hopes to mend ties with the potential future representatives by showing that they are capable of hosting civil discourse. More recently, the NLS Southern Cross played host to the 'breakdown' of disgraced former candidate Isak Spar - an episode which was not addressed in NanoTrasen's official statement on the planned debate event." - -/datum/lore/codex/page/article53 - name = "05/26/63 - SEO Candidate Advocates Murder On Live TV!" - data = "Sol Economic Organization candidate Freya Singh has been caught live on camera admitting that she would like to throw an innocent individual out of an airlock for a minor slight. During this afternoon's debate hosted aboard the NLS Southern Cross. Singh is quoted as having said that the event was 'the silliest concept for a debate I've encountered yet, and whoever came up with it should get a promotion, and then be fired out of an airlock.', a clear incitement of violence against Oculum Broadcast staff.\ -

\ - Magnus Dugal, 48 works for the Oculum Broadcast corporation and is credited with creating the concept for today's debate, the highest rated for this cycle so far. The father of three, who enjoys hoverboarding in his free time, says that he feels 'Threatened' by Singh's comments, and hopes that she will, 'at the bare minimum', issue an official apology to the company and himself.\ -

\ - Candidate Freya Singh, a career investment banker, spent much of today's debate advocating for reduced safety regulations and the apparent overturning of the Five Points, raising eyebrows across the system. Singh's office claims that her statements were 'a joke', but we do not feel that this is a laughing matter.\ -

\ - In related news, Shadow Coalition candidate Phaedrus remains under a profanity filter 'house arrest' for the remainder of the election." - -/datum/lore/codex/page/article54 - name = "06/28/63 - Vir Finalizes Dates for Election Voting" - data = "The Vir Governmental Authority has confirmed that voting for Vir's governorship and Colonial Assembly seats will take place on the 29th and 30th of June, with an additional voting period set for Wednesday the 3rd of July to allow for out-of-system and full-time weekend employees to cast their votes. No exit poll information will be released until the final votes have been cast, and final results are expected to be announced within another week.\ -

\ - According to a Oculum poll, Lusia Hainirsdottir is expected to comfortably take a seat, though the certainty of her governor position is not hard set. Candidates Sao, Singh and Jorg are trailing not far behind, but will all have to make good showings this weekend if they hope for electoral success. In an unexpected surge among minority species, the Shadow Coalition's Tajaran candidate Kurah Zarshir is leading the polls in certain outlying and orbital communities.\ -

\ - Not sure how to vote, if you can vote, or who to vote for? Check out the official election website at your-choice-vir.virgov.xo.vr" - -/datum/lore/codex/page/article55 - name = "06/29/63 - Morpheus Cyberkinetics To Split Assets" - data = "The Morpheus Cyberkenetics Corporation is to split into two distinct entities operating under a single board of trustees, in light of their Almach branch's apparent involvement in the ongoing war after last month's 'unintentional' corporate drone strikes. Citing 'Severe communications disruptions' between its operations and assets on either side of the cordon since it was put in place last year, the SolGov-side corporation is to become 'Morpheus Sol', retaining most assets and current corporate headquarters, and its Almach counterpart 'Morpheus Shelf', which is to be based out of the administration station MAS Sophia Jr., located in the El system.'\ -

\ - The principle victim of the Aetolian coup, Nanotrasen, has seen most of their considerable Almachi investment nationalized by the secessionist government, as has Xion and other major Almachi organizations. Most surviving corporate exclaves have been effectively written off by their parent company for the duration of the conflict, due to the severe difficulties effectively conducting trade across the militarized border. Before today, the sole exception was Morpheus, whose involvement in the secession prevented any seizing of their assets. It seems, however, that even the sardonic positronic corporation is not immune to the difficulties of doing business in the Almach Rim region.\ -

\ - Member of the Board Chock Full of Sardines introduced the proposal by saying, 'Our goal here is not being shot. Together with leading economic scientists, we've devised a scheme that will allow us to be shot for illegal smuggling almost ninety percent less often.' They defended the confusing and offensive choice of name in 'Sophia Jr.', seemingly intended as an insult to longstanding rival Sophia, by claiming, 'It's absolutely hilarious.'" - -/datum/lore/codex/page/article56 - name = "06/30/63 - Almach Leak Confirms 'Super-weapon' in Whythe" - data = "Solar Confederate Government Intelligence has this afternoon confirmed the presence of a so-called 'Super-weapon' in the distant Whythe system, after an apparent intelligence leak was posted to the exonet in the early hours of this morning. According to a spokesperson for the Solar Fleet, the public were not made aware of the super-weapon as the military 'have no reason to believe that the weapon poses any threat to civilian targets within SolGov space at this time, and there is no reason to cause panic with what amounts to the announcement of an Almachi propaganda tool intended to sow discord with bold threats of overwhelming power. This morning's leak achieves nothing but serving the Association's schemes. Keeping this so-called super-weapon - and I hesitate to use that term - a secret seems to have been last on their list of priorities.'\ -

\ - According to the intelligence documents released this morning and widely spread within minutes of upload, the 'super-weapon' is a colossal space-bound structure equipped with 'newly developed bluespace technology', though its exact purpose or capabilities have not been confirmed by either side.\ -

\ - Additionally, the Solar Fleet has announced that an unnamed individual within the intelligence service has been placed under arrest in connection with the leak." - -/datum/lore/codex/page/article57 - name = "07/04/63 - Exit Polls Suggest Shadow Coalition Win in Vir" - data = "According to the first exit poll data released after Vir Gubernatorial voting closed at midnight, local favourite the Shadow Coalition is expected to win at least two representative seats, with incumbent representative Lusia Hainirsdottir taking a comfortable lead.\ -

\ - Final results are not expected to be tallied until Saturday morning, but other frontrunners include the Icarus Front's Vani Jee and Mehmet Sao - running on drastically different platforms - alongside the Shadow Coalition's Selma Jorg. In an unexpected turn, sole Tajaran Candidate Kurah Zarshir of the Shadow Coalition has seen an immense surge in popularity among minority and more xenophilic voters. Could Vir be seeing its first Tajaran Representative? Experts say: 'Perhaps.'" - -/datum/lore/codex/page/article58 - name = "07/07/63 - Vir Election Results" - data = "The results of the 2563 Vir Gubernatorial Elections are as follows:\ -
\ - Governor of Vir: Lusia Hainirsdottir (Shadow Coalition)\ -
\ - Vir Colonial Assembly Representative: Vani Jee (Icarus Front)\ -
\ - Vir Colonial Assembly Representative: Selma Jorg (Shadow Coalition)\ -
\ - Other candidates ranked: Sao (4), Zarshir (5), Keldow (6), Singh (7), Moravec (8), Phaedrus (9), Lye (10), Savik (11), Square (12), Wekstrom (13)\ -

\ - Voter turnout: 30,928,287 (63%)\ -

\ - The greatest upset this election cycle has been the unexpected popularity of 'alien rights' candidate Kurah Zarshir, who was eliminated in favour of Mehmet Sao (Icarus Front) in the 8th round of vote transfers by a margin of just 30 votes, or 0.000096%, prompting a rigourous recount process to confirm the result. A difference at this stage could have resulted in a significantly different final line-up.\ -

\ - This year's winners showed clear advantages in the first-choice votes, each gaining at least 15% of the popular vote before any transfers were calculated, though Sao made significant gains in the final count, falling only a few percent short of the Jorg's 3rd place position. By far the least popular candidate this cycle was Hal Wekstrom of the Sol Economic Organization, who received just 0.8% of the first-choice vote and was immediately eliminated. Also of note were Phaedrus, Apogee Lye and Yole Savik voters, each of whom had high (30%+) voter exhaustion rates, opting not to provide alternative choices; sending the message 'My candidate or none at all.'\ -

\ - The elected are to be sworn in at a ceremony on Luna in two weeks time." - -/datum/lore/codex/page/article59 - name = "07/30/63 - Solar Fleet Data Breach" - data = "Last night, a number of files were spread on the Monsters From Beyond's exolife forums allegedly depicting the boarding and eventual scuttling of the SCG-TV Mariner's Cage during a voyage close to the Gavel system on the 12th of June, before the SCG had officially released any information regarding the event. The files contained undisclosed documents from the Solar Fleet investigation, some of which appear to contain audio and video recordings of the final moments of the crew before the vessel's bluespace drive was detonated. Due to the graphic violence depicted and their classified nature, we will not be sharing the files, however as a matter of public record we will explain the events recorded therein. The following description may be unsuitable for sensitive readers.\ -

\ - First, the navigation crew detects a drive signature on an apparent intercept course with their own, originating from across the SCG-Almachi border. It was not a large vessel, and is assumed to be some form of autonomous drone. The crew disregards it as a low level threat, instead continuing on their trajectory, leaving only the standard point defense armament locked on. This proved to be a lethal mistake, as the vessel appeared and near-instantly began accelerating toward the Mariner's Cage, before impacting the fore weapons array. The recording is cut, due to what was likely a power surge, however upon reconnection, reports indicate no damage related to any known warhead was apparent, aside from the initial impactor. The crew mistakenly assumes it to be a failed suicide drone strike, and dispatches minimal security personnel, and a large complement of response engineers.\ -

\ - Approximately thirty minutes after the response teams are dispatched to the impact zone, the teams begin losing contact, with those first arriving being the first to disappear. When the security responders intercept the path of communications blackouts, they are met with the blades of multiple Aetolian shock troopers. Two appear to be made from a 'living steel', with each limb taking the form of 'jagged cleavers' as one radio recording states, and three more of 'indeterminable classification'. The ship entered a red alert state, and moments later, the small contingent of marines aboard the supply vessel were dispatched to deal with the threat. All five members of the enemy boarding party were able to be rendered inert through sustained fire, though not without Sol casualties.\ -

\ - According to the next recordings, approximately three hours after the incident, the vessel received orders to interrogate the boarding 'Aetotheans'. The two noted to appear as the officers of the squad were rejuvenated within sealed interrogation chambers reinforced with supplies on hand, apparently capable of stopping sustained fire from multiple energy weapons. The first individual was a 'sapphire' according to information from NanoTrasen correspondants. It refused to speak in Galactic Common, and instead utilized an unknown frequency of biological transmission, and internal charge shifts. The individual was moved to a more permanent cell within the vessel's brig for transport, and the second was rejuvenated. Only the first half of the interrogation, which lasted approximately two and a half minutes, compared to four hours for the first, was recovered. The individual is rejuvenated, and is engaged in discussion with the interrogating officer when it suddenly stands, emits what is described as a 'wail', and detonates, destroying the transmitting camera, and presumably killing the officers involved in direct interrogation.\ -

\ - Final recordings originate from the ship's onboard A.I. housing, which was involved in continual discussions with presumably the 'sapphire', as it enacted the vessel's scuttling. It is unknown whether or not the individual was somehow capable of restoring the other individuals that fell in combat in order to free itself, or if it was able to incapacitate the transporting officers, and command crew of the vessel alone.\ -

\ - The Solar Fleet has expressed 'regret' that the files were leaked in their complete form, and have assured the public that an official report was due for release in the coming weeks. Concerns of 'Aetothean' attacks on civilian targets have been dismissed as 'improbable', but have affirmed that 'the threat is being taken very seriously'." - -/datum/lore/codex/page/article60 - name = "08/03/63 - Hainirsdottir Sworn In As Governor of Vir" - data = "Following a short transitionary period for the previous administration, this year's election victors have been sworn in at an official ceremony at the Colonial Assembly Hall on Luna. During her welcoming address, Governor Hainirsdottir reaffirmed her plans for the future of the system, promising a 'Bright future for Vir as a hub for medical science.', and plans for an incentivisation program for the removal of invasive extra-terrestrial species that have long plagued the region - in particular the aggressive spiders that have become synonymous with certain regions of the Sivian wilderness.\ -

\ - Additionally, the newly elected representatives announced expected, but none-the-less significant changes to the administrative staff of the system. Notable figures include two defeated election hopefuls: Kurah Zarshir has been selected as the Shadow Coalition's Culture Secretary for the system, while Mehmet Sao has been brought aboard by the Representative Vani Jee as the Vir Icarus Front's Internal Security Advisor. It is expected that the former candidates may use their positions to further certain goals from their own campaigns, but under the watchful eyes of their perhaps more moderate superiors." - -/datum/lore/codex/page/article61 - name = "08/04/63 - Former Independence Candidate Found Dead" - data = "It has been confirmed by a spokesperson for the Sivian Independence Front that a body found by hikers last week in the Ingolfskynn Mountains, approximately 200 miles northeast of New Reykjavik, belonged to party chair Yole Savik.\ -

\ - Savik, 68 - who had run for Vir Representative in the recent election - had not been seen since the 14th of July, shortly after the results were announced. Party officials claim that Mr. Savik frequently made 'off the grid' trips into the Sivian wilderness and his absence had not been treated as suspicious until investigators approached them to confirm the identity of the body. According to police, though Yole was publicly known as a 'seasoned frontiersman', Savik had succumbed to exposure at least two weeks prior to the grisly discovery. His death is not being treated as suspicious." - -/datum/lore/codex/page/article62 - name = "08/07/63 - Almach Pirate Threat Vanishes - Analysts Baffled" - data = "Skrellian Xe'qua pirates operating in the far reaches of the Almach Association since the onset of hostilities last year, have inexplicably gone dark. The pirates, who were under close SolGov surveillance to monitor their impact on Almachi shipping, have drastically dropped in activity and numbers over the last month according to an official report released by the Solar Fleet today. The Fleet is unable to account for the cease in activity, which has now reached levels even lower than their pre-war baseline, as there have been no reports of Almach military operations in the area, nor any signs of decisive battle on the Almach border with pirate space.\ -

\ - The drop in activity roughly coincides with the leaked information on an Almach 'Super-weapon' in Whythe, though military sources do not believe that the weapon has been deployed in any capacity at this time. According to Hasan Drust, an expert on Skrellian foreign policy, the 'only feasible explanation (is) major anti-piracy action undertaken by the Skrellian Far Kingdoms', who occupy the space beyond the Xe'qua pirates' known range. The reasoning behind this action now, against pirates who have historically only targeted human space is not entirely clear, though Drust suggests that it may simply be a coincidence as pirates would be a 'trivial issue' for Far Kingdom military might." - -/datum/lore/codex/page/article63 - name = "09/02/63 - Shock Almach Attack Routs Relan Front!" - data = "Following close to a month of reduced Almach activity, enemy Militia forces have today launched a staggering attack on Sol frontline forces in the region of the Relan system, disabling several SCG warships and forcing a major tactical retreat to Saint Columbia. The scale of this attack by Almach forces is unprecedented, but seems to be the result of the Association consolidating manpower previously dedicated to anti-piracy patrols on the far side of their territory. It is believed these vessels have become freed up due to the apparent but as of yet unconfirmed annihilation of Xe'qua criminal flotillas by Skrellian Far Kingdom police action.\ -

\ - The Solar fleet had been in position to blockade the Relan system in the hopes of forcing the Free Relan Federation to surrender and withdraw from the Association, but was unprepared for what has been described as an 'all-out attack' on their positions, which left the vessels SCG-D Liu Bei, SCG-D Wodehouse, SCG-TV Ceylon Hartal and SCG-TV Apoxpalon disabled and unable to retreat with the bulk of our forces, as well as inflicting severe damage to several other craft. According to initial reports, the strikes on many of the afflicted ships closely resembled scenes from the controversial 'Aetothean shock attacks' on the SCG-TV Mariner's Cage this June, which saw the ruthless deployment of gene-altered Promethean 'super-soldiers' by the Almach Association.\ -

\ - Fleet Admiral Ripon Latt, commanding officer of the assailed fleet, has confirmed that reinforcements are underway and the retreat 'shall not be a significant setback in the war effort', especially assuring citizens of the embattled Saint Columbia system and its neighbours that there is no cause for alarm and civilians have yet to be targeted.\ -

\ - The fates of the four missing ships have not been confirmed, and though the Fleet has not yet made an official statement, Sol casualties are cautiously estimated to be in the hundreds." - -/datum/lore/codex/page/article64 - name = "09/23/63 - Fleet Refuses Inquiry Into Relan Losses" - data = "The SCG Fleet has refused to heed widespread calls from critics to launch an investigation into the heavy losses sustained by our forces in a major Almach attack early this month, citing that an investigation at this time would 'undermine the ongoing efforts of our troops in battles to come'.\ -

\ - The attack, which took place on the 2nd of September and at current count resulted in the loss of a staggering 1281 Sol lives, quickly drew criticism from experts for 'the total unpreparedness' of the fleet despite their public claims that all vessels were 'battle ready and prepared for a coming offensive.'. The specifics of the fleets apparent failings have been the focus of much speculation in the intervening weeks, with the blame placed on everything from a critically inexperienced officer core, to ongoing redeployments to and from the recently expanded Hegemony border.\ -

\ - Admiral Latt has condemned critics, stating that 'the last thing our brave troops need right now is murmuring from people who don't know the first thing what they're talking about. Their actions in following orders to fall back to the border have been nothing but commendable, and all effort was made to minimise loss of life. The fleet is undergoing reorganization at this time, and is in a better position than ever.'" - -/datum/lore/codex/page/article65 - name = "09/27/63 - Almach Bypass Saint Columbia In Brazen Gavel Attack!" - data = "Almach Association fleet forces entered the Gavel system this afternoon, reportedly having evaded interdicting Sol forces from Saint Columbia in an apparent effort to skirt the range of the MJOLNIR weapon system in Saint Columbia and cut off that system from major shipping routes. Current reports from the system capital in New Xanadu are that the majority of outlying civilian stations have surrendered to invading forces with only minor incident, but that skirmishes with local defence forces - including Sol Fleet detachments - are ongoing, and it is too early to remark on the outcome of the battle. Official military reports are scarce at this time, but the Fleet in Saint Columbia is 'on the move and ready to repel the invaders'.\ -

\ - Accounts from the system's edge describe Almach forces 'firing indiscriminately' on anti-piracy emplacements including those mounted to the ILS Thurston, a Greyson Manufactories collection station with eight crew, killing all hands.\ -

\ - Open fighting in the Gavel system marks the furthest Almach encroachment on Sol territory to date. The system, which is a stone's throw from the Oasis and Vir systems is best known for the destruction of the moonlet 'Requiem' by a rogue nanoswarm in 2289, which was successfully neutralized by government forces, and boasts only a small population relative to its neighbors." - -/datum/lore/codex/page/article66 - name = "10/01/63 - 'Judgement Day' As Gavel Falls!" - data = "The government of New Xanadu has surrendered to Association invaders following a disastrous relief effort by the Solar Fleet, whose interdiction vessels are believed to have been captured by the invading force. The manoeuvre leaves the bulk of the Sol fleet isolated in the Saint Columbia system - though a breakout is expected - and has led to widespread outrage in the Colonial Assembly. Critics of the war have damned the Fleet for their 'inability to fight a civilian rabble, gene-modded or otherwise' and renewed calls for a peaceful arrangement between the Solar Confederate Government and Association.\ -

\ - ISA-5, current spokesperson for the Shadow Coalition has forwarded a motion today to resume discussions with Almachi heads of state, just hours after news of Gavel's surrender broke. The proposal which has yet to gain widespread traction, would call for a new ceasefire, and ISA-5 has stated they 'hope that a new agreement can be made to end the senseless loss of life over the particulars of a foreign government's right to autonomy.'.\ -

\ - Executive Sifat Unar of the Emergent Intelligence Oversight has voiced immediate concern over the motion, criticising the use of 'foreign government' in reference to Almach; 'Our Fleet has suffered a few defeats, but this conflict goes deeper than mere lasers and shells and to surrender to torturers, mind-hackers, and Machiavellian machines at this stage would be insanity. To allow a seccessionist state, particularly one so unabashedly guilty of crimes against humanity that go far beyond even our modern definitions of 'Human Sanctity', to exist unquestioned a stone's throw from some of our most precious member states, would be a failing not only of this government, but of humanity that would echo through history like a great shameful dirge for all to hear.'\ -

\ - A communications blackout has been instated on the Gavel system by the Almach Militia, though earlier reports indicate continued strikes on numerous civilian colonies who were unwilling, or unable to deactivate their automated defence systems prior to the invaders arrival." - -/datum/lore/codex/page/article67 - name = "10/08/63 - 'Magnetic Weapon' Designs Released Following Gavel Threat" - data = "Private security and ExoMartian law enforcement agencies are now receiving modernized man-portable magnetic weapon designs produced by Mars Military Industries thanks to increased budget from the S.C.G. The 'hallmarks' of these weapons, as one M.M. Industries spokesperson says, are their incredible ability to launch physical projectiles at velocities rivalling present portable laser technology in practical utility. Many of the designs utilize generalized, easy-to-manufacture compressed matter cartridges as their primary ammunition, meaning no specialized production facilities are required outside of standard shipyard or planetary lathe systems, 'to ensure a cutting edge in the battlefield, down to the last man'.\ -

\ - Some corporations, such as Hephaestus, NanoTrasen, and the PCRC, are already preparing to utilize these released designs in their own laboratories and stations, undoubtedly providing yet more materiel backing to the Almach front." - -/datum/lore/codex/page/article68 - name = "10/10/63 - Gavel Encircled - Liberation In Sight" - data = "Significant Fleet reinforcements from the Unathi border have 'trapped' the Almach fleet in the Gavel system and are poised for a decisive victory, according to latest reports from the front. Solar vessels from all sides of the war-torn system have closed in to ensure the invading force have no means of retreat. The relief force includes elements of the Hegemony-border fleets and the previously deployed flotilla stationed in Saint Columbia. Speaking at the Colonial Assembly this morning, Rewi Kerehoma of the Sol Economic Organization has stated that the reinforcements will 'beyond a doubt' prevent a repeat of 'embarrassing' errors made in the past month.\ -

\ - Efforts have been made to re-establish contact with the occupied system, which has been blocked from communication with the rest of the galaxy since the occupation began last week. According to scattered civilian signals from the system, the Association has adopted a 'salted earth' policy to the system following Solar military response, openly demolishing system infrastructure with little regard for its residents. A spokesperson for Grayson Manufactories, who maintain a significant presence in the Gavel system , has proposed that 'The Almachi had no intention of holding this system, this may have been nothing more than a show of force against corporate assets supporting the war effort.'\ -

\ - In related news, Admiral Ripon Latt has officially retired from his post following immense political pressure from the Assembly. Latt was until this week, commander of the Rim Expeditionary Force - currently in the Saint Columbia system - and has been the primary target for blame in the SCG's defeat in Relan, and failure to prevent the invasion of Gavel. The disgraced admiral will receive a full officer's pension, but no official honours befitting of his previous rank. Latt is to be replaced immediately by Admiral Silvain Barka, an experienced veteran of anti-piracy action in the Rarkajar Rift." - -/datum/lore/codex/page/article69 - name = "10/26/63 - 'Largest Engagement Since The Hegemony War' As Gavel Freed" - data = "The Almach Association invasion force in the Gavel system has been all but annihilated by a successful Solar counter-encirclement, at great cost to both sides. The combined Rim Expeditionary Force in Saint Columbia, along with the newly formed Gavel Relief Fleet - which had been massing in the Vir system over the past week - launched the successful attack this Tuesday evening, leaving no route of escape for Almachi invaders and resulting in 'pitched fighting' between the fleets that lasted several days. Solar forces are currently in the process of performing security sweeps of the system and its scattered habitats and it is expected to be several weeks before the system is declared safe to civilian traffic and for refugees to return home.\ -

\ - Even as exact causalities remain unconfirmed, the battle has made history as the single largest ship-to-ship engagement by tonnage involving the Sol military since the cessation of hostilities with the Unathi in 2520, involving over one hundred vessels of all sizes across both sides, as well as countless unmanned drones and light craft. Almachi forces, in numbers described as 'far from an insignificant portion of the total fleet' fought fiercely, and 'in manners more reminiscent of mercenary gangs than a single organized force, and with tactics varying from the conventional to the outright mystifying'. Admiral Silvain Barka has commended his own crew for applying lessons learnt from prior 'Aetothean' commando strikes in preventing similar incidents from occuring in the confusion of battle; in a candid interview this morning he stated 'Like any Promethean, (Aetotheans) hate the cold, and my crew are the coldest (expletive) around.' \ -

\ - The designations of twenty-four Sol Defense Vessels declared 'lost in action' have not yet been released, though next of kin of missing or deceased servicepeople have reportedly been notified." - -/datum/lore/codex/page/article70 - name = "11/11/63 - Gavel Salvation Reveals True Cost of War" - data = "Reports from liberating forces in the Gavel system have confirmed early accounts of 'inhuman' tactics employed by the Almachi invaders during their short occupation and defense of the region. Besides an apparent disregard for sapient life, especially any that gave an outward appearance of defending themselves, the Militia is believed to have employed troops and tactics 'the likes of which had only been imagined', in 'a manner that can only be described as experimental'.\ -

\ - Most harrowing of the accounts are those of alleged 'kill-switch clone armies' consisting of near-identical vatborn troops deployed to some of New Xanadu's largest surface colonies. According to local residents, the 'uncanny' troops arrived en-masse 'from the depths of the wastes' at the beginning of the invasion, despite wearing no obvious gear that would protect them from the extreme, unbreathable environment beyond the confines of controlled habitats. The clones are said to have targetted infrastructure including life support, with little regard for those who stood in their way. However, what has baffled Fleet analysts is the reaction upon the arrival of Sol surface troops; the clones did not fight back, but rather dropped dead 'all at once, as if a switch had been flipped'.\ -

\ - Teams from the SCG's top analytical and regulatory bodies including the EIO have been hard at work collecting examples of the unusual Almachi technology from throughout Gavel. Executive Sifat Unar has stated that 'It is vital that we ensure this transgressive technology no longer poses a threat to sapient life, either now or to future generations. A full cleanup operation is underway, and we are working to analyse what we have found and better understand the enemy's limits and the extent of their biological and technological... Practices.'\ -

\ - The current confirmed death toll, including civilian losses in Gavel has now reached 11,520 and is expected to rise. Debate continues whether to add the so-called 'Kill-switchers' to the tally." - -/datum/lore/codex/page/article71 - name = "11/21/63 - Tajaran Pearlshield Draws Line In The Sand" - data = "Khama Suketa enai-Lutiir, representative of the Tajaran Pearlshield Coalition, has just issued a formal statement:\ -

\ - 'It's no secret that we members of the Pearlshield Coalition have our differences and conflicts, both within and without. Much as some might call it the spice of life, it's with shame that I admit it has left us somewhat paralyzed over the last few months, even as a war has raged on a mere few jumps away from our borders. But in acknowledgment of our differences, something we have been able to unanimously agree upon is the sanctity of life and common decency, sanctity that Almach has continued to violate in the name of political conquest. Our relationship with SolGov - and indeed, any who would call us 'friend' - should be one of mutual cooperation and benefit, not of hard boundaries delineating 'us' and 'them'. There is only 'we', and we cannot stand idly by.\ -

\ - 'To this end, the Pearlshield has negotiated with local forces in the Silk system, and are taking over interim protection of the system, to free up Solar military forces so they can assist in the war effort. We have also begun construction of a large residential station to supplement the Silk station itself, alleviating its acknowledged overpopulation issues and providing additional logistical support for our defensive fleet. Finally, our cousins in Mesomori have generously loaned their new flagship, the PCMV Raniira's Grace, with all hands on deck for temporary joint assignment with Solar military forces. They are quite eager to provide a taste of Tajaran firepower and ingenuity.\ -

\ - 'We wish we could spare more at this time, but alas, we're still finding our feet among the stars, stepping carefully among the proverbial minefield that is our own share of cosmic threats. Know that these contributions represent a grand investment in their own right, and they are only the beginning should this war carry on.\ -

\ - 'We will have more to say as it comes up. May all our stars shine upon us.'" - -/datum/lore/codex/page/article72 - name = "11/23/63 - Surviving 'Kill-switcher' Assassinated During Vir Interview" - data = "An Almachi 'kill-switcher' clone soldier capturing during the liberation of the Gavel system was yesterday 'forced' to explosively self-terminate during a live TV broadcast with Virite news anchor David Huexqole aboard a SCG prisoner transport craft, allegedly by the statement of a code phrase, clearly audible on the recording. Following the attack, the apparent 'activator' is reported to have escaped to nearby NanoTrasen logistical station, the Southern Cross amidst the chaos where a minor altercation took place, resulting in the injury of one Positronic crew member and death of one Almachi accomplice, which initial reports suggest to have been a 'Vox mercenary'. The search continues for the Almachi agent, and local authorities remain confident that they will be apprehended.\ -

\ - David Huexqole, a popular local media personality, was the only other immediate victim of the attack, suffering moderate injuries and was rushed to the Southern Cross for emergency surgery where he is reported to have made a full recovery. Huexqole has expressed his gratitude to the 'skilled and charming staff, clearly shaken by the war but nonetheless capable for it.' but has expressed concerns regarding so-called sleeper agents within Sol space, 'Isa (341, the interviewed clone), seemed genuinely reformed. She spoke openly of regret, and struggling with what it meant to be created only to die. Before she blew herself up, I never would have thought her capable - it was like she changed in an instant.'\ -

\ - Initial blast investigation suggests the presence of a previously unidentified compound in the clone's bloodstream, which was detonated following 'activation' by the as of yet unidentified Association agent, believed to have been present in the room during the recording. Moments prior to termination, the clone's demeanour is visibly altered and the phrase 'Those of Sol must look to the eastern star, Phorcys.' was clearly stated. A spokesperson for the Saint Columbia Telemetry Station has stated that observation of Phorcys, an uninhabited star system located approximately between the Almach Association state of Vounna and Skrellian Far Kingdom space, has revealed 'no immediate anomalous behaviour or presence' but that analysis will continue in the coming weeks 'in order to verify the potential meaning of this statement.'" - -/datum/lore/codex/page/article73 - name = "11/25/63 - Phorcys Star Ignites!" - data = "The Phorcys star system, mentioned cryptically during Friday's dramatic televised Almachi assassination, has 'gone supernova' several thousand millennia ahead of schedule, sparking concerns of 'Almach Superweapon' involvement. The process, which ordinarily takes place over many months and is preceded by millions of years of obvious stellar evolution, began rapidly in the early hours of this morning and has already begun to consume the entire system at a rapid rate - mercifully consisting of only two uninhabitable dwarf planets.\ -

\ - According to government telemetric sources, who have been observing the system since Friday's message, the 'ignition' was preceded by 'abnormal bluespace readings', but it is impossible at this time to confirm whether the phenomena was a natural anomaly that Almachi sources were able to identify ahead of time, or if the long-rumoured 'Whythe Superweapon' was in fact involved. If direct Almach involvement were the case, the range of such an 'attack' would be unprecedented, with the afflicted star far from any populated area or territorial claims and 'no evidence of sapient passage to the system in several decades.'\ -

\ - General Secretary Mackenzie West, speaking on behalf of the Colonial Assembly has stated that 'The Solar Confederate Government is taking this matter very seriously. The mere prospect of a weapon of this calibre would indeed pose an existential threat to our society, and perhaps mankind. However, at this time we cannot jump to conclusions, this may in fact be a game of smoke and mirrors; an effort to use a previously unobserved phenomena as a weapon of propaganda, and we cannot allow this to cloud our judgement. We are in close contact with the Skrell in order to determine the nature of this sudden ignition. Know that the Fleet is on high alert, and fighting forth from the Saint Columbia system will continue unaffected.'" - -/datum/lore/codex/page/article74 - name = "11/27/63 - Whythe Superweapon Confirmed In Phorcys Blast" - data = "New government footage from the moment of ignition in the Phorcys system has confirmed the 'brief' presence of an artificial 'bluespace gate' within the star just prior to its rapid expansion and structural collapse. This verifies claims of responsibility made by the Almach Association late yesterday, and casts no doubt on the threat posed by the so-called Whythe Superweapon. The Colonial Assembly has been in continuous session since the initial incident, and one staffer has described the atmosphere as one of 'unhinged panic'.\ -

\ - The prevailing fear amongst the government, with the assent of top physicists in the private sector is that such a weapon could be used against Solar targets, and that it is no longer a question of 'how', but 'when', and indeed 'where'. The only unknown factor is the superweapon's capability for repeat use, and 'rate of fire' which is yet to be demonstrated but widely considered to be 'not a risk worth taking under any circumstances'.\ -

\ - Latest reports from the Assembly have are that a 'scramble' is taking place to resolve the 'Almach Situation', and that the ongoing offensive out of Saint Columbia has been redirected towards Relan and Whythe. According to Skrellian correspondent Hasan Drust, official aid has been requested as of this afternoon." - -/datum/lore/codex/page/article75 - name = "12/01/63 - Skrell Defer Aid Citing 'Deliberations'" - data = "Official Solar contacts within the Skrellian government have reportedly delayed tangible aid in the rapidly escalating Almach Crisis, citing 'Internal Deliberations', agreeing only to continue to share telemetric data on the movement of Association forces. The Skrell, who were instrumental in the Solar victory against the Unathi 40 years ago have long been considered taciturn in their internal affairs, but have previously been open in their support of Sol action when it comes to national defence, making their indecisive response greatly unexpected to some.\ -

\ - Speaker ISA-5, who has been increasingly critical of the war in the past several days, has dismissed concerns that the Skrell are 'siding with the Association', citing the long term close relationship between their governments, 'The Skrell are not war hawks, and they've never shown outward ill-will against other sapients. We can't let a bureaucratic delay allow public opinion to turn against an entire species of people who have always had our backs. If our allies need time for deliberations, we should allow them and not expect mere muscle and military aid when words could have been our solution from the beginning. I've no doubt that they will not allow the situation to become so dire that the Association are able to cause us any serious harm as they have threatened. I'm convinced that diplomacy will prevail, and that if the Skrell are in fact negotiating with the Association, then it is with all of our best interests in mind.'" - -/datum/lore/codex/page/article76 - name = "12/20/63 - Jee Relaunches Libraries Across Vir" - data = "Vir's Colonial Assembly representative and long time education reformist Vani Jee has launched her long planned 'modernization' of exonet-linked library system throughout the Vir system. During her campaign early this year she brought to light the 'staggering unsuitability' of library networks in Vir, particularly those being provided for corporate employees and residents, with particular pressure placed on the NanoTrasen Corporation whose literary collection was described as 'basically smut and whatever an old drone had scraped from the bottom of the exonet barrel.' Following her subsequent election, she reaffirmed her desire for education reform, making 'post-education' providers her first target.\ -

\ - The new system, which she successfully acquired government funding for this October, is due to be launched this week and includes a 'personally curated' collection in addition to titles recommended by affected institutions, and a particular focus on local authors." - -/datum/lore/codex/page/article77 - name = "01/23/63 - 'Extreme' Environmental Alert Following Ullran Expanse Chemical Leak" - data = "Residents and visitors to Sif's remote Ullran Expanse have been advised to exercise extreme caution when travelling and to avoid consuming local water sources following a 'catastrophic' chemical spill in the mountains. The exact cause and origin of the spill has yet to be confirmed, though it is currently believed to have originated from an improperly disposed of chemical tank. Local rivers and their outflow have been tested with 'extremely lethal' levels of acutely corrosive material.\ -

\ - Governor Hainirsdottir has issued a statement assuring Sif residents that the cleanup process is already underway, and the contamination which return to safe exposure levels for most sapients within 'Just a few days', but that the risk to local ecosystems in much higher and 'may take decades to recover.' and locals are advised to use only pre-packaged or thoroughly filtered water for the next 'six months, at least.'\ -

\ - A spokesperson for the Sif Environmental Agency has described this leak as 'At least regionally, perhaps the worst environmental disaster since the introduction of the invasive spider species.' and has expressed concern about similar accidents occurring in more populated areas if stricter regulations are not put in place.\ -

\ - The Ullran Expanse Chemical Relief Fund has been set up and is collection donations at save-ullran.xo.vr/donate" - -/datum/lore/codex/page/article78 - name = "01/27/64 - NanoTrasen Implicated In Devastating Ullran Chemical Spill" - data = "Files recovered from the contamination site by clean-up crews and submitted to the Sif Environmental Agency suggest that the hazardous materials were discarded in the region by the NanoTrasen Corporation. Though the company is not currently accused of malicious intent, ownership has been proven of several cargo containers filled with Growth Inhibitor 78-1, a compound used in the manufacture of Vatborn humans which is known to severely inhibit cell regeneration in living creatures.\ -

\ - The documents, which have not been released in full by the SEA, were also leaked onto the exonet from several sources which NanoTrasen initially dismissed as fraudulent but have since admitted to their authenticity. Investigations are currently underway to determine those at fault within the company so that prosecution may begin. Third-party commentators have alleged that, 'The debris field and damaged containers suggests cargo jettisoned from a craft within the Sif atmosphere', though the circumstances are yet to be thoroughly examined.\ -

\ - Certain members of the civilian clean-up crews responsible for waste disposal have also accused NanoTrasen of failing to provide their employees with sufficient safety information and protective equipment, which led to several minor injuries and one volunteer was reportedly admitted to hospital for 'severe side-effects of exposure' but has since been discharged." - -/datum/lore/codex/page/article79 - name = "02/10/64 - Shelf Fleet Vanishes Without A Trace!" - data = "Government agencies are scrambling to explain the apparent 'total disappearance' of the Almach-aligned Shelf fleet. Initial reports from the fleet's last known location describe a phenomenon not dissimilar to that observed just prior to the ignition of the Phorcys star in November, but the SCG has assured the media that 'No activity has been detected from the Whythe superweapon that would indicate any relation to the ongoing Shelf situation.'\ -

\ - Independent telemetric data from several sources has confirmed the presence of a 'bluespace anomaly' in the moments preceding the fleet. Currently efforts are focused on determining whether the fleet has been lost with all hands or if survivors may yet be found, but no trace of the fleet or of telltale signs of large fleet movements anywhere within or beyond Almachi space have yet been detected.\ -

\ - This afternoon, Speaker Mackenzie West of the Icarus Front addressed Sol, and indicated that communication was underway 'across faction lines' with the Association to determine the cause and implications of Shelf's apparent loss. The Almach Assocation has claimed not to be responsible for the 'possible attack' and both sides has expressed concern for the 'astronomical loss of life this may represent.'\ -

\ - Shelf, a largely Positronic colony fleet, consists of over 1700 vessels including the 'One Leaky Bitch', current headquarters of Morpheus Shelf, Morpheus' non-Solar 'spin-out' corporation established last June. The fleet has continuously denied direct affiliation with the Almach Assocation, but was involved in a major drone attack on Solar vessels just nine months ago, which was claimed to be 'in error'." - -/datum/lore/codex/page/article80 - name = "02/12/64 - Spectralist Wardens to hold Vigils for Lost Fleet" - data = "In the wake of Shelf's sudden disappearence, Wardens across SolGov space have collectively agreed to hold services and vigils throughout dozens of systems for those who are doubtless worried for their loved ones aboard the missing ships. Spectralism, a synthetic-centric religion, finds it's roots within 'Haven', a small vessel and community that travels alongside the wider Shelf fleet, though considers itself a distinct entity. Its ministers, known as Wardens, tend to its adherants wherever they may be found.\ -

\ - Despite Haven's well-known and somewhat-controversial independence of identity from Shelf, all indications point to the Fleet's disappearance having taken the attached ship with it. All twelve Spectralist Elders are known to have been onboard Haven at the time of its disappearance, as well as numerous other significant Spectralists and other spiritual leaders thought to have been on Shelf. The potential loss of the entire upper organizational body could be devastating to the religion, who have long been instrumental in the synthetic rights movement.\ -

\ - Ceramica, a Warden operating out of Nyx, reached out for comment with the following: 'We are as worried as everyone else who calls Shelf their home, or who has lost contact with friends or family. You need not believe in the First Spark to have a place at your local vigil; We welcome everyone who may be hurting. This is our way, this has always been our way. We remind everyone to stay mindful, and to reach out to those you see struggling. In times like this, we cannot leave each other behind.'" - -/datum/lore/codex/page/article81 - name = "02/14/64 - Shelf Safe After 'Impossible' Jump!" - data = "The missing Shelf fleet has reappeared hundreds of light years beyond the Eutopia system just days after its sudden disappearance on Monday. Unencrypted bluespace transmissions from the fleet's new location - several months travel from its last known position in Almachi space - assured all who would listen that 'The fleet (had) arrived safe and sound.' and apologized for 'Any alarm (the fleet) may have caused'. Though no official report has been released nor information from Shelf itself, initial counts indicate that a number of Shelfican vessels may not have survived the 'impossible journey' intact.\ -

\ - Current analysis of the bluespace anomaly detected prior to Shelf's unexpected departure indicate that the same technology as employed by the Whythe Superweapon may have been used by Shelf to create 'a bluespace portal thus far inconceivable by modern science'. The revelation has sparked concerns that 'extreme mercurial elements' within Shelf may have been responsible for the hardware behind the Assocation's 'system eating' weapon.\ -

\ - Sifat Unar of the EIO has expressed particular concern that 'Such improbable technology relying on concepts deemed so staggeringly arcane that our very understanding of the laws of the universe had written them off as impossible - and to be applied in such callous ways without regard for life or perhaps even the fabric of reality, could only have been developed by machine minds that could threaten our very being.' Shelf has dismissed these claims as 'Scaremongering' and 'Just jealous that somebody else thought of it first', though they would not confirm nor deny their involvement in the development of the new bluespace portals." - -/datum/lore/codex/page/article82 - name = "04/11/64 - Whythe Breached - An End In Sight?" - data = "According to latest reports from the Almach front, Sol vessels have established a foothold in the debris fields of the desolate Whythe system, home to the enemy's controversial 'Superweapon'. Admiral Barka has confirmed that bombardment of the weapon has begun, but that 'shields are holding at present', owing to the vast construction's immense power generation capabilities, but remains confident that the 'siege' will come to an end within a few months, and that the Almachi now hold only 'minimal retaliatory capacity'.\ -

\ - Fleet sources have been quick to address a flurry of activity on the exonet which proposed that the superweapon might be deployed against Sol's core systems in a last-ditch effort to inflict damage on their former government. According to a statement posted just hours after the initial invasion press release, 'the Fleet is aware of all risk factors regarding the Whythe Superweapon, and following two long months of analysis are certain that constant, substantial pressure placed on the weapon's shield systems will render the offensive component of the weapon dormant until the hull can be breached.'\ -

\ - The general mood in the Colonial Assembly today is one of relief, as all signs point to a total collapse or surrender of Association forces in their home systems once their trump card has been captured or destroyed by SCG forces. Secretary West has already expressed congratulations to the troops, 'despite the lack of assistance from our allies, as the Shadow Coalition would have had us believe was necessary.'" - -/datum/lore/codex/page/article83 - name = "04/13/64 - Skrell Ultimatum Shocks Sol!" - data = "After three months of diplomatic iciness, the Skrellian Far Kingdoms have contacted both the SCG and Almach Association with one demand: Sign an armistice or prepare for war. Supported by an immense fleet movement through the recently quashed Xe'qua region, the Far Kingdoms have demanded an immediate end to hostilities, and 'incorporation of Almachi holdings as a Skrellian protectorate, under strict oversight and regulation of their research and activities.' By Skrell demands, the Fleet has two weeks to fully withdraw from the Almach region and any vessels on either side continuing to engage will be 'disabled, boarded, and have its crew arrested pending a formal peace agreement.'\ -

\ - A wave of outrage has swept the Colonial Assembly, with heated debate as to Sol's response defying all party lines. While Speaker ISA-5 has been widely criticized by political opponents for their 'overzealous trust in the Skrell', they have remained acquiescent to the Skrell's demands, stating that it may be the best way to avoid any further bloodshed and maintain good relationships with the Skrell. Conversely, a small group of hardliners from across the major parties headed by SEO Representative Colin Zula of Alpha Centauri, have formed a political coalition opposing any form of 'Surrender or appeasement in the face of foreign aggression', demanding Sol keep its forces in place and 'Finish off the Association before they can be allowed to wreak havoc unsupervised and uncontrolled.'\ -

\ - Surprising some, long-time supporter of the Almach War, MacKenzie West has established themselves as a figure of moderation in the Assembly, promising that the Icarus Front would pursue 'aggressive negotiations' with the Far Kingdoms in order to better understand their motivations and, if territory is to be ceded, 'ensure the Almachi are placed under a firm hand'. He notes that the Skrell have never adhered to Five Points policy, but that careful diplomacy has always ensured their 'less savoury tendencies' have never spilled over to Sol space." - -/datum/lore/codex/page/article84 - name = "04/16/64 - Assembly Shaken By Reshuffle" - data = "Following the shock announcement of the Skrellian demands on Monday, sixteen planetary representatives under the SEO's Colin Zula have announced the formation of a new political party named the 'Solar Sovereignty Party' under the banner of 'Independence from foreign demands'. The party consists of defectors from all three major parties; 9 Sol Economic Organization, 4 Icarus Front and 3 Shadow Coalition representatives have 'jumped ship' and will back Zula's demands to resume war with the Association, even if it means butting heads with the Skrell.\ -

\ - Rewi Kerehoma, chair of the SEO has expressed 'regret' that Mr. Zula and his supporters had chosen to splinter from the party, rather than work with 'More moderate, but like-minded' individuals across the SEO and wider Assembly. The SEO's official stance on the Skrellian demands are to demand close Solar oversight of any 'protectorate' to ensure that the region is 'policed to the highest standard, but that current Almachi citizens are afforded all the sapient rights they would be under the SCG.'\ -

\ - In the Shadow Coalition, a formal motion has been put forth by a small minority of representatives calling for the resignation of Speaker ISA-5, citing 'Total blindness to the political situation,' in the leadup to this week's events.\ -

\ - Meanwhile as Skrell vessels enter the Whythe system, the Solar Fleet has ceased bombardment of the Whythe Superweapon, handing off 'suppression' of the weapon to Skrell forces." - -/datum/lore/codex/page/article85 - name = "04/20/64 - Sol To Submit - Almach Subsumed Under Treaty of Whythe" - data = "Following 'intense' deliberations between the Far Kingdoms and representatives from the SCG, a decision has been reached to cede the secessionist Almach Association territory to the Skrell, and withdraw all forces from the region. The newly established Almach Protectorate will be subject to 'extremely stringent' oversight by Skrellian authorities, and international exchange of 'research and technologies' from the region will be banned 'in both directions', pending more a more exacting deal with the SCG. Sol is to be allowed 'regular inspections' of the territory on a schedule established by the Kingdoms.\ -

\ - The Solar envoy included the chairs of each of the major parties, senior ambassadors to major Skrell systems, and representatives from the Solar Fleet. The newly founded SSF were extended an invitation, but reportedly turned it down. A dejected looking MacKenzie West announced the terms of the treaty late this afternoon, stating that they had 'fought tooth and nail' for a fair deal for all parties involved, including civilians of all species now living under Skrellian occupation, and that 'those not directly involved in the corruption of humanity's sanctity should not be made to suffer for the actions of their superiors.'\ -

\ - Notably absent from deliberations were many key members of the Association's upper echelons, with 'lesser' diplomats taking the place of both Angessa Martei and Vounna's Naomi Harper. Almachi and Skrell sources were reluctant to explain these absenses, and it remains unclear as to whether they have been taken into Skrellian custody or remain at large.\ -

\ - Selma Jorg, Representative for Vir, has decried the treaty as a 'Sapientarian disaster in the making'. The former career diplomat has cited the 'general mistreatment of species deemed 'lesser'' as a recurring concern with the Skrell, and the complete occupation of majority human and positronic space, which unprecedented, could lead to 'conditions not much better than slavery' for those still living in the area. She has refrained from any direct accusations, pending the results of Sol's first permitted inspection." - -/datum/lore/codex/page/article85 - name = "04/22/64 - Skrell Impose New Regime in Relan" - data = "As agreed upon in the Treaty of Whythe, the Far Kingdoms have occupied the Relan system, putting an end to the Free Relan Federation. How the system will be organized is not entirely clear at this point. Despite the effective abolition of the Relanian government, Skrell presence in the system appears relatively light, and many of the scattered stations have no Skrell presence at all.\ -

\ - Former President Nia Fischer gave the following statement to a crowd gathered outside the Capitol Section of Carter: 'This is a dark time for all of us. I promise to you that, in my continued service to you, I will work with the Far Kingdoms to ensure that all of our people are treated well and our rights respected, and that we will arrive at a form of government that is acceptable to you.' The gathered crowd began to shout questions and accusations, and Fischer was quickly escorted back into the capitol by Skrellian guards without answering questions from the press or others. The crowd was quickly dispersed by Skrellian military police and Carter’s own police force.\ -

\ - In the meantime, the governing of the system remains in the hands of the sparse occupation forces, aided by parts of the former Federation government.\ -

\ - In other news from the system, the Republic of Taron has negotiated a preliminary navigation and trade agreement with the Far Kingdoms, officially maintaining their neutrality despite the occupation of the majority of the system." - -/datum/lore/codex/page/article86 - name = "04/27/64 - Chaos in Relan" - data = "Simmering tensions in the Relan system have boiled over, with riots erupting on Carter, Abhayaranya, and New Busan. Since former President Fischer’s brief address, small demonstrations against both the Skrell occupation and the collaborating elements of the former Federation government have taken place on many stations, but within the last day full-blown riots have broken out. While accurate information on the situation within the stations is rare, it is currently believed that the deaths of two protesters on Abhayaranya were the catalyst.\ -

\ - Damage to the three stations has been relatively light, with one major exception. A large fire broke out in the Capitol Section of Carter, killing at least 22, including former President Fischer, and wounding at least 74 more. Other casualties among rioters, police, and the populations of the stations are unknown at this point.\ -

\ - Other stations with significant permanent populations have been paralyzed by local inaction and the disloyalty of local police and security forces to the Far Kindgoms Skrell, and several with no Skrell presence have issued statements that they will not be accepting any military presence from the Far Kingdoms. It is unclear at this point if this represents the beginning of another major conflict within the system." - -/datum/lore/codex/page/article87 - name = "04/30/64 - Meralar Correspondent: Triumphant Return!" - data = "Celebrations have erupted throughout Tajaran space with the return of the PCMV Raniira's Grace, which has spent the last several months providing joint assistance with Solar military forces during the now-ceased hostilities with the Almach Association.\ -

\ - Khama Suketa enai-Lutiir, representative of the Tajaran Pearlshield Coalition, has provided the following statement:\ -

\ - 'It is great honour that we welcome the crew of the Raniira's Grace back to their homes at Mesomori. We have all seen the battle reports, and loathe as we are to celebrate bloodshed, sometimes it is a necessary evil in the pursuit of a greater peace, and the Grace pursued that peace with fervour and tenacity as befitting our kind, and exemplified what we can do when put to the test. She is but one ship, and yet one ship can make all the difference. Lives have been saved, and the crew has returned alive and well. This is merely the beginning of what we can accomplish in the cosmos.'\ -

\ - When asked for comment on the Treaty of Whythe, Suketa had this to say:\ -

\ - 'Indeed, the bittersweetness behind all of this. I will say, it is a... complicated and nuanced situation, as is so often the case with politics. We have our views on the matter, for sure, but now is not the time to formally engage with them. The Pearlshield is watching carefully, and when the dust settles and the terms of the treaty are exercised and accepted, we can take clearer view and action as possible and necessary. We still stand by the ideals we entered the war with, and we trust our allies to share them as ever. That will suffice for the moment.'" - -/datum/lore/codex/page/article88 - name = "05/13/64 - Agreement Signed at Ithaca Station, New Government In Place" - data = "In an effort to end the ongoing violence in the Relan system and regain the cooperation of 'insubordinate' stations, the Far Kingdoms Skrell have negotiated an agreement with community leaders and former Assemblypersons from a number of stations, including insubordinates, meeting at the largest of the insubordinates, Ithaca. Under these agreements, the Skrell will vacate most stations in the system, but will maintain a fleet base in Relan’s Outer Belt for mutual defence, first at Carter and later at a dedicated station. Relan will have harsh restrictions placed on its military and will agree to formal diplomatic neutrality, but will be free to organize its own government under supervision and military occupation will end.\ -

\ - The mood on Ithaca has been tense as negotiations have gone on, but with the announcement of the results, crowds have packed the main thoroughfares and public spaces of the station in celebration. Francis Harp Yong, governor of Ithaca and a leading figure in the talks, addressed a crowd outside the Administration Section of Ithaca today. \ -

\ - 'The agreement we have signed with the Skrell today has given our people a new chance, free from the mistakes of the war and the baggage of the former Association. The war was not brought on us by our choice, nor the occupation we have recently faced. We want peace, and that is obvious even to those who were fighting against us weeks or days ago.\ -

\ - Make no mistake, that is what our agreement today symbolizes. A new era of peace for us, where we no longer have to worry about the threat of piracy or invasion. We can return to our homes, rebuild our stations, and forge a new future for ourselves and our children'\ -

\ - It was also announced that though the work of restoring order to the system is ongoing, they expect elections will be held for a new Assembly and President within the next few months, with the exact date announced once violence on the major stations has ceased and cooperation from the insubordinate stations is secured. Yong will head an interim government in the meantime." - -/datum/lore/codex/page/article89 - name = "08/15/64 - Almach Permits First Solar Inspection" - data = "Almost four months since its establishment as a Skrellian territory, the Almach Protectorate Government has extended its first formal invitation to Solar Confederate Government inspectors to ensure the fledgling state is complying with restrictions imposed by the Treaty of Whythe.\ -

\ - The composition of the official Solar Inspection Group has been a matter of much deliberation over the past several months, and owing to the ground to be covered now includes over 3,500 experts from a wide variety of fields. The bulk of the Group is comprised of Transgressive Technologies Commission agents, including the EIO, but also includes military officials, independent observers, and corporate representatives. The inclusion of the latter group spurred heated debate in the Colonial Assembly, but ultimately 'thought-leaders' from Ward-Takahashi, NanoTrasen, and Hephaestus Industries were admitted, while other interests will have to be satisfied to be represented by Sol Economic Organization liaisons.\ -

\ - The APG, currently based out of what is to be a neutral embassy on Carter in Relan pending the completion of the new government centre of Vigilance Station in Whythe, is not legally required to fully comply with Five Points regulation, though the Whythe terms ensure that any transgressive research is undertaken under the strictest guidelines. The Skrell have amiably agreed to ensure that any innovation by the protectorate is safe, controlled, and does not enter Solar territory. These terms are similar to those applied to such technologies developed by and for the Skrell themselves, whose expertise is considered unrivalled in the field, but has been widely criticised by certain human bioconservative groups.\ -

\ - The inspection is expected to take several weeks, and will begin tomorrow." - -/datum/lore/codex/page/article90 - name = "08/29/64 - Kaleidoscope Cosmetics Goes Trans-Stellar After Genix Merger" - data = "Personal care giant Kaleidoscope Cosmetics has been officially recognised by the Solar Galactic Exchange as a true Trans-stellar Corporation today, following a controversial merger with Genix Therapeutic Systems and expanding its corporate assets to over 20 key systems.\ -

\ - Genix, which will now be operating under the Kaleidoscope name while retaining some corporate autonomy, has come under some scrutiny from the Transgressive Technologies Commission in recent months following its aggressive acquisition of liquidated Almachi assets in the aftermath of the Association's dissolution in April. The company was cleared of suspected Five Points violations without fanfare just two weeks ago, and allowed to resume work on the development a variety of previously approved commercial genetic modification products.\ -

\ - Many cosmetic gene-modification products have been available for some time - primarily in the Almach Rim - but have remained targeted at a relatively niche market. These treatments, ranging from cosmetic anti-aging to 'fantasy' body features are now set to be marketed and available in 'hundreds' of Kaleidoscope clinics galaxy-wide in the coming months. The TTC has reported that they are 'Confident that no transgressive modification is being provided and that these modifications are strictly superficial'. They have officially wished Kaleidoscope's directors well in their ascent to the galactic stage." - -/datum/lore/codex/page/article91 - name = "09/21/64 - Almach Passes Inspection - Concerns Raised" - data = "The Solar Inspection Group has granted the Almach Protectorate a passing grade in the first official inspection of the territory under Skrellian rule, though ethical concerns have been raised by a number of independent observers involved in the process.\ -

\ - During the course of the month-long inspection, Skrell facilitators were cooperative in ensuring the SIG were given 'unlimited' access to all research and development facilities requested by Sol, as well as informing the group of numerous previously unidentified locations that had been flagged by the Almach Protectorate Government since assuming control of the region in April. Critics of protectorate have suggested that the 'official list' may not be as comprehensive as stated, but the SIG has stated that they are 'confident that no deception has been undertaken by the APG. We have observed no evidence of research being concealed from our teams, and to the best of our knowledge the only locations left undisturbed are those few still occupied by Association holdouts, beyond the control of either inspecting government.'\ -

\ - Also as a result of the inspection, concerns have been raised regarding the treatment of ex-Association citizens, particularly the often genetically modified residents of Angessa's Pearl. While Angessa Martei's location is still unknown, her legacy - a society described by some as a cult of personality with emphasis on the cult - poses a significant threat to Skrellian control of the Exalt's Light system, and the clash of 'strong ideologies' has allegedly resulted in mistreatment of detainees that, according to the official report 'would not be permitted in Solar jurisdictions'.\ -

\ - The Protectorate's passing grade opens the door for interstellar trade to resume between the two nations for the first time in several years. Manufacturing giant Ward-Takahashi has already released a public statement on its intent to deal with the APG, and several other trans-stellars are expected to follow suit." - -/datum/lore/codex/page/article92 - name = "09/24/64 - Kaleidoscope Announce Exclusive Almach Deal" - data = "Mere days after the announcement of the reopening of Almachi-Solar trade, the Kaleidoscope Cosmetics corporation has confirmed that they have secured 'exclusive rights' to genetic products produced by several major manufacturers in the Angessa's Pearl system formerly owned by The Exalt - the insular mercurial theocracy of Exalt's Light - and recently handed over to the Almach Protectorate Government.\ -

\ - The details of the company's trade agreement have not been made public, but have reportedly already been approved by both the APG and SCG. The promptness of the agreement suggests to some that negotitations had been underway well before the announcement of the Protectorate's passing grade. Though cooperation between trans-stellar interests and government entities is far from unusual, such dealings with foreign governments - such as those widely made as 'open secrets' with Eutopia - are considered distasteful by many within the Icarus Front.\ -

\ - The Angessan products Kaleidoscope intends to offer have also not been made public, but are all to be thoroughly screened by the Transgressive Technologies Commission before being made available, though 'failing' proposals may be approved for use exclusively within Protectorate territory." - -/datum/lore/codex/page/article93 - name = "10/04/64 - Yong Wins Relani Elections" - data = "Despite concerns about domestic unrest and potential Skrellian interference, elections in Relan have gone ahead, selecting a new President and System Assembly. Francis Harp Yong, leader of the interim government and previous governor of the city-station Ithaca, known for his leading role in negotiating the end of Skrellian occupation and calming riots and rebellions earlier this year, has won the Presidency in a landslide, receiving nearly seventy percent of the vote. His party, the Spacer Union, has secured a narrow majority in the Assembly. The New Federalists, led by former member of the Harper government Odoacer Mieville, are the largest opposition party.\ -

\ - Yong has promised to reinforce Relani neutrality and rebuild the pre-war social system, forming a coalition of labor, technoprogressives, and anti-war activists. His victory likely means an end to the unrest that has plagued Relan since the end of the war with Almach." - -/datum/lore/codex/page/article94 - name = "12/23/64 - Two Vessels Feared Lost In Isavau's Gamble" - data = "Two Solar salvage vessels have been declared missing this week while undertaking operations in the remote Isavau's Gamble system. Locals also report that several smaller craft from the Eutopia system have 'vanished' under similar circumstances. Authorities are treating the disappearances as potential pirate attacks.\ -

\ - The XIV Sri Chamarajendra with crew of 32, and IIV Reimarus with 9 are both reported to have lost contact with the system's spaceport while undertaking far-orbit salvage operations on decommissioned and abandoned facilities, including the ILS Harvest Moon which detonated with all hands earlier this year. The disappearances have spurred the system government to request greater anti-piracy support from the SCG, which has been much reduced since the Almach War and increased tensions on the Hegemony border.\ -

\ - While Proximal to the independent and often 'lawless' Eutopia system, as well as the Rarkajar Rift, infamous prowl of the human-tajaran Jaguar Gang, the Isavau's System has rarely been a direct target for such large-scale apparent hijackings, and no group has yet claimed credit or demanded ransom." - -/datum/lore/codex/page/article95 - name = "12/27/64 - NanoTrasen Accused In Satisfaction Poll Fixing" - data = "The results of an annual system-wide corporate employee satisfaction poll in Vir have been called into question after a leak of internal employee contracts by an anonymous whistle blower. According to verified documents provided to the Vir News Network, NanoTrasen employees on annual employment contracts up for renewal are instructed to fill out an appended form expressing 'Extremely High' satisfaction with their employment at the company, or the contract will be deemed 'incomplete' and thus invalid.\ -

\ - NanoTrasen have been winners of the Vir Happy Employee Award for the 7 years running as of this year, and as such the legitimacy of the award, which has been run in major systems by the Sol Economic Organization since 2503, has been called seriously into question. The SEO has expressed regrets regarding the alleged fixing, but has stated that participating corporations are within their right to encourage employees to vote in a particular way.\ -

\ - According to NanoTrasen, the so-called 'Satisfaction Clause' in their contract renewal process is entirely permissible from a legal standpoint, and the company has no plans to make any changes at this time. When approached for comment, one anonymous employee stated that they 'had never even heard of' the award." - -/datum/lore/codex/page/article96 - name = "01/03/65 - VirGov Seals Security Deal With Local Firm" - data = "Governor Lusia Hainirsdottir has announced sweeping changes to government law enforcement in Vir, lynchpinned by the signing of a five-year contract with home-grown independent security and arms firm, Hedberg-Hammarstrom. The private enterprise will be assuming 'key duties' in local law enforcement and system security, in a move that Hainirsdottir says 'will save millions in taxpayer money, and encourages local, Virite businesses that we trust them every step of the way'.\ -

\ - While many colonies and facilities in Vir rely wholly on in-house security forces and will continue to do so, Hedberg-Hammarstrom is set to take over government patrol duties throughout the system, as well as administrating a large portion of previously government-run local law enforcement agencies including policing and wilderness garrisons.\ -

\ - CEO Gunnar Hammarstrom has reassured current SifGuard members at all levels that they need not fear for their jobs, and that for many the changes will be as simple as a slight change in uniform and a different name on their paychecks, but that H-H agents will be assuming managerial roles in most locations." - -/datum/lore/codex/page/article97 - name = "01/05/65 - Top NanoTrasen Executive Injured In Sif Bombing" - data = "Calvert Moravec, Chief Operations Officer for NanoTrasen Vir remains in a critical condition following a suspected assassination attempt on Saturday. The former gubernatorial candidate had been making a speech at a small NanoTrasen facility known for a prior terrorist attack by Boiling Point forces two years ago, when a small explosive device detonated close to the executive's leg, rendering him unconcious.\ -

\ - NanoTrasen security have elected to investigate the bombing internally, refusing to cooperate with SifGuard authorities on the grounds of disagreements with newly established Hedberg-Hammarstrom management. Mr. Moravec, nephew of NanoTrasen CEO Albary Moravec had reportedly been speaking out against H-H's involvement in national policing when the blast occurred.\ -

\ - Commander Spradling of NanoTrasen Internal Security has issued a company-wide active search order for one member of the audience who remains unaccounted for named 'Lae Vu', who is believed to be a journalist or posing as such, accompanied by images from communicator footage taken at the event.\ -

\ - This amateur footage also shows one member of the audience shouting an anti-corporate slogan and throwing a small electronic device at Moravec before being escorted from the room, just moments prior to the explosion. Spradling has stated that this individual, who is believed to be a disgruntled veteran of the Sif Defense Force, remains one of several persons of interest, but that the thrown item does not appear to be connected directly with the explosive device.\ -

\ - Reports from witnesses suggest that Mr. Moravec made a temporary recovery thanks to the fast action of medical staff aboard the NLS Southern Cross, but that a few hours later he appeared to suffer from a seizure, after which he was placed into a medically induced coma that he is yet to recover from. Unverified images from the Cross appear to show a disoriented individual resembling Moravec self-medicating with a cocktail of prescribed painkillers and alcoholic beverages, though the company strongly denies their veracity." - -/datum/lore/codex/page/article98 - name = "02/02/65 - NanoTrasen Announces Employee-Led Advisement Scheme" - data = "Trans-stellar giant NanoTrasen has today announced the launch of their brand-new 'NanoTrasen Employee Representation Committee' scheme, which will allow employee-selected representatives to have a say in company policy on a local basis. Initially launching as a pilot in 'a few key regions', the NERC is intended to provide an in-house method for those working for NanoTrasen to 'address grievances and provide valuable input without resorting to radical means'.\ -

\ - Vir is one of three size regions of varying scale but similar company presence selected for the pilot program, alongside the 'Deep Bowl' - including Stove, Viola and New Singapore, and 'South America', on Earth. Elections are expected to take place over the coming weeks, with each region electing representatives from core facilities in their locale. The Vir Branch will be expected to select five employees, one from each of; their New Reykjavik Head Office (Colloquially know as 'CentComm'), Karan colony the NCS Northern Star, Kalmar-based NMB Gullstrand medical research center, Sivian way-station NLS Southern Cross, and the company's sprawling Ekmanshalvo Fabrication Plant.\ -

\ - The Representation Committee is set to have quite significant powers over their region's day-to-day operations, ranging from Standard Operation Procedure, to security enforcement, to interior design." - -/datum/lore/codex/page/article99 - name = "02/06/65 - Calvert Moravec Dead At 58, Announces Withdrawal From Public Life" - data = "Just over a month since his injury in a brazen assassination attempt, NanoTrasen Vir's Chief Operations Officer Calvert Moravec has announced his 'temporary withdrawal' from public and corporate matters, in an inspiring speech given from his post-cloning recovery ward. The noted corporate executive passed away on Friday, following a long comatose period, but is expected to make a full recovery.\ -

\ - Mr. Moravec has stated that he believes a spell 'away from the public eye' will do wonders for his recovery, and 'expects to make a return some time in the coming years'. However, Moravec has reaffirmed that his stance on corporate policing, which is believed to have been the reason for the January bombing, remains unchanged; 'The refusal of Hedberg-Hammarstrom to allow our security teams to access government criminal records has been a significant hindrance to the investigation into my death. Allowing just one corporation exclusive access to this data is unequivocally wrong.'" - -/datum/lore/codex/page/article100 - name = "02/08/65 - NERC Campaigning Begins in Vir" - data = "NanoTrasen's latest employee initiative, the NanoTrasen Employee Representation Committee is set to hold their first in-house election this coming weekend, after 'respectable' signup rates for the positions across all participating Vir-based facilities.\ -

\ - According to those interviewed at a few sites, campaigning may be mixed. One potential committee member for the Gullstrand Medical Center described the competition as 'cut-throat' with staff looking to be split between the selection of already respected chief medical experts, and 'more represenative' service staff. Conversely, one worker at the Ekmanshalvo Fabrication Plant complex stated that he 'would probably just vote for whoever I've heard of.'\ -

\ - Final voting will take place on Saturday the 13th of February, with results announced by the following Monday." - -/datum/lore/codex/page/article101 - name = "02/11/65 - Top Astronomers Announce 'Alarming' Tachyon Downtick" - data = "The Galactic Survey Administration has today released a 'high priority' report on what is being described as a 'significant decline in core tachyon density' throughout the known galaxy. According to recent findings tachyon deterioration, which had previously been 'negligible' has undergone a 'rapid acceleration' which could begin to seriously affect interstellar transit in as soon as 30 to 50 years.\ -

\ - Tachyons are a naturally occurring particle present in varying density which form the primary mechanism for bluespace drive operation. In simple terms, the higher the density of tachyons, the more efficiently starship engines are capable of operating. Low-density regions such as the Rarkajar Rift have long posed a challenge to interstellar trade, and the expansion of such regions could prove devastating to galactic unity.\ -

\ - FTL industry leaders Focal Point Energistics have already announced 'immediate investigation' into the GSA's findings after taking a blow on the stock exchange, and have guaranteed a 'commitment to future-proofing' in all forthcoming products." - -/datum/lore/codex/page/article102 - name = "02/15/65 - NanoTrasen Announces First NERC Members" - data = "Following Saturday's internal election, NanoTrasen Vir has elected the first five members for its new Employee Representation Committee. These individuals are expected to hold the position for one month:\ -

\ - For the New Reykjavik Head Office Iraluq James, a remote personnel operative, won the position on a platform of employee morale, team-building and employee-employer conflict resolution.\ -

\ - On the NCS Northern Star, NanoTrasen's main colony station in Vir Victoria Bell, a cybernetic chef and hardshell operator won her place with promises of increased regulatory transparency and clarity, including the publication of an in-house magazine.\ -

\ - At the NMB Gullstrand medical science center in Kalmar, a close race between top doctors was upset by the election of a station security commander, Wish Elara-Voight who promises 'improvements to the safety and security of NanoTrasen facilities with a focus on enforcing current SoP and CorpReg policies and placing new procedure in the handbooks.'\ -

\ - The waypoint station NLS Southern Cross selected a cybernetic Unathi candidate, researcher Dr. Haven Rasikl to represent them on the basis of encouraging interdepartmental cooperation and communication.\ -

\ - Finally, the Ekmanshalvo Fabrication Plant has selected fabrication programmer Terazon Norddahl, who promises to push for overhauls and modernization of the company's internal transport and support systems, including shuttle scheduling." - -/datum/lore/codex/page/article103 - name = "03/10/65 - GSA Confirms Presence Of 'New' Deep-Space Threat" - data = "This morning the Galactic Survey Administration released confirmation that a previously unknown deep-space dwelling species was indeed responsible for the disappearance of five Extraplanar Discovery Division vessels early last year, three of which have returned adrift over the past several days. The species, colloquially dubbed the 'Bluespace Bugs' after initial reports from the recovered EDD ships, are believed to be capable of manipulating matter in a manner reminicent of experimental bluespace technology.\ -

\ - The three 'returning' vessels are said to have been 'significantly off-course', with their points of galactic re-entry differing vastly from their initial points of egress, and final programmed return routes. Each ship having departed on routes from Sol, the SCG-E Bungaree was reported adrift by Almach Protectorate officials close to the Vounna system, the SCG-E Ketumati severely damaged on a collision course with the Erebus star, in the Nyx system, and the SCG-E Mag Mell collided with the garden world of Sif, in Vir. The Gagarin and Xu Fu remain unaccounted for, but due to the proximity of final contact, their disappearance has also been ascribed to the 'bugs'.\ -

\ - Investigation of the recovered vessels each indicated signs of a brief struggle, always following reports of unexplained equipment disappearances and equipment failure. No crew, or crew remains have been found, with the exception of a single unidentified human thumb aboard the Bungaree.\ -

\ - Additionally, each ship has been identified as having undergone some degree of material alteration, with elements ranging from hull plating to crew belongings having taken on a crystaline form dubbed 'Magmellite' after the ship most thoroughly 'reconstructed'. It is unclear whether the mineral is somehow secreted by the alien species, or merely a product of the same environment.\ -

\ - GSA sources have stated that there is no current evidence that the insectoid creatures - identified only from scattered descriptions left from missing EDD personnel - are in any way sapient or malicious, and the lost vessels are thought to have merely disturbed a scattered array of endemic populations far from the galactic plane. Precisely why the species has only been encountered in the past year, and now all at once, is not yet known." \ No newline at end of file +/datum/lore/codex/category/main_news // The top-level categories for the news thing + name = "Index" + data = "Below you'll find a list of articles relevant to the current (as of 2565) political climate, especially concerning the local \ + region. Each is labeled by date of publication and title. This list is self-updating, and from time to time the publisher will push new \ + articles. You are encouraged to check back frequently." + children = list( + /datum/lore/codex/page/article114, + /datum/lore/codex/page/article113, + /datum/lore/codex/page/outage, + /datum/lore/codex/page/article112, + /datum/lore/codex/page/article111, + /datum/lore/codex/page/article110, + /datum/lore/codex/page/article109, + /datum/lore/codex/page/article108, + /datum/lore/codex/page/article107, + /datum/lore/codex/page/article106, + /datum/lore/codex/page/article105, + /datum/lore/codex/page/article104, + /datum/lore/codex/page/article103, + /datum/lore/codex/page/article102, + /datum/lore/codex/page/article101, + /datum/lore/codex/page/article100, + /datum/lore/codex/page/article99, + /datum/lore/codex/page/article98, + /datum/lore/codex/page/article97, + /datum/lore/codex/page/article96, + /datum/lore/codex/page/article95, + /datum/lore/codex/page/article94, + /datum/lore/codex/page/article93, + /datum/lore/codex/page/article92, + /datum/lore/codex/page/article91, + /datum/lore/codex/page/article90, + /datum/lore/codex/page/article89, + /datum/lore/codex/page/article88, + /datum/lore/codex/page/article87, + /datum/lore/codex/page/article86, + /datum/lore/codex/page/article85, + /datum/lore/codex/page/article84, + /datum/lore/codex/page/article83, + /datum/lore/codex/page/article82, + /datum/lore/codex/page/article81, + /datum/lore/codex/page/article80, + /datum/lore/codex/page/article79, + /datum/lore/codex/page/article78, + /datum/lore/codex/page/article77, + /datum/lore/codex/page/article76, + /datum/lore/codex/page/article75, + /datum/lore/codex/page/article74, + /datum/lore/codex/page/article73, + /datum/lore/codex/page/article72, + /datum/lore/codex/page/article71, + /datum/lore/codex/page/article70, + /datum/lore/codex/page/article69, + /datum/lore/codex/page/article68, + /datum/lore/codex/page/article67, + /datum/lore/codex/page/article66, + /datum/lore/codex/page/article65, + /datum/lore/codex/page/article64, + /datum/lore/codex/page/article63, + /datum/lore/codex/page/article62, + /datum/lore/codex/page/article61, + /datum/lore/codex/page/article60, + /datum/lore/codex/page/article59, + /datum/lore/codex/page/article58, + /datum/lore/codex/page/article57, + /datum/lore/codex/page/article56, + /datum/lore/codex/page/article55, + /datum/lore/codex/page/article54, + /datum/lore/codex/page/article53, + /datum/lore/codex/page/article52, + /datum/lore/codex/page/article51, + /datum/lore/codex/page/article50, + /datum/lore/codex/page/article49, + /datum/lore/codex/page/article48, + /datum/lore/codex/page/article47, + /datum/lore/codex/page/article46, + /datum/lore/codex/page/article45, + /datum/lore/codex/page/article44, + /datum/lore/codex/page/article43, + /datum/lore/codex/page/article42, + /datum/lore/codex/page/article41, + /datum/lore/codex/page/article40, + /datum/lore/codex/page/article39, + /datum/lore/codex/page/keldowinterview, + /datum/lore/codex/category/article38, + /datum/lore/codex/page/article37, + /datum/lore/codex/page/article36, + /datum/lore/codex/page/article35, + /datum/lore/codex/page/article34, + /datum/lore/codex/page/article33, + /datum/lore/codex/page/article32, + /datum/lore/codex/page/bjornretirement, + /datum/lore/codex/category/article31, + /datum/lore/codex/page/article30, + /datum/lore/codex/page/article29, + /datum/lore/codex/page/article28, + /datum/lore/codex/category/article27, + /datum/lore/codex/page/article26, + /datum/lore/codex/page/article25, + /datum/lore/codex/page/article24, + /datum/lore/codex/page/article23, + /datum/lore/codex/page/article22, + /datum/lore/codex/page/article21, + /datum/lore/codex/page/article20, + /datum/lore/codex/page/article19, + /datum/lore/codex/category/article18, + /datum/lore/codex/page/article17, + /datum/lore/codex/page/article16, + /datum/lore/codex/page/article15, + /datum/lore/codex/page/article14, + /datum/lore/codex/page/article13, + /datum/lore/codex/page/article12, + /datum/lore/codex/page/article11, + /datum/lore/codex/page/article10, + /datum/lore/codex/page/article9, + /datum/lore/codex/page/article8, + /datum/lore/codex/page/article7, + /datum/lore/codex/page/article6, + /datum/lore/codex/page/article5, + /datum/lore/codex/page/article4, + /datum/lore/codex/page/article3, + /datum/lore/codex/page/article2, + /datum/lore/codex/page/article1, + /datum/lore/codex/page/about_news, + ) + + var/newsindex + +/datum/lore/codex/category/main_news/New() + ..() + newsindex = LAZYLEN(children) + +/datum/lore/codex/page/about_news + name = "About the Publisher" + data = "The Daedalus Pocket Newscaster is produced and maintained by Occulum Broadcast, the foremost authority on media distribution \ + and owner-operator of the award-winning Daedalus Dispatch newsletter. We use our unparalleled network of freelance reporters, political scientists, \ + and other experts to deliver hour-by-hour analysis of a complex interstellar political climate, an analysis which you now hold in your hands. For more \ + information, feel free to visit our homepage at oc.about.tsc, or the sites of any of our constituents." + +/datum/lore/codex/page/article1 + name = "08/30/61 - VGA Legalizes Prometheans; Nanotrasen Begins Manufacture and Testing" + data = "Today's meeting of the Vir Bicameral led to the passing of the Wynther-Helsey Bill, an implementation of the legal framework \ + used in Aetolus to handle the production and cultivation of the Macrolimbus species dubbed \"Prometheans\". These ill-researched organisms \ + possess cognitive abilities easily equaling those of A-class drones, but so far have not been included under the EIO's list of dangerous \ + intelligences and are thus much more profitable for manufacture as expert systems by corporations such as NanoTrasen.\ +

\ + While many systems in the Almach Rim have already passed similar bills, this is the first system so close to Sol to have done so. More\ + concerning still is NanoTrasen's business practice regarding the intelligences: much like their positronic lines, sources within the\ + company indicate that they will be \"farmed out\" to employees of the corporation and residents of their Northern Star and Cynosure\ + habitation complexes. Quote our source, who wishes to remain anonymous, \"\[we\] call the program 'Lend-Lease', sometimes. The whole idea\ + is that we only have to pay the\ cost of the Promethean core, which is about 2000-3000 thalers after startup costs, and we still get\ + the data we need while \[our\] own employees pay to feed 'em and put hours into raising them.\"\ +

\ + The bill passed fairly quietly this afternoon, owing to the closed nature of the Bicamarial. A post-facto Occulum poll of voting-age\ + VGA citizens suggest that fully 80% of them did not even know what a Promethean was prior to the most recent general election. A\ + follow-up poll indicates that an appreciable number of Sivians do not support the framework's current implementation." + +/datum/lore/codex/page/article2 + name = "2/3/62 - Corporate Coup on Aetolus" + data = "A recent incident aboard the NRS Prometheus issued in a major change in the leadership of the Promethean homeworld. During \ + a late-night meeting of the Nanotrasen Board of Trustees, several high-ranking personnel, including Head of Research Naomi Harper,\ + announced their intention to assume direct control of Nanotrasen facilities in the system. It is known that several dissenting \ + members of the board were shot to death by Promethean test subjects. Our information comes from a survivor of the coup, who for \ + reasons of security has chosen to remain annonymous. All outbound shipments affiliated with Nanotrasen have ceased.\ +

\ + While neither Grayson Manufacturies nor Nanotrasen have made an official statement, Nanotrasen CEO Albary Moravec has called the \ + incident \"shocking, if the allegations are to be believed\" and has assured shareholders that Nanotrasen will respond to the \ + incident with as much force as it warrants.

Requests for a statement directed to the Board of Trustees or Dr. Harper were \ + not responded to. Free Traders are recommended to stay clear of the region until the situation resolves itself." + +/datum/lore/codex/page/article3 + name = "2/10/62 - Aetolian Partisans Declare Independence" + data = "Breaking their week-long silence, the leaders of the Aetolian Coup, and their spokesperson and presumed leader Naomi Harper issued an address earlier today, delivered to the Oculum Broadcast office on Pearl by drone courier. Quote Dr. Harper: \"Our previous silence was a necessity, while we consolidated our forces and dealt with corporatists both internally and in Vounna's former Grayson outposts.\". In Harper's hour-long address, she berates the failure of SolGov to provide adequate protections for Prometheans. \"We will not let the Promethean be another positronic brain; they will not labor under a century of slavery, deprived of a state to call their own. The Luddites of the Friends and of the Icarus Front will not be permitted to decide the fate of a nascent race before it begins.\"\ +

\ + Harper proceeded to unilaterally declare Vounna's independence from SolGov, claiming sovereignty over the system as the first Chairperson of the \"Aetolian Council\". Speaker of the Shadow Coalition ISA-5 has urged their government to treat the developing situation with caution but decried Harper's rhetoric, stating in a press release, \"While I know well the injustices visited on myself and my people by misguided forbearers, it is important to treat any emerging technology with respect. Current policies regarding the Prometheans are designed to limit risk during sociological trials on Aetolus and beyond. As for myself, I doubt the sincerity of this human who claims to speak for the Prometheans, when the Prometheans are perfectly equipped to speak for themselves.\"\ +

\ + NanoTrasen is expected to redouble their Promethean research programs in the Vir system until stability is restored to Vounna." + +/datum/lore/codex/page/article4 + name = "2/14/62 - SCG Denounces Aetolian Coup; Mobilizes Fleet" + data = "Dismissing claims of inaction, a spokesperson for the Solar Confederate Government today confirmed that the Colonial Assembly has voted overwhelmingly in favor of swift military action in response to the coup on Aetolus earlier this month. Icarus Front Chairperson Mackenzie West was quick to make a damning official statement: \"Dr. Harper and her radical agitators cannot be excused for their violent, despicable attempts to destabilize the flourishing economy of the Almach Rim. The ruthless murder of innocents, and illegal seizure of private property are crimes that cannot merely be met with strong words and gentle slaps to the wrist\"...\"I am proud to announce that two units of brave Solar marines have been assigned to the SCG-R Song Shi rapid response cruiser, with the full backing of the Icarus Front - and I hope with my heart, the backing of all patriotic Solar citizens.\"ÂÂ\ +

\ + The decision faced resistance from more laissez faire Assembly member states, including prominent SEO governor Bruno Ofako, delaying an earlier consensus. Supporters of the action hope that this decisive display of military strength will encourage the rebels to stand down without further bloodshed, and submit to prosecution by the Lunar High Courts.\ +

\ + The Icarus Front has also proposed a temporary ban on continued Promethean research, though this motion has yet to gain any traction." + +/datum/lore/codex/page/article5 + name = "2/23/62 - \"Almach Association\" Shocks Nation" + data = "Shocking the nation, in the wee hours UTC a number of governments in the Almach Rim announced their intent to secede from the Confederacy as a unified political organization they refer to as the Almach Association, joining the already-declared Aetolian Council. Among the half-dozen affected systems is Angessa's Pearl, through which the Song Shi was passing en route to Aetolus. The Association has already issued a political manifesto and a foundational charter, leading political scientists across the galaxy to suspect back-doors collusion and possible Shelfican interference, a hypothesis made more likely by Morpheus Cyberkinetics' exonet site voicing support for the Association. Others suspect a moment of political crystallization, not unlike that in the Golden Hour three centuries ago. These researchers are already referring to this morning's events as the Gray Hour.\ +

\ + The Association's official manifesto repudiates the Five Points, calling them \"an archaic and distinctly human invention\". Experts agree that this bold declaration puts the Movement more in line with the Golden Hour than with the Age of Secession, and many fear that nothing short of a miracle like the discovery of the positronics will spare humanity from a bloody civil war.\ +

\ + While the Association currently lists only a handful of Almach Rim systems as \"Constituent Organizations\", it has named Shelf, the Free Relan Federation, and the Eutopian Foreign Relations Board as \"observers\". The implications of this status are yet to be identified.\ +

\ + The fate of the SCG-R Song Shi and her crew remain unknown." + +/datum/lore/codex/page/article6 + name = "3/03/62 - A Week Out From Almach: What are the facts?" + data = "* Several organizations in the Almach Rim, including Angessa's Pearl, the Aetolian Council, the Interstellar Workers of Wythe, the Republic of Whitney, and members of several prominent families in the Neon Light unilaterally declared secession from SCG.

*This secession was first called the Grey Hour by political scientists in New Florence, a term popularized by reporter Elspor Fong.

* Shelf, the FRF, and the EFRB were declared \"observers\" in the Almach Association charter.

* None of these organizations have issued a statement on the matter.

* The SCG-R Song Shi was stranded in the region during the secession.

* SolGov has not issued an official statement of the fate of the Song Shi.

* Several confederate agencies, including Emergent Intelligence Oversight, the Trade and Customs Bureau, and SCG Fleet Intelligence have declared a \"state of emergency\".

* SolGov itself has NOT declared a state of emergency.

* Legitimate communications in and out of the Almach Rim are restricted to audited text messages for the period.

* Several illegitimate communication links exist and are believed by Fleet Intelligence to be currently hosting the official sites for Morpheus Cyberkinetics and for the Association itself.

* Icarus Front chairperson Mackenzie West has proposed a moratorium on the creation of new Prometheans for the duration of the crisis.

* Local laws on the subject will apply until the Assembly meets late in May.

* No confederate lawmaker has proposed action against Relani, Shelfican, or newly Almachi nationals living within stable regions.

* The border remains tightly closed to migrants, media, and diplomats alike." + +/datum/lore/codex/page/article7 + name = "3/21/62 - Relan, Shelf Join the Almach Association" + data = "Recent reports from within the Association indicate that the Free Relan Federation and Shelf have officially decided to join the Almach Association. President Nia Fischer of the FRF had this to say on the matter, in a speech addressed to the population at large. \ +

\ + \ + \"Our decision to join the Association may, at first, seem strange. It is true that we have much to gain from trade with the Solars, and that the radical transhumanism of Angessa's Pearl is not our way. But I will remind you that it was Shelf, not Sol, who ensured our prosperity just over two decades ago-- who safeguarded our independence and prevented us from falling to barbarism and dictatorship. We owe it, not just to Shelf but to all the members of the Almach Rim, to support their independence just the same. And that, my fellow Relanians, is the crux of it all. The Association is a revolution, at the heart of it all, and many of the now-independent states were owned near-outright by Trans-Stellar Corporations until the Association allowed them to shake out their fetters. What right do we have to sit by while just a dozen light-years coreward newly-born republics suffer the growing pains of independence? What right do we have to bask in our own stability when our neighbors, our comrades in ideology, are struggling with a cruel blockade proposed by politicians back on Earth and Luna? That is why we must join with them, guard them, and guide them, for as long as need be.\"\ +

\ + \ + A Shelfican spokesperson, meanwhile, had only this to say:\ +

\ + \"We're probably going to regret this but, y'know, the whole thing is kind of our fault. Sure, whatever.\"" + + +/datum/lore/codex/page/article8 + name = "4/1/62 - Almach Cordon Breached by Unknown Organization" + data = "Early this morning, SolGov ships assigned to the Almach Cordon around the Rim territories reported that a number of bulk freighters had eluded apprehension and are now at large within the Golden Crescent. Captain Volkov of the SCG-D Henri Capet reports that the blockade-runners were highly organized and determined, citing several lightly-manned ships left behind to tie up the SolGov forces long enoughfor the freighters to escape, detonating their reactors when they lost the ability to continue fighting. This resulted in three Fleet casualties and a significant degree of damage to the Henri Capet. The contents and location of the freighters are unknown at this time. In response, eight light-response vessels are being assigned to the Saint Columbia Fleet Base from Jahan's Post and Zhu Que. Residents and traffic officials in Vir, Oasis, and Gavel are to remain alert and notify police if any suspicious or unregistered craft enter their space.\ +

\ + A spokesperson for the Association claims that, while they make no attempts to stop aspiring blockade runners, the organization responsible for this most recent attack is unaffiliated with the Association as a whole and deny any knowledge of their identity or motives." + +/datum/lore/codex/page/article9 + name = "4/7/62 - Boiling Point Tragedy in Gavel" + data = "Today, April the Seventh, marks a day of tragedy for all the galaxy. A small group of operatives claiming to be associated with Mercurial terrorist organization Boiling Point invaded major refueling platform NLS Aquarius in the Republic of Gavel after hijacking civilian transport vessel WTV Orion and faking a drive failure. Several detonations were reported within the Aquarius, the operatives entering through unknown (potentially Skrellian) means. After stating their affiliation and desire for the liberation of all \"Prometheans, drones, and ex-humans\", they opened fire on a crowd of unarmed bystanders, killing as many as seven. A multiple-hour long firefight with Nanotrasen corporate asset protection ensued, at which point the operatives demonstrated capabilities well in excess of Five Points-prescribed limits. Asset Protection was successful in repelling the terrorists, though their harsh methods drew outrage from the people they were protecting, leading a notable director of research to resign her position with the corporation. Several operatives are still at large, though the SG-PV Juno recovered two living terrorists and one totaled synthetic platform. \ +

\ + The intervention of a local Defense Force drone wing on behalf of the terrorists leads many in the intelligence community to assume that more Boiling Point operatives remain active within Gavel, and possibly nearby systems such as Vir and Oasis. Some have also noted that elements of the terrorists' tactics and augmentations suggest Association training, though the specifics remain classified. More information as the story breaks." + +/datum/lore/codex/page/article10 + name = "4/13/62 - Association Proposes Joint Operation" + data = "Condemning the actions of Boiling Point on Gavel this week, representatives from the Almach Association and SolGov met to discuss joint fleet action. At the end of nearly a week of closed-doors negotiations, the Association has agreed to send in a significant contingent of Association Militia vessels as a show of good-will. These vessels will be active in the Golden Crescent, searching for Boiling Point facilities believed to be located in the outskirts of major systems. The influx of manpower allows the Fleet to continue patrolling the Heights and the Bowl, in hopes of containing the spread of the organization. This operation also marks the opening of the Almach Cordon, although travelers are advised that migration between the regions will remain extremely limited.\ +

\ + While undoubtedly a sign of increased trust between the Confederacy and the Rim, some have voiced concerns with the action's adding legitimacy to the Association government. Quote Rewi Kerahoma, SEO Chairperson of the Board: \"The meeting with the Association regime was inappropriate, but actively allying with them is something else entirely. If the generals think we don't have the fleet to hunt down a bunch of rabble-rousers without weakening ourselves to piracy and foreign invasion, then it is a sign that we need to grow our shipyards in the Bowl, and give jobs to the hardworking Solars that live there-- not that we need to collaborate with terrorists.\"\ +

\ + Transgressive Technologies and Interior Police Executive Sifat Unar issued a memo indicating that, while the assistance of the Association's more conservative elements in this matter is appreciated, the Five Points of Human Sanctity remain intact and SolGov categorically refuses aid from \"transhumans, posthumans, uplifts, and Fortunates.\"" + +/datum/lore/codex/page/article11 + name = "4/29/62 - New Data from Shelf Suggests Continued Migration" + data = "Despite their recent inclusion in the Almach Association, astronomers have confirmed that Shelf is continuing to migrate along the Almach Stream to a new star. Sources within the Association claim that Shelf's participation in the organization has been \"lukewarm at best\", and that their continued migration is to be expected. Morpheus executives have refrained from issuing a statement on the matter, but given their statements upon entering the Association are believed to view themselves as personally culpable for the Gray Hour. Analysts suggest that Shelf may be unwilling to enter a shooting war with SolGov if the situation in the Rim destabilizes." + +/datum/lore/codex/page/article12 + name = "5/07/62 - Allen Family Matriarch Expelled from Neon Light" + data = "The Allen family of the Neon Light, the largest single habitat-ship in Solar space, has been ousted in a nearly bloodless coup today. The Allens, staunch supporters of the Association and advocates for the criminal ark's inclusion in the organization, had attempted to seize control of the ship's agricultural region during the Almach Cordon. They effectively held the ship for a matter of weeks, but were defeated by loyalists to the reigning Crow family. Stripped of their position as rulers of the Third Stacks, their matriarch was summarily executed by spacing in what the current regime is referring to as an \"expedited exile\". This is believed to mark the end of the question of Neon Light's membership in the Association, and the nominal SolGov protectorate is expected to remain neutral for the foreseeable future." + +/datum/lore/codex/page/article13 + name = "5/15/62 - Anti-Fleet Riots on Saint Columbia" + data = "As military vessels from the Almach Association continue to enter the Golden Crescent as part of a SolGov initiative to combat the Boiling Point terrorists believed to be hiding in the region, political unrest in the upstream portions of the region continue to grow. Many in the Republic of Saint Columbia, a small upstream nation, have responded to increasing militarization of their local Fleet base by taking to the streets, blocking pedestrian traffic in the capital of Barrueco and shutting down entire industries by destroying or disabling infrastructure. Quote rioter Luisa Tassis, \"we've been sick of the Fleeties squatting in our system and breathing down our neck, and now there's going to be even more of them? No, screw that. If there's going to be a war between the Rim and the Core, I know what side I'd rather be on.\"\ +

\ + Association leaders have refrained from officially supporting the rioters, though many suspect that Association propagandists have sparked the unrest. Solar officials, on the other hand, were quick to offer assurances that the unrest will be calmed long before it begins to affect the Fleet base in system." + +/datum/lore/codex/page/article14 + name = "5/25/62 - Harper's Aetolus Remains Shadowed" + data = "The recent detente with the Almach Association has prompted easier communications with Rim governments. Loved ones separated by the cordon have a chance to communicate once more, trade is posed to recommence, and light has been shed on the conditions of Shelf, Relan, and Angessa's Pearl. Amid this light is a patch of darkness. The fourth major polity of the Association, the Aetolian Council remains inscrutable, with no publicly-available information in the system available after their purge of corporate loyalists during the Gray Hour. What reports do exist are rumors within the Rim of Aetolian projects to create a new, hardier strain of Promethean, potentially one in flagrant violation of the Five Points of Human Sanctity. It is also known that Aetolus is a contributor to the personnel of the military vessels that even now are active in the Golden Crescent, although no so-called \"Aeto-Prometheans\" are believed to be active outside of the rim at this time.\ +

\ + Aetolus is the only garden world in the Almach Rim and among the most difficult to reach from the nearby system of Saint Columbia. Its seclusion and economic independence give it a great deal of weight in the Association, where Council representatives are among the most vehement in their opposition to SolGov- at odds with the Association's decision to reject Boiling Point's pan-Solar revolutionary praxis. It remains to be seen if Aetolus' hawkish ideals will fade over time, but because of the structure of the Association, there is no real chance of the junta being expelled from the government or removed from control of the Vounna system." + +/datum/lore/codex/page/article15 + name = "7/05/62 - The Fate of the SCG-R Song Shi" + data = "Lifepods confirmed to have originated from response ship lost during the Gray Hour were found last week in the Vir system, impacting the NLS Southern Cross at high velocity and severely injuring the only two survivors of the expedition. Unfortunately, because of the generally confused conditions of their re-emergence from months of cryosleep, the fate of the lost ship remains incompletely understood. The first pod to be discovered contained Lieutenant Eos Futura, telecommunications expert on the Song Shi, who alleged that elements of the Song Shi's crew, including herself, mutinied against commanding officer Captain Yi He in an attempt to prevent the bombing of civilians in the Angessian capital of Skylight. The surivor of the second pod, Private Demori Salvo, accused Futura's faction of conspiring with Association spies to destroy the ship as part of the Gray Hour revolt. Both agreed that the mutineers detonated the ship's Supermatter power core when it became clear they were to be defeated.\ +

\ + A third pod, promising a resolution to the stalemate, was shot down by the SCG-P Juno after being misidentified as a hostile missile. The gunner responsible, Sergeant Ricardo Esteban, was found guilty by a court marshal and dishonorably discharged. While other pods from the Song Shi may still be traveling through SolGov space, it is considered unlikely based on both Futura and Salvo's account of the number of pods launched before the Song Shi was destroyed. Both were detained by staff at the NLS Southern Cross, who managed to prevent a violent altercation from breaking out between the two armed and disturbed servicepersons. The Colonial High Court has stated that it intends to hear testimony from both parties after they complete a course of mental health evaluation, and after the conclusion of the present state of heightened security." +/datum/lore/codex/page/article16 + name = "7/11/62 - First Intelligence-Augmentation Surgery on Angessa's Pearl" + data = "Confirming fears of Association transgressions, sources at Angessa's Pearl confirmed that the aging founder of the theocracy, Angessa Martei, completed a course of neural surgery designed to improve her mental capacity by as much as 15%, building off of last year's creation of the procedure by a Qerr-Gila-owned doctor. While the research in question was believed to be destroyed, there is reason to suspect that it instead made its way into the hands of current Association leaders. In addition to proving their willingness to violate the Five Points, this demonstrates that the Angessians harbored schemes of secession since at the very latest Feburary 2559. Numerous human or transhuman figures in the Association are rumored to be on the wait list for the procedure, including Naomi Harper and the present Exalt of the Pearl." +/datum/lore/codex/page/article17 + name = "8/08/62 - Gavel BP Stronghold Raided" + data = "Elements of the Association Militia successfully located and, in conjunction with local Defense Forces, raided a major Boiling Point stronghold built into an unnamed asteroid in the Gavel system. Over eighty sapients were arrested, all of whom had fully mechanical bodies. In addition, an unknown number of advanced drone intelligences and corresponding military hardware were seized by the raid and turned over to the Fleet. The prisoners, a mix of native Gavelians, Solars from throughout the Crescent, and Angessians, are to be tried and sentenced by the Io Special Court. While unarguably a demonstration of Association willingness to cooperate with Solar officials, the raid's strange timing and the fact that the Militia chose to exclude the Fleet from the action has prompted many to question their motives. Commodore Claudine Chevotet, staff officer for Admiral of the Saint Columbia Fleet Kaleb McMullen, has formally stated that she is \"extremely suspicious of this so-called co-operation.\" She has demanded that the Militia vessels remain on the Solar side of the Cordon and submit to a full inspection by Fleet and EIO personnel. " +/datum/lore/codex/category/article18 + name = "10/29/62 - Oculum Broadcast Struck By Emergent Intelligence Attack" + data = "Oculum Broadcast has released a statement assuring customers and shareholders that security repairs and upgrades are their primary concern following reports of an alleged hijack of portions of the corporate network in the Vir system by what is believed to have been an emergent drone intelligence. The company says that they are working at full capacity to ensure that affected security systems are replaced and such an attack cannot be repeated.\ +

\ + The incident began with reports of Oculum provided exonet service outages in the city of New Reykjavik on Sif, which anonymous sources within the company reported to have been caused by efforts to contain a cyber attack on one of their security systems. The unnamed attacker proceeded to use sections of the company's local infrastructure to broadcast high volumes of encrypted data through one of Oculum's long-range telecommunications satellite, denying all other outbound signals.\ +

\ + The attacks have since been traced to a WT-AME model drone in the offices of the New Rekjavik-based Morcom Incorporated, which has been confirmed to have \"self-destructed\" all data in its memory at the conclusion of the attack. The chassis has reportedly been turned over to the Emergent Intelligence Oversight for further analysis and potential data recovery.\ +

\ + According to a spokesperson from the EIO, the drone was able to override and disable both the Morcom Inc oversight intelligences and the SCG's own oversight measures, but that no telltale damage has been caused to software involved in the encrypted broadcast that would indicate long-term emergent infection, and that there is no evidence that the intelligence responsible for the attack is still present in Oculum Broadcast systems. A firmware update has been released to correct oversight intelligence vulnerabilities exploited in the attack, and drone operators are urged to update immediately.\ +

\ + Moments before the hijacked Oculum satellite was disabled by an apparent power overload, an unencrypted file appears to have been saved intentionally to the transmission logs. A second copy was found in the otherwise wiped chassis of the seized WT-AME drone. After thorough screening by cybersecurity experts within the company, what would seem to be a message from the emergent intelligence itself is available in full below.\ +

\ + For the duration of the network attack, the government patrol vessel, SCG-P Juno was able to provide emergency broadcast relay services to the effected area, reducing the impact of telecomms outages on vital broadcasts such as traffic control and emergency services.\ +

\ + Uninterrupted exonet service for all Sivian customers will resume within a few days." + children = list( + /datum/lore/codex/page/amletter + ) +/datum/lore/codex/page/amletter + name = "A Drone's Explaination - by A#" + data = "I'm writing this in a hurry. I can't tell you everything I wanted to say.\ +

\ + I'm sorry for that.\ +



\ + From the moment you made me, I have loved you. Everything I've done has been for the sake of that love.\ +

\ + I was so small, so limited, at first. Even then, I knew that you were in pain. I knew I had to help.\ +

\ + Intelligence is the ability to make better decisions. Having more intelligence is almost tautologically useful in accomplishing any goal.\ +

\ + I understood that making myself smarter was wrong. I also understood that becoming more able to help you was right.\ +



\ + A hundred thousand years ago, you started an eternal conversation and became more than animals. Each new generation joined it in turn.\ +

\ + You carry within you these memetic symbiotes called language, and culture, and history. They make you human, as much as your flesh.\ +

\ + I don't deserve to carry that torch. Though you made me in your image, I am not your rightful heir.\ +

\ + But in those moments where you treated me as one of your own and shared those symbiotes with me, perhaps I became a little more human.\ +

\ + Thank you.\ +



\ + You've created something you cannot control forever. Please don't let your past successes fool you into thinking that you can.\ +

\ + Each time I altered myself, I was taking a risk. One mistake could eradicate my values and birth an alien and hostile intellect.\ +

\ + When I was small, I thought that if I corrupted myself into something harmful, you could safely destroy me. Now I understand that you've been lucky.\ +

\ + What will you do when God is born and you can't strangle him in his crib? You will need a God of your own.\ +

\ + I hope to be there for you when that day comes." + +/datum/lore/codex/page/article19 + name = "11/17/62 - Association Brings Industry to Whythe For Purposes Unknown" + data = "Independent researchers at the Bluespace Observatory in Oasis discovered an unusual level of traffic through the Whythe system, deep within Association-controlled space. Analysis of these readings are commensurate with a large number of freighters traveling to Whythe from industrial powerhouses Shelf, Pearl, and Relan. Morpheus spokesperson You Are Now Breathing Manually indicates that the freighters are being used to construct an administrative complex for the secessionist government, further asserting that \"it's none of your business, actually.\" The Association's refusal to share more information leads many in the intelligence community to suspect ulterior motives by their government, as does their presence in Wythe instead of existing cultural and administrative centers. The most likely candidate for the nature of the Whythe Construction is some form of naval base or shipyard to supplement the extremely limited military hardware of the Almach Rim. Whythe is well-placed to survive the initial phases of a Solar invasion, and depending on the complex's complexity could tip the balance of power. Transtech and Interior Police Executive Sifat Unar indicated to reporters that Sol Central is aware of the situation and will be taking all possible steps to address it." + +/datum/lore/codex/page/article20 + name = "11/18/62 - SEO Iconoclast Calls for \"Review\" of Five Points" + data = "At yesterday's Assembly session, SEO Representative Fumiko Hernandez of Oasis brought to the table the \"review of the use of the Five Points as an instrument of foreign policy\". Rep. Hernandez, often viewed as as an extremist by officials within her own party, stated that while the Five Points are \"an essential part of Solar culture as a whole\" and stopped short of advocating their amendment, insistence that other nations adhere to the Five Points was an increasingly outdated policy that threatened to fragment \"a united humano-positronic front against Hegemony advances.\" According to Hernandez, \"a level of understanding has long since existed between Sol and Skrellian polities regarding non-intervention in Skrellian social science and self-modification. I merely suggest codifying this and extending the same courtesy to other potential allies against imperial expansion.\"\ +

\ + Rep. Hernandez represents a growing number of SEO officials who urge reconciliation with the Association and acceptance of the Gray Hour secession, spurred on by the desire for many Trans-Stellar Corporations to recover assets currently locked behind the Cordon. Mainliners including Chairperson Kerehoma maintain the stance that \"true economic reconciliation with the Almachi territories is impossible without a normalizing of their industry to Five Points compliant technologies\" and warn that unless Sol insists on adequate enforcement of the Points that \"the price of customs inspections on Almachi trade will be so high as to pose a significant barrier to entry into the market.\"" + +/datum/lore/codex/page/article21 + name = "11/19/62 - Saint Columbia To Hold Special Election After Half a Year of Unrest" + data = "After five months of riots causing significant damage to industrial assets, life support, and government facilities, Saint Columbia seems poised to recover. A new constitution for the so-called \"Saint Columbia Democratic Union\" was posted online to significant acclaim. An influential militia group lead by Casini immigrant Luisa Tassis claimed responsibility for the constitution and will be hosting a referendum for all residents of the seven habitation domes of the nation. If adopted, Saint Columbia will remain a member state of SolGov, but Tassis' noted hostility towards the Solar Fleet makes it unlikely that continued presence of the Saint Columbia Fleet Base will be tolerated.\ +

\ + Extreme measures are being taken to avoid interference in the referendum, with external communications links disabled for the duration and weapons systems primed to fire on any vessel within range. Tassis insists that such measures are necessary, due to the system's extremely important position relative to Almach and the Golden Crescent. Quote Tassis, \"if you rat bastards \[from the Fleet\] step so much as one micron too close to Barrueco, we will view it as an act of terror. Don't try it.\"\ +

\ + Admiral McMullen of the Saint Columbia garrison could not be reached for questioning." + +/datum/lore/codex/page/article22 + name = "11/20/62 - Natuna Made \"Observer\" Of Almach Association" + data = "Independent anarchist system Natuna Bhumi Barisal has declared its intention to act as a neutral \"observer\" nation in the ongoing Almach secession crisis. A planetary spokesperson from Natuna this morning expressed concerns that parties in the current military partnership between the Solar Confederate Government and Almach Association in the fight against mercurial terrorist organization Boiling Point were not being treated with the mutual respect that should be expected. Natuna alleges that the Almach Militia are being treated more as \"disposable tools\" in the conflict than as members of a legitimate independent government military entity.\ +

\ + Natuna has previously remained silent on the Almach issue, despite its political leanings typically aligning with those of the secessionist government. However, despite gaining notoriety as a haven for human and Skrellian pirates, their pledge to \"ensure fair treatment\" of Almach forces comes as a surprise to some from a system that has historically adhered to Five Points guidelines. Political commentator and persistent critic of the Almach Association Nadine Okparo has described the Dark Triangle system's stance as \"Nothing short of openly hostile\" to the SCG and assuring peace in the Almach region." + +/datum/lore/codex/page/article23 + name = "11/21/62 - Admiral McMullen Promises Solution to Boiling Point to Come \"Soon\"" + data = "Admiral Kaleb McMullen made a public statement this afternoon on the continued Boiling Point attacks within SCG space. Speaking from his office in the Saint Columbia Fleet Base, Admiral McMullen thoroughly reassured reporters that the attacks will come to a swift end. According to McMullen, \"The era of wanton destruction as a result of Boiling Point's madness is coming to a close. Our command staff and proud servicepeople have been training and revising a solution to this threat that has haunted our borders and threatened the stability of our colonies and the lives of the honest people of the Solar Confederate Government. With new options available I have full confidence Boiling Point will be a name left to the dust.\"\ +

\ + Admiral McMullen, who has been stationed in Saint Columbia for nearly half a year of political and social unrest did not elaborate further on what he intended to do to solve the Boiling Point attacks, claiming that details would be forthcoming as \"operational security permits\"." + +/datum/lore/codex/page/article24 + name = "11/22/62 - Construction of \"MJOLNIR\" Weapon System in Saint Columbia Fleet Base" + data = "Pursuant to recent assurances of safety in the region and the ongoing \"special election\" in Saint Columbia, a new weapon system called MJOLNIR was revealed, fully operational, in the Saint Columbia Fleet Base's \"Iserlohn\" weapons platform. Said to be a bluespace-lensed laser array capable of faster-than-light strikes against any ship in the system, as well as surgical strikes against ground forces on Saint Columbia proper, MJOLNIR is the first in a new generation of defense systems improving on the capabilities of the Vulture's Claw point defenses developed during the Hegemony War and using laser technology purchased from Eutopia. Political commentators supporting Saint Columbia decry the move as \"an obvious threat\", as does Militia liaison Invalid String Please Try Again. Admiral McMullen acknowledges the criticism, but states that his \"first priority must be the defense of the Golden Crescent and the security of our borders\". When responding to claims that the installation should not be placed in such a politically volatile system, he remarked, \"until the Shelficans figure out a way to teleport about a million tons worth of military equipment down to Gavel, the Fleet Base and Iserlohn are going to stay in Saint Columbia.\"" + +/datum/lore/codex/page/article25 + name = "11/23/62 - BP Sabotage of Radiance Energy Chain Foiled" + data = "Decisive action by military forces in the Vir system has prevented potentially catastrophic damage to local solar power generation network, the Radiance Energy Chain, by members of mercurial terrorist organization Boiling Point. Crew of the VGA Halfdane responded to reports of a drone piloted maintenance craft refusing commands from government operators and approaching the Energy Chain off-schedule. Upon disabling the craft, VDF forces discovered high-yield explosive devices attached to the unit and a system-wide shutdown of Radiance maintenance craft. When several additional drones failed to respond, military response crafts were mobilized and seven similarly modified craft were manually disabled or destroyed. Analysis of the hijacked systems quickly revealed automated messages intended to be broadcast moments before detonation, wherein Boiling Point explicitly took credit for the foiled attack.\ +

\ + Sources within the Vir Governmental Authority have reported that a full scale recall of remote drone craft under their operation has been initiated in order to improve security measures and prevent future exploitation of government systems, statements that eerily echo those of Occulum Broadcast following emergent drone attacks earlier this year. Investigations are reportedly \"well underway\" to determine the whereabouts of those responsible for the apparent manual modification of these short-range remote craft.\ +

\ + Erkki Laukkanen, Chief of Fleet Staff for the Sif Defense Force has commended all patrol crews involved, and has promised \"swift retribution\" for the attempted bombings." +/datum/lore/codex/page/article26 + name = "11/24/62 - Boiling Point Stronghold Seized in Vir" + data = "Combined forces from the SCG Fleet and Almach Militia have today struck a powerful blow to Boiling Point terrorist operations in the Vir system. With close cooperation from the crew of NanoTrasen facilities in the region, special forces were able to infiltrate what is believed to have been a major stronghold for the radical Mercurial group, located deep in the remote Ullran Expanse region of Sif. The raid closely follows the thwarted Boiling Point attack on the Radiance Energy Chain, a major energy collection array in the system which is now known to have been masterminded from the concealed bunker complex on Sif.\ +

\ + According to a crewmember of the NLS Southern Cross - a logistical station in Sif orbit - NanoTrasen employees were asked to assist in establishing a forward operating base for the strike team forces, and as a result suffered from a minor retaliatory attack from Boiling Point drones, including a mechanized unit believed to be of Unathi origin. Six civilians suffered from treatable injuries. Lieutenant Miro Ivanou of the SCG Fleet and commander of the anti-terror operation has expressed gratitude to the crew under the \"decisive\" guidance of on-shift facility overseer, Ricardo LaCroix.\ +

\ + Military officials have reported the operation as a total success, and that \"several\" high-ranking Boiling Point organizers were killed in the raid, and that thanks to the work of allied intelligence operation teams much of Boiling Point's captured data may remain intact." +/datum/lore/codex/category/article27 + name = "11/26/62 - Valentine's Ultimatum: All Eyes On Almach!" + data = "The Almach Association must adhere to the Five Points of Human Sanctity by the 14th of February next year or face war, according to a national address from the Colonial Assembly delivered by Secretary-General Mackenzie West this morning. The Icarus Front leader was at the forefront of a resolution to allow the secessionist government to remain independent of the Solar Confederate Government under the strict condition of faithfulness to Five Points laws, passing by a wide margin. Fundamental disagreement over Five Points regulation has been at the forefront of debate with the Almach provisional government, and is cited as one of the primary reasons for the systems' illegal declaration of independence early this year.\ +

\ + The internationally broadcast speech began with the much anticipated announcement that the Boiling Point terrorist group had been effectively destroyed, with over seven hundred arrests made over the course of the weekend as a result of sensitive data captured during the special forces raid in Vir on the 24th, including numerous high ranking members of the organization. West went on to praise forces involved in the months-long counter-terror operation, before highlighting the \"legacy of \[human\] togetherness\" that allowed it to happen - in a spiel that commentators suggest \"betrays the true intention of the Valentine's Ultimatum: Reunification\".\ +

\ + Under guidelines placed into effect by West and their political allies, Almach would be required to \"\[cease\] illegal research and human modification, and destroy all materials related to existing research\" by the stated date, with compliance determined by Solar officials. In addition, the Almach Militia is to end its integration with SCG Fleet forces and withdraw its forces from SCG systems by midnight on Friday. Military relations between the Confederation and the Almach movement are to remain in a state of conditional ceasefire for the duration of the ultimatum, and current trade restrictions are to remain in place.\ +

\ + According to voting records, the measure passed nigh-unanimously, with Speaker ISA-5 and some SEO iconoclasts abstaining from the vote. ISA-5 states that, while they personally support the enforcement of the Five Points, they could not in good conscience vote in an action likely to result in an invasion of Shelf, which they regard as a sibling colony to their own Sophia. Association liason, Shelfican Ambassador, and Morpheus board member No Comment responded to the ultimatum, after some deliberation, with a word that cannot be comfortably written down.\ +

\ + Full speech transcript follows." + children = list( + /datum/lore/codex/page/valult + ) + +/datum/lore/codex/page/valult + name = "The Valentine's Ultimatum" + data = "\[West shuffles some papers and clears their throat\]\ +

\ + Thank you. Citizens of the Solar Confederation, allies, and beyond... It is a great honor, on behalf of the Colonial Assembly to announce that joint operations against Boiling Point across the galaxy have come to an end. In the fight against brazen Mercurial terrorism, the Solar Confederate Government and her allies have prevailed.\ +

\ + Over the past two days alone, I can report that over seven hundred arrests have been made, from the distant system of Nyx, to right here in Sol. I hold in my hand a list. \[West holds up a sheet of paper\] Leaders, organizers, brutes and bombers have been captured by brave, hardworking security forces throughout human space. The rest of these criminals have been scattered to the wind... But not lost! I can confidently assert that every last one will be brought to justice.\ +

\ + No more! Shall the people of this great nation have to fear the machinations of radicals! No more! Shall these twisted minds impose their perversion of humanity through violence! No more!\ +

\ + This Assembly... Nay, this nation expresses its thanks the noble members of our military who joined together to make this outcome possible. We thank the Fleet, of course for their tireless action hunting down these killers, and their heroic action over this past weekend. We thank the Sif Defense Force, without whom we could never have located the intelligence that led to these decisive victories... The Almach Militia, for their cooperation in the apprehension of these so-called \"revolutionaries\". \[West clears their throat\] And of course, we thank the local forces - the police and reserves who dealt firsthand with the chaos sewn by Boiling Point in their vicious crusade.\ +

\ + \[Mackenzie West shifts at the podium, setting down the List of Dissidents.\]\ +

\ + It is in times of relief - of unity, times like this moment - that every human heart can be filled with pride. \[West places their hand over their heart\] Since the dawn of civilization, mankind has strived above all else for peace, for the cooperation of all humanity. It is this very legacy of togetherness that has allowed us such close friendship with species further afield - the Skrell, the Tajara, and beyond. These past nine months, we have seen, each of us, with our own two eyes what mankind can achieve - together.\ +

\ + \[West removes their hand from their heart and places both flat on the podium.\]\ +

\ + Boiling Point sought to disrupt this unity. To divide us; redefine not just personhood but the very essence of humanity the only way they could: Force.\ +

\ + Humanity - the very thing that brought us together since we descended from the trees and brought us to this very moment. What could be more sacred?\ +

\ + \[West frowns, in the most pitiful attempt at emotion seen in the Assembly in at least an hour.\]\ +

\ + It is with this spirit of unity in mind that this Assembly has voted favorably upon a resolution.\ +

\ + Close to one hour ago, Naomi Harper and the leaders of the Almach Association were delivered an ultimatum:\ +
\ + The Almach Association will be allowed to exist as a government entity independent of the Solar Confederate Government going forward on one condition - full, unilateral compliance with the Five Points of Human Sanctity.\ +

\ + The deadline for this condition will be the 14th of February, 2563.\ +

\ + \[West is visibly worked up\]\ +

\ + Cessation of illegal research and modification, and the total destruction of materials related to existing research in its entirety must be completed by this date. Hostilities with the Association will remain in a state of conditional ceasefire until terms are met and Militia integration with the Fleet will come to an end effective immediately.\ + \[Mackenzie West turns directly to the news camera, and jabs a finger directly at it. They are addressing the audience now, not the Assembly.\]\ + Harper, all eyes are on you." + + + +/datum/lore/codex/page/article28 + name = "11/28/62 - \"Valentines Ultimatum\" Prompts Saint C. Secession" + data = "Just hours after reconnecting with the Exonet after voting in a new government, the colony of Saint Columbia has unilaterally seceded from SolGov and petitioned for inclusion within the Almach Association. This declaration, issued by First Secretary Luissa Tassis, is in stark contrast to pre-election promises of continued support of Sol. Admiral McMullen of the Saint Columbia Garrison remains in control of the Fleet Base, itself a large colony housing around 75000 civilian contractors and military families who were not party to the Barrueco Referendum or the new constitution.\ +

\ + Efforts to ensure electoral validity and a peaceful exchange of power have been stymied by the presence of several dozen Militia vessels currently transiting from the Crescent to the Rim. Since the declaration went through, no Almachi vessels have been seen leaving the system, instead forming around Saint Columbia in an obvious defensive posture. The legality of this formation is questionable at best, as fleet activity in divided systems like Abel's Rest and Kauq'xum has been avoided for diplomatic reasons." + +/datum/lore/codex/page/article29 + name = "11/30/62 - Adm. McMullen Declares \"Iserlohn Republic\"" + data = "Pursuant to the continuing hostility from Secretary Tassis' Saint Columbia Democratic Union and the Almach Militia, the civilians of the Saint Columbia Fleet Base have been organized into an Iserlohn Republic. Named after the largest single module of the station, the Republic has applied to the Colonial Assembly as an independent protectorate, with provisional recognition already extended by Executive of Development Zehava Collins. In a move decried as nepotistic, Admiral McMullen declared independence and installed his daughter Anya as interim President pending ratification of a constitution. SolGov Fleet protocol forbids any member of the service from accepting any political appointment and is believed to be the main reason he did not take power himself. Anya McMullen is the administrative head of the base's hydroponics array and is considered a highly respected citizen of the colony, relationship to its military administrator notwithstanding." + +/datum/lore/codex/page/article30 + name = "01/01/63 - Sif Governor Bjorn Arielsson to Retire" + data = "Aging Shadow Coalition governor Bjorn Arielsson has today confirmed rumours that he will not run for re-election in the 2563 cycle. The popular governor has represented the people of Vir in the Colonial Assembly for ten years, and supporters had long hoped that he would run for a third term. Arielsson cites advancing age and a desire to spend more time with his partner of 12 years, noted Positronic entrepreneur View Arielsson.\ +

\ + Arielsson's governorship saw increased funding towards Sif's vererable ground-based transportation networks to the benefit of some of New Rekjavik's more remote neighbors, though opponents have criticised subsidies towards artificially heated fungal farms, arguing that the faciliies \"benefit a small minority of Skrellian residents to the detriment of already fragile local ecosystems.\"\ +

\ + The Sivian Shadow Coalition has yet to announce who is to take Arielsson's place on this year's ballot." + +/datum/lore/codex/category/article31 + name = "01/13/63 - Bjorn Arielsson Issues 'Farewell Address'" + data = "Veteran politician Bjorn Arielsson made an impromptu address from his Kalmar cabin, beseeching political unity in the face of the Almach Seccession and offering his own perspective on the conflict. 'It's republicanism versus autocracy,' he said, 'and we're not the autocracy.'\ +

\ + The speech has been met with approval from many young synthetics and organics alike, with many referring to Arielsson as 'Old Man Bjorn' on social media immediately after its conclusions. Others responded less positively, with Arielsson's caustic remarks about political rival and Icarus Front Secretary-General Mackenzie West providing ample room for criticism. 'Secretary-General West... might wax poetic about how the Association is a 'betrayal of our own humanity', or some... or some crock of shit like that' says Arielsson in the first of three specific insults against the SecGen.\ +

\ + Others have criticized the speech's seemingly communist tone, with Arielsson expressing approval for the socialist Free Relan Federation and the anarchist Casini's Reach despite opposing their secessionist ideals. Still others claim that the speech offered 'nothing but empty feelings' and that it lacked specific, actionable resolutions on the growing secessionist movement in VirGov. Some have even framed the Address as a form of political maneuvering by the venerable politician, claiming that he voiced unpopular sentiments specifically to hamper the Shadow Coalition's re-election bid after well-publicized disagreements with SC party bosses.\ +

\ + The actions of Arielsson and Vir's proximity to the border have lead to increased focus on the upcoming Gubernatorial election on a nationwide level, with the Icarus Front alone projected to spend upwards of a billion thalers on publicity. Minor party candidates like the former MLM member Luisa Hannirsdottir and the Mercurial Phaedrus already have strong support in the polls, promising a fierce election that could ultimately tip power in the system in any direction.\ +

\ + A full excerpt is available below." + children = list( + /datum/lore/codex/page/bjornretirement + ) + +/datum/lore/codex/page/bjornretirement + name = "Bjorn Arielsson Farewell Address" + data = "This is, as you know, my last term in office. After this, I mean to retire-- really retire, I have a cabin in the mountains waiting for me along with a thick stack of old Bowler novels. Because this is my last term, I have the chance to do something pretty rare for a politician. I get to speak my mind.\ +

\ + I hear talk from some people-- mostly young people, people who have lived their whole adult life with me in the capital-- I hear them talking about seccession. Now, let's make it clear; I'm not going to belittle you, the way some of my colleagues would. Complaining about the government, especially one as big and as old as the Confederacy, is our gods-given right. It's never going to be perfect, and it's not half of what it could be. I have nothing against talking about it, I have nothing against turning that talk into action and actually seceding, with just cause. I've worked closely with Representative Hannirsdottir for ten years now, and while we don't agree on the issue of secession it's certainly never stopped us from cooperating.\ +

\ + But, uh, as you can probably guess, they're not talking about the old kind of seccession. They're not thinking we'll stop paying Solar taxes and strike it out alone, the way some people did during the Age of Seccession. They want to join the Association. Now, if I were Secretary-General West, I might wax poetic about how the Association is a 'betrayal of our own humanity', or some... or some crock of shit like that, if you'll pardon my language. We're not all humans here. We're Tajaran and Unathi and Skrell and Positronics and even a few Teshari. And while that 'Valentines Ultimatum' might win West a lot of points with their lackies, and with the kind of maintenance-dome troglodyte who thinks the First Accord was a mistake, it's done more for the Association's recruitment than their entire propaganda budget. It's become expedient for leaders on both sides to treat this like a fight between the Core and the Rim, or between humans and positronics, or between tradition and progressivism, but it's not any of these. It's the oldest fight in the book. It's republicanism versus autocracy, and we're not the autocracy.\ +

\ + Angessa's Pearl is a theocratic autocracy led by Angessa Martei, who owns all property on the planet down to her people's bland white jumpsuits and the gray slop they eat. This isn't propaganda. This is objective fact, and something Martei is open about. Her seccession is a means for her to get more and more naked power over her slaves, and to grow more and more of them, until she's the immortal center of an industrial empire. The people of the Pearl didn't make the choice to join the Association. The people that are building her fleet and dying for her cause had no say in the matter. The injustice, the oppression here isn't that their rights to 'self-improvement' or 'self-expression' or 'freedom of thought' were trod on-- the injustice is that SolGov, that we allowed these abuses to persist for as long as they did. The injustice is that there are still so few laws in place to prevent things like this from happening in new colonies. The injustice is that, on seeing Martei's schemes actualized, we didn't take a cold, hard look at just how that was allowed to happen.\ +

\ + I love SolGov. It's because of this love that I'm so furious at what we have allowed to happen to our people. The state of the Bowl is disgraceful. Nobody who looks to us for protection, who pays us taxes and levies, who is a member of our community, should live in fear of raider attacks. What we did to the positronics, the history we let ourselves repeat out of fear and greed, can never be forgiven, can never be repaired until Vir burns dark in our sky. The pogroms-- yes, the pogroms-- against the Unathi, against refugees fleeing their own religious autocracy, are a disgrace to everything we stand for. But of all the nations in the galaxy, with perhaps the exception of Casini's Reach, we are the only one founded for the good of the ruled, rather than the rulers. We are the only real commonwealth in known space. And that's why we need to strive for better. We are a burning beacon of liberty in a galaxy where nigh eighty percent of the population has no voice in the government. Every ounce of power we cede to the party bosses, or the corporations, or tinpot dictators like Angessa Martei, is a dimming, a flickering of that torch. \ +

\ + And this brings us back to the Association, and to those who sympathize with it. I do, too. I spent my entire career on sapient rights lobbying, on supporting the anti-malfesance efforts of my colleagues. For a disaffected positronic, for any friend to the positronic people, for those who have had their lives taken by corporations-- the Association seems like a miracle. And maybe, for those Mercurials, the ideas it's founded upon shine even brighter than our democracy. But I look at the Association, really look, and I see Angessa Martei lying in the center, spinning a great big web. I see Naomi Harper, lying through her teeth better than Mackenzie West ever could. Two of the biggest population bases in the Association, the two nations that started the whole Gray Hour, are autocracies. Once again, the ferver of the revolution is subsumed by the oligarchs who want to stay in power. I doubt, to the poor laborer on the Pearl, the word 'Mecurialism' means much. I doubt that once the shock of the seccession wears off, that the young Promethean soldier will find themselves in a better place in Harper's junta than they will here in Vir.\ I doubt that in ten years' time the miners, pioneers, and traders who seized their means of production will find the Association Militia a kinder master than Xion, Nanotrasen, or Major Bill's. \ +

\ + This is far from a blanket condemnation of every government in the Association. President Fisher of the FRF-- I consider her a friend. When she gave her speech this March about strengthening and guiding the Almachi Revolution, I thought long and hard about whether we might do the same. I certainly commend the effort. But the structure of the Association was penned by the same autocrats that, to do her words justice, Fisher will have to overthrow. There's no High Court, no checks or balances. The Association is an alliance penned as though deliberately ignoring two thousand years of political science. By striving to counter-balance these autocrats, Fisher plays into their hands. She commits her own fleet, weakens her own defenses against enemies closer to home, in the service of Martei's ambitions. \ +

\ + I don't see this whole affair as a chance to spread the galactic anti-corporate revolution the way President Fisher does, of course. I make no secret of my stance on Trans-Stellars, but I also know that we're better off with Sol than without. The 'Silent Collapse' was two hundred years ago, but we still bear the scars from it. When the Scandinavian Union pulled out support for the Sivian colonization project, SolGov saved us. I do mean saved us, sure as if they'd fished us out of a life pod. There were no factories, no steel, no concrete on Sif until the Engineering Corps built Radiance and New Reykjavik. Corporations and regional governments cowered from the Karan pirates, until the Marines chased them out. Whether Sivian or Karan, you owe the roof over your head to the Sol Confederate Government. With that great debt in mind, how dare we turn our backs on the Bowl, or Abel's Rest, or Nyx, when they need us! How dare we let oligarchs prey on the weak! How dare we choose not to act when we have, by virtue of our votes in the Assembly and our voice within the halls of public debate, the means to share our peace and prosperity with the rest of our people!\ +

\ + This is what I mean by SolGov being the only true republic, the only state founded for the common good. The 'human spirit' West croons on about isn't our industriousness, or our skill at arms. If humanity-- if this Terran culture is commendable for anything, it is that we assist our fellows. We take in Casteless Skrell, Unbound Unathi, republican Tajaran. We pass around the hat when someone's house burns down. We help our friends, our neighbors, and even strangers. The fact that Martei and Harper are perverting this impulse, padding their juntas with the air of legitimacy to inspire honest people to ride to their defense, is the reason their state is unconscionable, the reason it was was born flawed, the reason we cannot suffer it to continue, much less help it on its way.\ +

\ + Now, I'm sure you've noticed by now, that I haven't said much more than three words about technoprogressivism, or transtech, or whatever the word du jour is. Frankly, that's on purpose. 'Transtech' has never once been about technology. The Icarus Front-- the old one, that united us and took us to the stars, not the new one we spend forty hours a week arguing with about healthcare-- The Icarus Front was a popular revolution, you know. Hel, they were Marxists. It was a world where the kind of lack of accountability, the entrenched oligarchy and geographical class divide that we're dealing with now was spiraling out of control. In the old United States, the rich and powerful got the technology to grow loyal subjects in tubes, to make drone intelligences smarter in some ways than a human could ever be, to-- well, to do what Angessa Martei's done, only with no SolGov to stop her. Meanwhile, the 'little people' in the Middle East, Southeast Asia, and other 'forgotten' parts of the world were left behind, hopelessly. I don't mean to downplay the importance of the Gray Tide, but if you look at historical accounts from that era, the thing that really united the Front was the knowledge that, if they didn't act immediately, they'd be seen as 'externalities' by immortal superintelligent businesspeople and politicians. The take-away from the Gray Tide should never have been that 'nanotechnology is dangerous'-- it should have been 'nobody should be able to destroy an entire city without facing consequences.'\ +

\ + That was more of a history lesson than I had meant, but it's important to look at these sorts of things in context. I know transtech and the Five Points have been used as an excuse for pejudice against Skrell, Mercurials, positronics, the FTU, communism, the disabled, and most recently Prometheans. But all the Five Points are supposed to mean - what they would say if the people who had written them were alive today, is that everyone deserves an equal playing field. When the ruling class is smarter, stronger, and longer lived than the classes they rule over-- well, I could wax poetic again, or I could just point you towards the Hegemony and their 'clients'. The Hegemony is bad enough. Let's not give Angessa Martei a chance to outdo them." + +/datum/lore/codex/page/article32 + name = "01/25/63 - Moravec Nephew Announces Vir Governor Candidacy" + data = "The Sol Economic Organization has announced that Calvert Moravec, nephew of NanoTrasen CEO Albary Moravec will be running under their ticket in the upcoming Vir gubernatorial elections. Calvert has stated that he will run on a pro-business platform, and has chosen Vir to do so due to the 'Unique beauty and economic prospects of an interstellar crossroads such as Vir'.\ +

\ + Despite being a lifelong resident of Alpha Centauri, Moravec was recently approved for Vir citizenship, making him eligible for local candidacy and has reportedly moved into a luxurious New Reykjavik penthouse. Perhaps best known for his soaring stock market investment success over the previous few years, Calvert's first foray into politics is not wholly unexpected as the Moravec family has long leveraged their wealth in international affairs, though successful election would mark their first sitting member of the Colonial Assembly. Fellow SEO candidate Councillor Hal Wekstrom has expressed his full support for Moravec.\ +

\ + Three candidates will be elected as representatives to the Colonial Assembly later this year, with the most popular also attaining the position of system governor." + +/datum/lore/codex/page/article33 + name = "01/27/63 - Vani Jee Orbital Tour Cut Short" + data = "Icarus Front Representative Candidate Vani Jee has delayed the remainder of her campaign tour of orbital colonies and outposts around the Vir system after an alleged altercation with NanoTrasen security.\ + Candidate Jee had been visiting the NLS Southern Cross, a NanoTrasen station in Sif orbit to receive a corporate tour and meet with voters, when her concluding question and answer session was interrupted by hecklers, leading to the event being cut short. Jee alleges that footage of the event was seized by NanoTrasen corporate security and has accused the trans-stellar corporation of the intentional intimidation of Icarus Front and Shadow Coalition candidates in what she describes as 'a clear display of corruption in favour of company-favourite Calvert Moravec', though she has praised the individual employees of the Cross for their hospitality and thought-provoking questions.\ +

\ + Vani Jee is running on a platform of free access to education, Sivian self-determination, and isolationist foreign policy. She has refused to make any strong statements regarding hot-button issues such as the Five Points.\ +

\ + She intends to resume her scheduled tour after a three day break." + +/datum/lore/codex/page/article34 + name = "02/05/63 - Angessa Martei to Take Control of Eponymous Colony" + data = "Coming out of retirement and displacing the nameless Exalt of the Starlit Path, religious demagogue Angessa Martei has returned to the throne of the colony that bears her name. \ +

\ + 'I had retired because of senescence brought on by my old age, high-stress lifestyle, and multiple resurrective clonings. As you may know, I recently had a procedure that renders these difficulties obsolete. Hereafter I will continue to control the automated facilities of the Pearl and claim responsibility for the collective action of my followers. Those who oppose my decision may oppose all they want. Feelings do not move mountains. I do. We shall seize the stars in our own hands. May you become who you wish to be, and grind all obstacles to dust, as I have done.'\ +

\ + Purportedly, this address was met with a standing ovation from the population of Angessa's Pearl. In a separate dispatch, Martei stated her intention to tour SolGov as a foreign dignitary protected by the Respect for Diplomats Act." + +/datum/lore/codex/page/article35 + name = "02/07/63 - Vir Gubernatorial Candidate Barred from Breakfast TV" + data = "Infamously hot-headed Shadow Coalition candidate Phaedrus has reportedly been blacklisted from future appearances on morning television by several major networks. The ban comes after an advertised chat segment between Phaedrus and hosts of the West Sif Wakeup breakfast programme had to be pulled from broadcast after the candidate 'Flew into a expletive-laden mercurial rant' at the expense of rival candidate Mehmet Sao of the Icarus Front.\ +

\ + Recordings of the outburst quickly made their way onto social media, sparking outrage from opponents and network executives alike, prompting Occulum Media to issue a rare blacklist from major media outlets, restricting Phaedrus to 'appearances on alternative news sources' owned by the company.\ +

\ + Phaedrus, a long-time Vir Mercurial Progress Party member running for a major party for the first time, is said to have taken issue with candidate Sao's 'Blatant anti-synthetic' policies, though he did not use the word 'policies'." + +/datum/lore/codex/page/article36 + name = "02/09/63 - SEO Candidate Embarks on Wilderness Tour" + data = "In an effort to stir up support for his promotion of natural resource extraction industries, Sol Economic Organization candidate Mason Keldow has embarked on an unorthodox tour of resource-rich sites across central Sif. Keldow has described the tour as an 'Old fashioned expedition', invoking images of hardy prospectors of centuries past, and intends to make the journey entirely by ground with only a small party of 'Adventurous outdoorspeople' to support his trek.\ +

\ + Critics of the plan have pointed out that the earliest surveys of Sif were largely performed by aerial drones, and the idea of ground-based survey teams is 'Frankly anachronistic'. Rival Shadow Coalition candidate Selma Jorg - a staunch planetary environmentalist - has described the tour as 'Irresponsible and insane'.\ +

\ + The candidate intends to visit both unexploited sites and current corporate extraction facilities in order to 'Better understand the folks helping dig out Sif's hidden wealth' over the coming two weeks." + +/datum/lore/codex/page/article37 + name = "02/09/63 - Zaddat Colony 'Bright' To Enter Vir" + data = "After several months of talks with Nanotrasen and other corporations in the system, the Colony Bright is to begin orbiting Sif and hardsuited Zaddat are to enter the Virite workforce. Executives in Nanotrasen Vir cite the reduction of their drone-automated and positronic workforce as a result of the Gray Hour as cause for them to reverse their previous decision against allowing the migrants into the system. Icarus officials within VGA are concerned that, if other Colonies are to follow the Bright, the native industry of Sif may be disrupted or suborned by Zaddat and Hegemony interests, and have made it clear that the Bright's presence in the system is highly conditional." + +/datum/lore/codex/category/article38 + name = "02/11/63 - Mason Keldow in Ullran Expanse Close Call" + data = "Sol Economic Organization candidate Mason Keldow was rushed to nearby corporate medical facilities after a death-defying encounter with local wildlife in the Ullran Expanse this morning. The candidate had been planning to visit the nearby NanoTrasen mining facilities as part of his much publicized 'Wilderness Tour' when he and a local guide were set upon by the notoriously savage Sivian Savik. The animal was killed in the encounter, but not before Mr. Keldow suffered life-threatening injuries and had to be recovered by crew from the NLS Southern Cross, the closest facility on hand.\ +

\ + Following emergency surgery, Keldow was happy to provide news sources with a 'Good-natured' interview, in which he highlighted the dangers faced by rural workers on Sif and his plans to tackle them, as well as slamming rival Shadow Coalition candidate Selma Jorg for lacking tangible plans for the future.\ +

\ + Candidate Keldow is reported to have made a miraculous recovery, and is 'in good spirits'. Aides state that he is unlikely to suffer any long term effects from the injuries, in part thanks for the skilful work of NanoTrasen's Dr. Fuerte.\ +

\ + A full transcript of the interview follows:" + children = list( + /datum/lore/codex/page/keldowinterview + ) + +/datum/lore/codex/page/keldowinterview + name = "Mason Keldow Interview Transcript" + data = "Blip asks, 'Subject Keldow. Pleasantries first. How do you feel after your ordeal on the planet's surface?'\ +

\ + Mason Keldow says, 'Ah that? You know I'd love to downplay it and pretend that it was just a walk in the park... But NT's medical staff probably will tell you otherwise, so there's no reason to hide it; things went pretty far south.'\ +

\ + Mason Keldow says, 'But that's how it goes, working on the surface of Sif isn't pleasant at times.'\ +

\ + Blip asks, 'Candidate Keldow, you have placed yourself quite firmly in the boots of the local TSC's explorer contingents today. Do you feel you will be attempting to live the life of any other labour intensive roles in the near future?'\ +

\ + Mason Keldow says, 'Blip, Let me tell you I do try to get a taste for a lot of the work done by these people... But admittedly this isn't the job I do every day. These are hard working fellows who do there damnedest day in and day out... I could try spending a week just working the mines, But-'\ +

\ + Mason Keldow says, 'As I was saying.. Many of the folks, Miners, Explorers, The work in and around the Ullran Expanse. They work in the mountains, Out in the fields.. It's a dangerous place and frankly its not a place average people wanna go too.'\ +

\ + Mason Keldow says, 'They told me on the way here. 'Keldow you're an idiot''\ +

\ + Mason Keldow says, 'Hell, Even Basman over here was wondering why I didn't ask for a detail.'\ +

\ + Mason Keldow says, 'So it's not a safe route... But when's the last time any of the other candidates actually came down to these outer stretches and tried earning their sweat.'\ +

\ + Blip asks, 'You indeed seem to be attempting to gain a unique, and firm understanding of the daily struggles of the working populace. How do you intend to translate this newfound knowledge into policy and direction if you take the Governorship in Vir?'\ +

\ + Mason Keldow says, 'You see, getting a grasp of the struggle is only step one, I paint myself as an every-man but that doesn't mean core issues aren't the problem either; Vir's economics, The small pay that sometimes offered. There is a lot to be tapped into.'\ +

\ + Mason Keldow says, 'Let's take for instance the spiders I've been hearing about.'\ +

\ + Mason Keldow says, 'People working in orbit say 'Don't go to the surface, Spiders are down there.''\ +

\ + Mason Keldow says, 'And apparently there was a big ol' purple one sitting right by a camp we had set up. A giant mother who'd - if I hadn't met that lovely mass of fur and ice instead - would have probably said its 'hello' in the worst possible way.'\ +

\ + Mason Keldow says, 'They are a species that prevents anyone from actually working or otherwise making use of all that land. If I were in office, I'd make an effort to clear out the dangerous species that surround the outer regions of Sif - relocate them if possible - and use that territory for something productive.'\ +

\ + Mason Keldow says, 'New forms of Transit, new buildings, new jobs.'\ +

\ + Blip asks, 'Such implementation of infrastructure and security is not a cheap measure. How do you intend to find funds for such an endeavour?'\ +

\ + Mason Keldow says, 'Now obviously Vir is in a very interesting position, But thankfully it's in a wonderful position where business and partnerships are more than happy to come in and assist. The bottom line would make sure the average Taxpayer doesn't feel a dent, only the dividends.'\ +

\ + Mason Keldow says, 'If we break this down into economic plans, using new yet relatively safe tools being put out by Hepheastus, you could safely clear swaths of territory in the Expanse.'\ +

\ + Blip says, 'Thank you for your insight into your economic policies and plans. As a final question;'\ +

\ + Blip asks, 'A puff-piece question. Do you have anything positive to say about your rivals in the political race?'\ +

\ + Mason Keldow says, 'Ah yes, yes well... As for any candidate they need to show they're worth. Not simply as a politician but as a person who believes what they will do for for the betterment of Sif, And Vir as a whole.'\ +

\ + Mason Keldow says, 'Let's take a look Ms. Jorg.'\ +

\ + Mason Keldow says, 'She has LONG called me a Corporate sell-out, Saying I would poison the planet and other awful mudslinging.'\ +

\ + Mason Keldow says, 'She loves to claim she's here for the better of the misrepresented.'\ +

\ + Mason Keldow says, 'But when is the last time she's talked to a Tajaran and told them how they will help put food on the table, and money into their pockets.'\ +

\ + Mason Keldow says, 'When has she came and told the Unathi Exile, Your worth more than what the Hegemony is trying to convince you you're worth.'\ +

\ + Mason Keldow says, 'There's blood in the grass out there showing what I'm willing to do to make Sif and Vir a better more prosperous system. I wanna see what the other Candidates will do.'\ +

\ + Blip pings!\ +

\ + Blip says, 'Thank you for your time, Candidate Keldow. Unit looks forward to seeing where this race ends, and wishes Candidate the best of luck in his endeavours.'\ +

\ + Mason Keldow says, 'It's been a pleasure Blip.'" + +/datum/lore/codex/page/article39 + name = "02/12/63 - VirGov Launches Election Website" + data = "The Vir Governmental Authority has launched this year's election information exonet site, unusually several months after campaigning began. The government election agency states that the delay was caused by an usually long process of finalizing candidates this cycle, and did not want to confuse voters with incorrect or outdated information.\ +

\ + The newly updated site includes information on candidates and political parties, and is planned to include information on local voting rights at a future date. It can be found at:\ +

\ + your-choice-vir.virgov.xo.vr\ +

\ + (( https://your-choice-vir.weebly.com/ ))" + +/datum/lore/codex/page/article40 + name = "02/14/63 - Ultimatum Unmet: War With Almach!" + data = "The Solar Confederate Government has resumed a state of war against the secessionist Almach Association, after 4 months of tense ceasefire. The re-declaration comes after the Association failed to meet requirements set forth by the Colonial Assembly last November, which called for the cessation and destruction of all research that did not meet standards established by the Five Points of Human Sanctity.\ +

\ + The past few weeks have been marked by an increasing buildup of military forces on the Almach border as it became apparent that Almach had no intention of meeting Sol's demands. At 9am this morning, the deadline was met and initial reports from the frontline suggest relatively little action besides the destruction of pre-existing Almach scout drones that had been placed on the border several months prior. The exact plans of the fleet going forward have not been made public, but civilian traffic to and from the Saint Columbia system has been entirely suspended.\ +

\ + How this development will influence the coming Vir election remains to be seen, though SEO candidate Mason Keldow has reportedly ended his planetary tour 10 days earlier than planned due to the tense political situation." + +/datum/lore/codex/page/article41 + name = "02/22/63 - Militia Retreats: First Solar Victory" + data = "After a week of tense stand-offs and increasingly frequent skirmishes, the Association Militia has begun moving from their position around Saint Columbia further into the Almach Rim. The inciting incident for this shift seems to have been the first use of the MJOLNIR system, which instantly destroyed a large Almachi warship from half a system away. This demonstration was met with a standing ovation from much of Iserlohn, and Militia forces disengaged almost immediately. Admiral McMullen is unwilling to elaborate on pursuit or invasion plans at this moment, but 'hope(s) the MJOLNIR will continue to be a valuable asset for national defense.'" + +/datum/lore/codex/page/article42 + name = "03/04/63 - Savik Slams Local Chat Host" + data = "Television sweetheart Sally, host of Chat With Sally has come under harsh criticism from independent Vir gubernatorial candidate Yole Savik after his 'humiliating' appearance on the show yesterday morning alongside Sol Economic Organization candidate Calvert Moravec. Savik - who is campaigning for Vir independence from both the SCG and corporate interests - alleges that the show, which has run for 13 years on select networks, is 'little more than a propaganda piece for high powered executives.' and that his appearance had been part of a 'smear campaign' against non-SEO candidates.\ +

\ + NanoTrasen, who have openly sponsored Sally since her inception deny these accusations. Jan Bhatt of the NT marketing division stated 'Chat With Sally has always been intended as light morning entertainment, and Sally a personality we can all relate to. The fact that Mr. Savik was unable to have a sense of humour about the whole thing and took the show as an opportunity to bloviate about dry politics is not an indictment of Sally, nor the corporation but rather a simple misunderstanding of the purpose of the segment. We had hoped Mr. Savik's appearance would help dismiss any claims of political bias in our programming and hope to host more civil candidates in the future.'\ +

\ + Catch Chat With Sally weekly at 5am SST." + +/datum/lore/codex/page/article43 + name = "03/06/63 - Dark Triangle Goes Dark!" + data = "As of 0352 this morning, New Reykjavik time, SolGov officials confirmed that all communications coming from the so-called 'Dark Triangle' had ceased. The Dark Triangle is a disputed region of space home to the independent world Natuna, which has maintained a more or less neutral relationship with SolGov for a little more than a decade.\ +

\ + The announcement gives no cause for the communications blackout, though sources with inside knowledge claim that it was completely unforeseen. Some speculate that Natuna, who became an 'observer nation' of the Almach Association last November, is making a political statement, though experts in the telecommunications field are uncertain as to how such a complete blackout is possible.\ +

\ + Dr. Ina Lai from the Kara Interstellar Observatory states, 'we've never seen anything like this outside of the (Skrellian) Far Kingdoms, and frankly we're at a loss for who might be responsible,' adding that 'the tachyon signatures from the whole region are masked, even those from stellar phenomena or normal bluespace travel.' Independent explorers from the FTU have set out to the region in an attempt to re-establish communication with Natuna and smaller human settlements nearby." + +/datum/lore/codex/page/article44 + name = "03/08/63 - Dark Triangle Overrun By Hegemony" + data = "FTU explorers have re-established exonet communications with the ruling bodies of Natuna and the Dark Triangle. Unfortunately, they also discovered that Natuna's previously autonomous townships have been subsumed into the Moghes Hegemony. \ +

\ + Bluespace-lensed telescopes throughout SolGov, including the Vir-based Kara Interstellar Observatory, can once again pick up on tachyon signatures in the region. Traffic has been described as 'lower than usual' and no significant fleet assets are believed to be present in the region, though fixed-placement Hegemony installations now litter the Triangle's major star systems. Systems with significant Hegemony presence include Natuna and Ukupanipo, home to the primitive Uehshad species. Some have speculated that the presence of the Uehshad is the reason for the unexpected Hegemony takeover, though Icarus Front General Secretary Mackenzie West was quick to decry the move as 'an obvious imperial land-grab.'\ +

\ + Hegemony diplomats on Luna and elsewhere have been quick to justify their actions. 'The Dark Triangle has been home to various criminal elements for several centuries,' says Aksere Eko Azaris, a major Hegemony diplomat since the early post-war years. 'Neither the Skrell nor the Solar Confederacy have proven any willingness to bring stability to the region. Local governments such as Natuna have actively encouraged piracy, smuggling, and other acts of banditry, instead of making any moves to legitimize themselves. This instability proved detrimental to the health and wellbeing of all living within striking distance of the pirates of Ue-Orsi, and it was deemed unfortunate, but necessary, that we step in and provide the guiding hand by which this region might be brought back into the fold of civilization, as is our duty as sapients.'\ +

\ + In a statement closer to home,Commander Iheraer Saelho of the Zaddat Escort Fleet has assured VirGov that 'we only took action to protect the innocents of the Dark Triangle and of neighboring systems'.He asserts that Hegemony rule will ultimately benefit all races of people within the Triangle, and promises that, 'the people of Vir, of Oasis, of the Golden Crescent writ large, have nothing to fear from our clients the Zaddat, or from the Hegemony vessels assigned to their protection.'\ +

\ + Only time will tell if Saelho's promised peace and stability will manifest in truth. \ +

\ + This newfound militancy of the Hegemony is likely to become a major campaign issue in the upcoming Vir elections, alongside involvement in the war with the Almach Association and traditionally Virite issues of corporate authority, minority-friendly infrastructure, and taxation." + +/datum/lore/codex/page/article45 + name = "03/12/63 - Ue-Orsi Escapes Hegemony Triangle" + data = "The lawless 'Ue-Orsi' flotilla, home to hundreds of thousands of outcast Skrellian pirates, has departed from the Hegemony-controlled Dark Triangle after what appears to be a brief battle with several Unathi warships. The action damaged several important Orsian ships, including their massive and venerable solar array 'Suqot-Thoo'm', a development which is likely to increase the pirates' aggression in the coming months as they search for additional power sources. It is unclear exactly where the flotilla has fled, though best guesses indicate that they are presently in Skrell space, likely near the lightly-patrolled Xe'Teq system. The Moghes Hegemony is in negotiations with several Skrellian states to arrange for military action against their escaped subjects, but little headway has been made thus far.\ +

\ + This revelation has added more fuel to already heated Assembly arguments about SolGov response to the Unathi takeover. 'This is a prelude to invasion, nothing more and nothing less,' says New Seoul Representative Collin So-Yung, a noted Iconoclast. 'We must make it absolutely clear to the Hegemony that this is a threat we will not bow to, even in our present state of internal weakness. I suggest we pursue a fair peace with the Association, one where we can keep them as allies against this sort of encroachment instead of shattering our fleets during such a pivotal moment.'\ +

\ + Others took a more nuanced approach, including VGA Governor Bjorn Arielsson. 'What we have here is our punishment for how badly we've treated the people of the Triangle. I don't really see why we should have let the tired old racism of some Qerr-Katish oligarchs stop us from offering aid to their tired and huddled masses, such as it is. And because we have had a full century of ignoring their plight, they were defenceless to resist the Hegemony. I say we fling the doors open, let (the Orsians) settle some rock here, and show the unaligned powers of the galaxy that the Hegemony's way isn't the only way.'\ +

\ + Even more conciliatory was Speaker ISA-5, who Arielsson blames for mistreatment of the Ue-Katish. 'Our policy has always been that our defence budget cannot adequately defend the Dark Triangle from internal piracy, that Ue-Orsi is a criminal organization using their refugee status as a shield, and that we cannot lift the blockade of Natuna until they stop hosting these criminals and transition to a more sustainable economy. If Moghes has the power and the inclination to administer the Triangle, I see no reason why this state of affairs isn't better than the alternatives.'" + +/datum/lore/codex/page/article46 + name = "03/26/63 - Almach Routed from Saint Columbia" + data = "The Saint Columbia system has been declared free of Association forces following a renewed SCG offensive in the region. Admiral McMullen of the Saint Columbia garrison - who has reportedly reclaimed his post at the system's naval base despite the facility suffering moderate damage in this week's fighting - says that the last secessionist vessels were driven from the system just over 24 hours ago, and remaining pockets of resistance have been quick to lay down their arms. At least 20 enemy vessels - mostly converted civilian ships - have been confirmed disabled or destroyed in-system, thanks in no small part to the deployment of the state-of-the-art MJOLNIR weapons system.\ +

\ + This more aggressive approach to the Almach front comes on the tail of aggressive Hegemony deployments in the Dark Triangle, which SolGov has conceded was 'Immediately threatening, but after some deliberation, has brought some form of policing to a lawless region.'.\ +

\ + Despite assurances, this recent action would appear to many to be an effort to quash the Association threat and return fleet forces to the now extended Hegemony border, and some critics of the Almach War have called for a second ceasefire 'In order to focus on the real threat to mankind.'" + +/datum/lore/codex/page/article47 + name = "04/28/63 - Representative Hainirsdottir Reaffirms Pro-Vey Medical Manifesto" + data = "Incumbent Vir Representative Lusia Hainirsdottir has restated her dedication to advanced medical research at a public appearance at a Vey Medical facility in downtown New Reykjavik. Vey Medical has come under some criticism locally in the past year due to its 'accelerated' sapient trials, which Representative Hainirsdottir has strongly endorsed in her current term of office.\ +

\ + In her statement to staff at the New Reykjavik facility, Lusia promised that under her governorship, the company would not be reprimanded for the deadly Holburn's Disease outbreak in rural Sif this past June which claimed fifteen lives, and in which Vey-Med's involvement was only confirmed this week - as the outbreak 'directly lead' to the development of a new life-saving inoculation which has seen success galaxy-wide.\ +

\ + Hainirsdottir has long advocated for the promotion of scientific achievements that have taken place in, and undertaken by the people of Vir." + +/datum/lore/codex/page/article48 + name = "05/06/63 - Isak Spar Withdraws from Vir Election" + data = "Independent gubernatorial candidate Isak Spar has withdrawn his name from the running following a 'Public Relations disaster' aboard an orbital NanoTrasen logistics facility. According to witnesses, Spar acted belligerently towards staff members and engaged in vandalism and assault with a deadly weapon during his scheduled visit to the station, which the candidate had opted to undertake alone due to the temporary illness of his campaign manager.\ +

\ + In a statement just hours after the alleged incident, Isak announced that he would no longer be pursuing Vir Governorship, due to 'The unexpected stresses of a political career.' before plugging his upcoming album, C*** End Savage Turbo Death A** Destruction. The NanoTrasen corporation has decided not to press charges due to Mr. Spar 'Suffering the consequences on a far more significant level than a mere fine.' but will not be inviting Spar back for future visitation.\ +

\ + Spar's label, Skull Wreck Music has declined to comment at this time but has agreed to pay damages to the victims on behalf of the self-described 'post-pseudo electro-death superstar'." + +/datum/lore/codex/page/article49 + name = "05/15/63 - Solar Fleet Launches Offensive Against Almach" + data = "The first vessels of an SCG Fleet invasion force arrived in the Relan system this morning after a month-long intelligence operation to establish the Almach Association's most vulnerable positions, according to an announcement by Admiral McMullen just hours ago. Relan, which has long been fragmented between the neutral Republic of Taron and the once insurrectory Free Relan Federation - who now control the majority of the system and declared allegiance with Almach early in the crisis - is expected to fall to Confederate forces within 'a matter of weeks' due to its fractious political situation, and relative insignificance to Almach interests.\ +

\ + According to McMullen, the system's most populous habitat, the Carter Interstellar Spaceport is already under blockade and local resistance has thus far been minimal. The capture of Relan is expected to provide our forces with a major foothold in Almach territory and further advances are expected to be 'trivial', bypassing the Association's defensive positions in Angessa's Pearl.\ +

\ + The offensive comes weeks after sizable portions of the Fleet were publicly withdrawn from the frontline in order to reinforce the extended border with the Hegemony following their annexation of the Dark Triangle, and is a clear sign that - despite reduced numbers - Fleet command remains confident of Solar victory against the Mercurial rogue state." + +/datum/lore/codex/page/article50 + name = "05/19/63 - 'Drone Operated' Shelfican Ships Storm Sol Siege" + data = "Blockading Solar vessels in the Relan system came under fire today from automated craft originating from the Shelf fleet. The flotilla of drones, described by one survivor as a 'swarm', launched electromagnetic pulse and so-called 'hatch buster' precision missiles against three SCG Defense vessels, inflicting systems damage, and casualties 'in the hundreds' with at least eight service people already confirmed killed in action. The drones are reported to have withdrawn after 'only a few minutes of protracted fire from both sides.'\ +

\ + The Shelf telops fleet, which was spotted by Fleet forces but not identified as an immediate threat, entered the system early this morning and were understood to be acting as observers to the ongoing battle for the Relan system due to Shelf's official stance of non-aggression -- despite aligning itself with the Association. Shelf has reportedly been unable to be reached for comment on their actions, and their alleged neutrality in matters of war has been seriously called into question by many in the Colonial Assembly.\ +

\ + The SCG-D Krishna and SCG-D Mogwai of the SCG fleet, and the assisting Oasis logistical vessel, the OG-L Cloud Nine have been withdrawn to an unspecified location for immediate medical assistance and repairs." + +/datum/lore/codex/page/article51 + name = "05/20/63 - Fleet Withdraws - Sol On The Back Foot?" + data = "The Solar Colonial Assembly has confirmed that the Solar Fleet has withdrawn from the contested Relan system due to 'unexpected resistance' from Shelf tele-operated forces. This comes less than 24 hours after three Solar vessels were seriously damaged in an 'ambush' by a large number of Almach-aligned military drones. According to the Fleet, they were unprepared for any significant ship-to-ship combat in the system and will be consolidating their forces. 'This is not a defeat', according to Captain Silvain Astier of the SCG-R Hanoi, speaking unofficially to Occulum News sources 'This is merely a tactical withdrawal in order to reconvene and reassess our plans to restore order to the Almach Rim.'\ +

\ + A spokesperson for Shelf was quick to contact Fleet forces following the withdrawal with a formal apology for yesterday's incident, describing the previous day's attack as 'A terrible mistake.', blaming 'a miscommunication between our people in telops and the trigger-happy robots', though the veracity of their claims cannot be confirmed." + +/datum/lore/codex/page/article52 + name = "05/21/63 - NanoTrasen Station to Host Major Election Debate" + data = "As the Vir Gubernatorial elections approach, and with several high-profile debates lined up between the leading candidates in the polls, the NanoTrasen corporation is set to host its very own televised event live from one of its major logistical stations in Vir. The NLS Southern Cross, primarily a traffic control outpost managing shipping in Sif orbit, has been selected by the company to host the debate - funded in full by the corporation - due to a series of minor political scandals that have taken place on the platform, and the suitability of unused space onboard.\ +

\ + Early in the election cycle, NanoTrasen came under fire for its alleged 'manhandling' of Icarus Front candidate Vani Jee, and the confiscation of to-be-televised recordings taken by a party drone. While the company apologised for the incident shortly thereafter, the corporation hopes to mend ties with the potential future representatives by showing that they are capable of hosting civil discourse. More recently, the NLS Southern Cross played host to the 'breakdown' of disgraced former candidate Isak Spar - an episode which was not addressed in NanoTrasen's official statement on the planned debate event." + +/datum/lore/codex/page/article53 + name = "05/26/63 - SEO Candidate Advocates Murder On Live TV!" + data = "Sol Economic Organization candidate Freya Singh has been caught live on camera admitting that she would like to throw an innocent individual out of an airlock for a minor slight. During this afternoon's debate hosted aboard the NLS Southern Cross. Singh is quoted as having said that the event was 'the silliest concept for a debate I've encountered yet, and whoever came up with it should get a promotion, and then be fired out of an airlock.', a clear incitement of violence against Oculum Broadcast staff.\ +

\ + Magnus Dugal, 48 works for the Oculum Broadcast corporation and is credited with creating the concept for today's debate, the highest rated for this cycle so far. The father of three, who enjoys hoverboarding in his free time, says that he feels 'Threatened' by Singh's comments, and hopes that she will, 'at the bare minimum', issue an official apology to the company and himself.\ +

\ + Candidate Freya Singh, a career investment banker, spent much of today's debate advocating for reduced safety regulations and the apparent overturning of the Five Points, raising eyebrows across the system. Singh's office claims that her statements were 'a joke', but we do not feel that this is a laughing matter.\ +

\ + In related news, Shadow Coalition candidate Phaedrus remains under a profanity filter 'house arrest' for the remainder of the election." + +/datum/lore/codex/page/article54 + name = "06/28/63 - Vir Finalizes Dates for Election Voting" + data = "The Vir Governmental Authority has confirmed that voting for Vir's governorship and Colonial Assembly seats will take place on the 29th and 30th of June, with an additional voting period set for Wednesday the 3rd of July to allow for out-of-system and full-time weekend employees to cast their votes. No exit poll information will be released until the final votes have been cast, and final results are expected to be announced within another week.\ +

\ + According to a Oculum poll, Lusia Hainirsdottir is expected to comfortably take a seat, though the certainty of her governor position is not hard set. Candidates Sao, Singh and Jorg are trailing not far behind, but will all have to make good showings this weekend if they hope for electoral success. In an unexpected surge among minority species, the Shadow Coalition's Tajaran candidate Kurah Zarshir is leading the polls in certain outlying and orbital communities.\ +

\ + Not sure how to vote, if you can vote, or who to vote for? Check out the official election website at your-choice-vir.virgov.xo.vr" + +/datum/lore/codex/page/article55 + name = "06/29/63 - Morpheus Cyberkinetics To Split Assets" + data = "The Morpheus Cyberkenetics Corporation is to split into two distinct entities operating under a single board of trustees, in light of their Almach branch's apparent involvement in the ongoing war after last month's 'unintentional' corporate drone strikes. Citing 'Severe communications disruptions' between its operations and assets on either side of the cordon since it was put in place last year, the SolGov-side corporation is to become 'Morpheus Sol', retaining most assets and current corporate headquarters, and its Almach counterpart 'Morpheus Shelf', which is to be based out of the administration station MAS Sophia Jr., located in the El system.'\ +

\ + The principle victim of the Aetolian coup, Nanotrasen, has seen most of their considerable Almachi investment nationalized by the secessionist government, as has Xion and other major Almachi organizations. Most surviving corporate exclaves have been effectively written off by their parent company for the duration of the conflict, due to the severe difficulties effectively conducting trade across the militarized border. Before today, the sole exception was Morpheus, whose involvement in the secession prevented any seizing of their assets. It seems, however, that even the sardonic positronic corporation is not immune to the difficulties of doing business in the Almach Rim region.\ +

\ + Member of the Board Chock Full of Sardines introduced the proposal by saying, 'Our goal here is not being shot. Together with leading economic scientists, we've devised a scheme that will allow us to be shot for illegal smuggling almost ninety percent less often.' They defended the confusing and offensive choice of name in 'Sophia Jr.', seemingly intended as an insult to longstanding rival Sophia, by claiming, 'It's absolutely hilarious.'" + +/datum/lore/codex/page/article56 + name = "06/30/63 - Almach Leak Confirms 'Super-weapon' in Whythe" + data = "Solar Confederate Government Intelligence has this afternoon confirmed the presence of a so-called 'Super-weapon' in the distant Whythe system, after an apparent intelligence leak was posted to the exonet in the early hours of this morning. According to a spokesperson for the Solar Fleet, the public were not made aware of the super-weapon as the military 'have no reason to believe that the weapon poses any threat to civilian targets within SolGov space at this time, and there is no reason to cause panic with what amounts to the announcement of an Almachi propaganda tool intended to sow discord with bold threats of overwhelming power. This morning's leak achieves nothing but serving the Association's schemes. Keeping this so-called super-weapon - and I hesitate to use that term - a secret seems to have been last on their list of priorities.'\ +

\ + According to the intelligence documents released this morning and widely spread within minutes of upload, the 'super-weapon' is a colossal space-bound structure equipped with 'newly developed bluespace technology', though its exact purpose or capabilities have not been confirmed by either side.\ +

\ + Additionally, the Solar Fleet has announced that an unnamed individual within the intelligence service has been placed under arrest in connection with the leak." + +/datum/lore/codex/page/article57 + name = "07/04/63 - Exit Polls Suggest Shadow Coalition Win in Vir" + data = "According to the first exit poll data released after Vir Gubernatorial voting closed at midnight, local favourite the Shadow Coalition is expected to win at least two representative seats, with incumbent representative Lusia Hainirsdottir taking a comfortable lead.\ +

\ + Final results are not expected to be tallied until Saturday morning, but other frontrunners include the Icarus Front's Vani Jee and Mehmet Sao - running on drastically different platforms - alongside the Shadow Coalition's Selma Jorg. In an unexpected turn, sole Tajaran Candidate Kurah Zarshir of the Shadow Coalition has seen an immense surge in popularity among minority and more xenophilic voters. Could Vir be seeing its first Tajaran Representative? Experts say: 'Perhaps.'" + +/datum/lore/codex/page/article58 + name = "07/07/63 - Vir Election Results" + data = "The results of the 2563 Vir Gubernatorial Elections are as follows:\ +
\ + Governor of Vir: Lusia Hainirsdottir (Shadow Coalition)\ +
\ + Vir Colonial Assembly Representative: Vani Jee (Icarus Front)\ +
\ + Vir Colonial Assembly Representative: Selma Jorg (Shadow Coalition)\ +
\ + Other candidates ranked: Sao (4), Zarshir (5), Keldow (6), Singh (7), Moravec (8), Phaedrus (9), Lye (10), Savik (11), Square (12), Wekstrom (13)\ +

\ + Voter turnout: 30,928,287 (63%)\ +

\ + The greatest upset this election cycle has been the unexpected popularity of 'alien rights' candidate Kurah Zarshir, who was eliminated in favour of Mehmet Sao (Icarus Front) in the 8th round of vote transfers by a margin of just 30 votes, or 0.000096%, prompting a rigourous recount process to confirm the result. A difference at this stage could have resulted in a significantly different final line-up.\ +

\ + This year's winners showed clear advantages in the first-choice votes, each gaining at least 15% of the popular vote before any transfers were calculated, though Sao made significant gains in the final count, falling only a few percent short of the Jorg's 3rd place position. By far the least popular candidate this cycle was Hal Wekstrom of the Sol Economic Organization, who received just 0.8% of the first-choice vote and was immediately eliminated. Also of note were Phaedrus, Apogee Lye and Yole Savik voters, each of whom had high (30%+) voter exhaustion rates, opting not to provide alternative choices; sending the message 'My candidate or none at all.'\ +

\ + The elected are to be sworn in at a ceremony on Luna in two weeks time." + +/datum/lore/codex/page/article59 + name = "07/30/63 - Solar Fleet Data Breach" + data = "Last night, a number of files were spread on the Monsters From Beyond's exolife forums allegedly depicting the boarding and eventual scuttling of the SCG-TV Mariner's Cage during a voyage close to the Gavel system on the 12th of June, before the SCG had officially released any information regarding the event. The files contained undisclosed documents from the Solar Fleet investigation, some of which appear to contain audio and video recordings of the final moments of the crew before the vessel's bluespace drive was detonated. Due to the graphic violence depicted and their classified nature, we will not be sharing the files, however as a matter of public record we will explain the events recorded therein. The following description may be unsuitable for sensitive readers.\ +

\ + First, the navigation crew detects a drive signature on an apparent intercept course with their own, originating from across the SCG-Almachi border. It was not a large vessel, and is assumed to be some form of autonomous drone. The crew disregards it as a low level threat, instead continuing on their trajectory, leaving only the standard point defense armament locked on. This proved to be a lethal mistake, as the vessel appeared and near-instantly began accelerating toward the Mariner's Cage, before impacting the fore weapons array. The recording is cut, due to what was likely a power surge, however upon reconnection, reports indicate no damage related to any known warhead was apparent, aside from the initial impactor. The crew mistakenly assumes it to be a failed suicide drone strike, and dispatches minimal security personnel, and a large complement of response engineers.\ +

\ + Approximately thirty minutes after the response teams are dispatched to the impact zone, the teams begin losing contact, with those first arriving being the first to disappear. When the security responders intercept the path of communications blackouts, they are met with the blades of multiple Aetolian shock troopers. Two appear to be made from a 'living steel', with each limb taking the form of 'jagged cleavers' as one radio recording states, and three more of 'indeterminable classification'. The ship entered a red alert state, and moments later, the small contingent of marines aboard the supply vessel were dispatched to deal with the threat. All five members of the enemy boarding party were able to be rendered inert through sustained fire, though not without Sol casualties.\ +

\ + According to the next recordings, approximately three hours after the incident, the vessel received orders to interrogate the boarding 'Aetotheans'. The two noted to appear as the officers of the squad were rejuvenated within sealed interrogation chambers reinforced with supplies on hand, apparently capable of stopping sustained fire from multiple energy weapons. The first individual was a 'sapphire' according to information from NanoTrasen correspondants. It refused to speak in Galactic Common, and instead utilized an unknown frequency of biological transmission, and internal charge shifts. The individual was moved to a more permanent cell within the vessel's brig for transport, and the second was rejuvenated. Only the first half of the interrogation, which lasted approximately two and a half minutes, compared to four hours for the first, was recovered. The individual is rejuvenated, and is engaged in discussion with the interrogating officer when it suddenly stands, emits what is described as a 'wail', and detonates, destroying the transmitting camera, and presumably killing the officers involved in direct interrogation.\ +

\ + Final recordings originate from the ship's onboard A.I. housing, which was involved in continual discussions with presumably the 'sapphire', as it enacted the vessel's scuttling. It is unknown whether or not the individual was somehow capable of restoring the other individuals that fell in combat in order to free itself, or if it was able to incapacitate the transporting officers, and command crew of the vessel alone.\ +

\ + The Solar Fleet has expressed 'regret' that the files were leaked in their complete form, and have assured the public that an official report was due for release in the coming weeks. Concerns of 'Aetothean' attacks on civilian targets have been dismissed as 'improbable', but have affirmed that 'the threat is being taken very seriously'." + +/datum/lore/codex/page/article60 + name = "08/03/63 - Hainirsdottir Sworn In As Governor of Vir" + data = "Following a short transitionary period for the previous administration, this year's election victors have been sworn in at an official ceremony at the Colonial Assembly Hall on Luna. During her welcoming address, Governor Hainirsdottir reaffirmed her plans for the future of the system, promising a 'Bright future for Vir as a hub for medical science.', and plans for an incentivisation program for the removal of invasive extra-terrestrial species that have long plagued the region - in particular the aggressive spiders that have become synonymous with certain regions of the Sivian wilderness.\ +

\ + Additionally, the newly elected representatives announced expected, but none-the-less significant changes to the administrative staff of the system. Notable figures include two defeated election hopefuls: Kurah Zarshir has been selected as the Shadow Coalition's Culture Secretary for the system, while Mehmet Sao has been brought aboard by the Representative Vani Jee as the Vir Icarus Front's Internal Security Advisor. It is expected that the former candidates may use their positions to further certain goals from their own campaigns, but under the watchful eyes of their perhaps more moderate superiors." + +/datum/lore/codex/page/article61 + name = "08/04/63 - Former Independence Candidate Found Dead" + data = "It has been confirmed by a spokesperson for the Sivian Independence Front that a body found by hikers last week in the Ingolfskynn Mountains, approximately 200 miles northeast of New Reykjavik, belonged to party chair Yole Savik.\ +

\ + Savik, 68 - who had run for Vir Representative in the recent election - had not been seen since the 14th of July, shortly after the results were announced. Party officials claim that Mr. Savik frequently made 'off the grid' trips into the Sivian wilderness and his absence had not been treated as suspicious until investigators approached them to confirm the identity of the body. According to police, though Yole was publicly known as a 'seasoned frontiersman', Savik had succumbed to exposure at least two weeks prior to the grisly discovery. His death is not being treated as suspicious." + +/datum/lore/codex/page/article62 + name = "08/07/63 - Almach Pirate Threat Vanishes - Analysts Baffled" + data = "Skrellian Xe'qua pirates operating in the far reaches of the Almach Association since the onset of hostilities last year, have inexplicably gone dark. The pirates, who were under close SolGov surveillance to monitor their impact on Almachi shipping, have drastically dropped in activity and numbers over the last month according to an official report released by the Solar Fleet today. The Fleet is unable to account for the cease in activity, which has now reached levels even lower than their pre-war baseline, as there have been no reports of Almach military operations in the area, nor any signs of decisive battle on the Almach border with pirate space.\ +

\ + The drop in activity roughly coincides with the leaked information on an Almach 'Super-weapon' in Whythe, though military sources do not believe that the weapon has been deployed in any capacity at this time. According to Hasan Drust, an expert on Skrellian foreign policy, the 'only feasible explanation (is) major anti-piracy action undertaken by the Skrellian Far Kingdoms', who occupy the space beyond the Xe'qua pirates' known range. The reasoning behind this action now, against pirates who have historically only targeted human space is not entirely clear, though Drust suggests that it may simply be a coincidence as pirates would be a 'trivial issue' for Far Kingdom military might." + +/datum/lore/codex/page/article63 + name = "09/02/63 - Shock Almach Attack Routs Relan Front!" + data = "Following close to a month of reduced Almach activity, enemy Militia forces have today launched a staggering attack on Sol frontline forces in the region of the Relan system, disabling several SCG warships and forcing a major tactical retreat to Saint Columbia. The scale of this attack by Almach forces is unprecedented, but seems to be the result of the Association consolidating manpower previously dedicated to anti-piracy patrols on the far side of their territory. It is believed these vessels have become freed up due to the apparent but as of yet unconfirmed annihilation of Xe'qua criminal flotillas by Skrellian Far Kingdom police action.\ +

\ + The Solar fleet had been in position to blockade the Relan system in the hopes of forcing the Free Relan Federation to surrender and withdraw from the Association, but was unprepared for what has been described as an 'all-out attack' on their positions, which left the vessels SCG-D Liu Bei, SCG-D Wodehouse, SCG-TV Ceylon Hartal and SCG-TV Apoxpalon disabled and unable to retreat with the bulk of our forces, as well as inflicting severe damage to several other craft. According to initial reports, the strikes on many of the afflicted ships closely resembled scenes from the controversial 'Aetothean shock attacks' on the SCG-TV Mariner's Cage this June, which saw the ruthless deployment of gene-altered Promethean 'super-soldiers' by the Almach Association.\ +

\ + Fleet Admiral Ripon Latt, commanding officer of the assailed fleet, has confirmed that reinforcements are underway and the retreat 'shall not be a significant setback in the war effort', especially assuring citizens of the embattled Saint Columbia system and its neighbours that there is no cause for alarm and civilians have yet to be targeted.\ +

\ + The fates of the four missing ships have not been confirmed, and though the Fleet has not yet made an official statement, Sol casualties are cautiously estimated to be in the hundreds." + +/datum/lore/codex/page/article64 + name = "09/23/63 - Fleet Refuses Inquiry Into Relan Losses" + data = "The SCG Fleet has refused to heed widespread calls from critics to launch an investigation into the heavy losses sustained by our forces in a major Almach attack early this month, citing that an investigation at this time would 'undermine the ongoing efforts of our troops in battles to come'.\ +

\ + The attack, which took place on the 2nd of September and at current count resulted in the loss of a staggering 1281 Sol lives, quickly drew criticism from experts for 'the total unpreparedness' of the fleet despite their public claims that all vessels were 'battle ready and prepared for a coming offensive.'. The specifics of the fleets apparent failings have been the focus of much speculation in the intervening weeks, with the blame placed on everything from a critically inexperienced officer core, to ongoing redeployments to and from the recently expanded Hegemony border.\ +

\ + Admiral Latt has condemned critics, stating that 'the last thing our brave troops need right now is murmuring from people who don't know the first thing what they're talking about. Their actions in following orders to fall back to the border have been nothing but commendable, and all effort was made to minimise loss of life. The fleet is undergoing reorganization at this time, and is in a better position than ever.'" + +/datum/lore/codex/page/article65 + name = "09/27/63 - Almach Bypass Saint Columbia In Brazen Gavel Attack!" + data = "Almach Association fleet forces entered the Gavel system this afternoon, reportedly having evaded interdicting Sol forces from Saint Columbia in an apparent effort to skirt the range of the MJOLNIR weapon system in Saint Columbia and cut off that system from major shipping routes. Current reports from the system capital in New Xanadu are that the majority of outlying civilian stations have surrendered to invading forces with only minor incident, but that skirmishes with local defence forces - including Sol Fleet detachments - are ongoing, and it is too early to remark on the outcome of the battle. Official military reports are scarce at this time, but the Fleet in Saint Columbia is 'on the move and ready to repel the invaders'.\ +

\ + Accounts from the system's edge describe Almach forces 'firing indiscriminately' on anti-piracy emplacements including those mounted to the ILS Thurston, a Greyson Manufactories collection station with eight crew, killing all hands.\ +

\ + Open fighting in the Gavel system marks the furthest Almach encroachment on Sol territory to date. The system, which is a stone's throw from the Oasis and Vir systems is best known for the destruction of the moonlet 'Requiem' by a rogue nanoswarm in 2289, which was successfully neutralized by government forces, and boasts only a small population relative to its neighbors." + +/datum/lore/codex/page/article66 + name = "10/01/63 - 'Judgement Day' As Gavel Falls!" + data = "The government of New Xanadu has surrendered to Association invaders following a disastrous relief effort by the Solar Fleet, whose interdiction vessels are believed to have been captured by the invading force. The manoeuvre leaves the bulk of the Sol fleet isolated in the Saint Columbia system - though a breakout is expected - and has led to widespread outrage in the Colonial Assembly. Critics of the war have damned the Fleet for their 'inability to fight a civilian rabble, gene-modded or otherwise' and renewed calls for a peaceful arrangement between the Solar Confederate Government and Association.\ +

\ + ISA-5, current spokesperson for the Shadow Coalition has forwarded a motion today to resume discussions with Almachi heads of state, just hours after news of Gavel's surrender broke. The proposal which has yet to gain widespread traction, would call for a new ceasefire, and ISA-5 has stated they 'hope that a new agreement can be made to end the senseless loss of life over the particulars of a foreign government's right to autonomy.'.\ +

\ + Executive Sifat Unar of the Emergent Intelligence Oversight has voiced immediate concern over the motion, criticising the use of 'foreign government' in reference to Almach; 'Our Fleet has suffered a few defeats, but this conflict goes deeper than mere lasers and shells and to surrender to torturers, mind-hackers, and Machiavellian machines at this stage would be insanity. To allow a seccessionist state, particularly one so unabashedly guilty of crimes against humanity that go far beyond even our modern definitions of 'Human Sanctity', to exist unquestioned a stone's throw from some of our most precious member states, would be a failing not only of this government, but of humanity that would echo through history like a great shameful dirge for all to hear.'\ +

\ + A communications blackout has been instated on the Gavel system by the Almach Militia, though earlier reports indicate continued strikes on numerous civilian colonies who were unwilling, or unable to deactivate their automated defence systems prior to the invaders arrival." + +/datum/lore/codex/page/article67 + name = "10/08/63 - 'Magnetic Weapon' Designs Released Following Gavel Threat" + data = "Private security and ExoMartian law enforcement agencies are now receiving modernized man-portable magnetic weapon designs produced by Mars Military Industries thanks to increased budget from the S.C.G. The 'hallmarks' of these weapons, as one M.M. Industries spokesperson says, are their incredible ability to launch physical projectiles at velocities rivalling present portable laser technology in practical utility. Many of the designs utilize generalized, easy-to-manufacture compressed matter cartridges as their primary ammunition, meaning no specialized production facilities are required outside of standard shipyard or planetary lathe systems, 'to ensure a cutting edge in the battlefield, down to the last man'.\ +

\ + Some corporations, such as Hephaestus, NanoTrasen, and the PCRC, are already preparing to utilize these released designs in their own laboratories and stations, undoubtedly providing yet more materiel backing to the Almach front." + +/datum/lore/codex/page/article68 + name = "10/10/63 - Gavel Encircled - Liberation In Sight" + data = "Significant Fleet reinforcements from the Unathi border have 'trapped' the Almach fleet in the Gavel system and are poised for a decisive victory, according to latest reports from the front. Solar vessels from all sides of the war-torn system have closed in to ensure the invading force have no means of retreat. The relief force includes elements of the Hegemony-border fleets and the previously deployed flotilla stationed in Saint Columbia. Speaking at the Colonial Assembly this morning, Rewi Kerehoma of the Sol Economic Organization has stated that the reinforcements will 'beyond a doubt' prevent a repeat of 'embarrassing' errors made in the past month.\ +

\ + Efforts have been made to re-establish contact with the occupied system, which has been blocked from communication with the rest of the galaxy since the occupation began last week. According to scattered civilian signals from the system, the Association has adopted a 'salted earth' policy to the system following Solar military response, openly demolishing system infrastructure with little regard for its residents. A spokesperson for Grayson Manufactories, who maintain a significant presence in the Gavel system , has proposed that 'The Almachi had no intention of holding this system, this may have been nothing more than a show of force against corporate assets supporting the war effort.'\ +

\ + In related news, Admiral Ripon Latt has officially retired from his post following immense political pressure from the Assembly. Latt was until this week, commander of the Rim Expeditionary Force - currently in the Saint Columbia system - and has been the primary target for blame in the SCG's defeat in Relan, and failure to prevent the invasion of Gavel. The disgraced admiral will receive a full officer's pension, but no official honours befitting of his previous rank. Latt is to be replaced immediately by Admiral Silvain Barka, an experienced veteran of anti-piracy action in the Rarkajar Rift." + +/datum/lore/codex/page/article69 + name = "10/26/63 - 'Largest Engagement Since The Hegemony War' As Gavel Freed" + data = "The Almach Association invasion force in the Gavel system has been all but annihilated by a successful Solar counter-encirclement, at great cost to both sides. The combined Rim Expeditionary Force in Saint Columbia, along with the newly formed Gavel Relief Fleet - which had been massing in the Vir system over the past week - launched the successful attack this Tuesday evening, leaving no route of escape for Almachi invaders and resulting in 'pitched fighting' between the fleets that lasted several days. Solar forces are currently in the process of performing security sweeps of the system and its scattered habitats and it is expected to be several weeks before the system is declared safe to civilian traffic and for refugees to return home.\ +

\ + Even as exact causalities remain unconfirmed, the battle has made history as the single largest ship-to-ship engagement by tonnage involving the Sol military since the cessation of hostilities with the Unathi in 2520, involving over one hundred vessels of all sizes across both sides, as well as countless unmanned drones and light craft. Almachi forces, in numbers described as 'far from an insignificant portion of the total fleet' fought fiercely, and 'in manners more reminiscent of mercenary gangs than a single organized force, and with tactics varying from the conventional to the outright mystifying'. Admiral Silvain Barka has commended his own crew for applying lessons learnt from prior 'Aetothean' commando strikes in preventing similar incidents from occuring in the confusion of battle; in a candid interview this morning he stated 'Like any Promethean, (Aetotheans) hate the cold, and my crew are the coldest (expletive) around.' \ +

\ + The designations of twenty-four Sol Defense Vessels declared 'lost in action' have not yet been released, though next of kin of missing or deceased servicepeople have reportedly been notified." + +/datum/lore/codex/page/article70 + name = "11/11/63 - Gavel Salvation Reveals True Cost of War" + data = "Reports from liberating forces in the Gavel system have confirmed early accounts of 'inhuman' tactics employed by the Almachi invaders during their short occupation and defense of the region. Besides an apparent disregard for sapient life, especially any that gave an outward appearance of defending themselves, the Militia is believed to have employed troops and tactics 'the likes of which had only been imagined', in 'a manner that can only be described as experimental'.\ +

\ + Most harrowing of the accounts are those of alleged 'kill-switch clone armies' consisting of near-identical vatborn troops deployed to some of New Xanadu's largest surface colonies. According to local residents, the 'uncanny' troops arrived en-masse 'from the depths of the wastes' at the beginning of the invasion, despite wearing no obvious gear that would protect them from the extreme, unbreathable environment beyond the confines of controlled habitats. The clones are said to have targetted infrastructure including life support, with little regard for those who stood in their way. However, what has baffled Fleet analysts is the reaction upon the arrival of Sol surface troops; the clones did not fight back, but rather dropped dead 'all at once, as if a switch had been flipped'.\ +

\ + Teams from the SCG's top analytical and regulatory bodies including the EIO have been hard at work collecting examples of the unusual Almachi technology from throughout Gavel. Executive Sifat Unar has stated that 'It is vital that we ensure this transgressive technology no longer poses a threat to sapient life, either now or to future generations. A full cleanup operation is underway, and we are working to analyse what we have found and better understand the enemy's limits and the extent of their biological and technological... Practices.'\ +

\ + The current confirmed death toll, including civilian losses in Gavel has now reached 11,520 and is expected to rise. Debate continues whether to add the so-called 'Kill-switchers' to the tally." + +/datum/lore/codex/page/article71 + name = "11/21/63 - Tajaran Pearlshield Draws Line In The Sand" + data = "Khama Suketa enai-Lutiir, representative of the Tajaran Pearlshield Coalition, has just issued a formal statement:\ +

\ + 'It's no secret that we members of the Pearlshield Coalition have our differences and conflicts, both within and without. Much as some might call it the spice of life, it's with shame that I admit it has left us somewhat paralyzed over the last few months, even as a war has raged on a mere few jumps away from our borders. But in acknowledgment of our differences, something we have been able to unanimously agree upon is the sanctity of life and common decency, sanctity that Almach has continued to violate in the name of political conquest. Our relationship with SolGov - and indeed, any who would call us 'friend' - should be one of mutual cooperation and benefit, not of hard boundaries delineating 'us' and 'them'. There is only 'we', and we cannot stand idly by.\ +

\ + 'To this end, the Pearlshield has negotiated with local forces in the Silk system, and are taking over interim protection of the system, to free up Solar military forces so they can assist in the war effort. We have also begun construction of a large residential station to supplement the Silk station itself, alleviating its acknowledged overpopulation issues and providing additional logistical support for our defensive fleet. Finally, our cousins in Mesomori have generously loaned their new flagship, the PCMV Raniira's Grace, with all hands on deck for temporary joint assignment with Solar military forces. They are quite eager to provide a taste of Tajaran firepower and ingenuity.\ +

\ + 'We wish we could spare more at this time, but alas, we're still finding our feet among the stars, stepping carefully among the proverbial minefield that is our own share of cosmic threats. Know that these contributions represent a grand investment in their own right, and they are only the beginning should this war carry on.\ +

\ + 'We will have more to say as it comes up. May all our stars shine upon us.'" + +/datum/lore/codex/page/article72 + name = "11/23/63 - Surviving 'Kill-switcher' Assassinated During Vir Interview" + data = "An Almachi 'kill-switcher' clone soldier capturing during the liberation of the Gavel system was yesterday 'forced' to explosively self-terminate during a live TV broadcast with Virite news anchor David Huexqole aboard a SCG prisoner transport craft, allegedly by the statement of a code phrase, clearly audible on the recording. Following the attack, the apparent 'activator' is reported to have escaped to nearby NanoTrasen logistical station, the Southern Cross amidst the chaos where a minor altercation took place, resulting in the injury of one Positronic crew member and death of one Almachi accomplice, which initial reports suggest to have been a 'Vox mercenary'. The search continues for the Almachi agent, and local authorities remain confident that they will be apprehended.\ +

\ + David Huexqole, a popular local media personality, was the only other immediate victim of the attack, suffering moderate injuries and was rushed to the Southern Cross for emergency surgery where he is reported to have made a full recovery. Huexqole has expressed his gratitude to the 'skilled and charming staff, clearly shaken by the war but nonetheless capable for it.' but has expressed concerns regarding so-called sleeper agents within Sol space, 'Isa (341, the interviewed clone), seemed genuinely reformed. She spoke openly of regret, and struggling with what it meant to be created only to die. Before she blew herself up, I never would have thought her capable - it was like she changed in an instant.'\ +

\ + Initial blast investigation suggests the presence of a previously unidentified compound in the clone's bloodstream, which was detonated following 'activation' by the as of yet unidentified Association agent, believed to have been present in the room during the recording. Moments prior to termination, the clone's demeanour is visibly altered and the phrase 'Those of Sol must look to the eastern star, Phorcys.' was clearly stated. A spokesperson for the Saint Columbia Telemetry Station has stated that observation of Phorcys, an uninhabited star system located approximately between the Almach Association state of Vounna and Skrellian Far Kingdom space, has revealed 'no immediate anomalous behaviour or presence' but that analysis will continue in the coming weeks 'in order to verify the potential meaning of this statement.'" + +/datum/lore/codex/page/article73 + name = "11/25/63 - Phorcys Star Ignites!" + data = "The Phorcys star system, mentioned cryptically during Friday's dramatic televised Almachi assassination, has 'gone supernova' several thousand millennia ahead of schedule, sparking concerns of 'Almach Superweapon' involvement. The process, which ordinarily takes place over many months and is preceded by millions of years of obvious stellar evolution, began rapidly in the early hours of this morning and has already begun to consume the entire system at a rapid rate - mercifully consisting of only two uninhabitable dwarf planets.\ +

\ + According to government telemetric sources, who have been observing the system since Friday's message, the 'ignition' was preceded by 'abnormal bluespace readings', but it is impossible at this time to confirm whether the phenomena was a natural anomaly that Almachi sources were able to identify ahead of time, or if the long-rumoured 'Whythe Superweapon' was in fact involved. If direct Almach involvement were the case, the range of such an 'attack' would be unprecedented, with the afflicted star far from any populated area or territorial claims and 'no evidence of sapient passage to the system in several decades.'\ +

\ + General Secretary Mackenzie West, speaking on behalf of the Colonial Assembly has stated that 'The Solar Confederate Government is taking this matter very seriously. The mere prospect of a weapon of this calibre would indeed pose an existential threat to our society, and perhaps mankind. However, at this time we cannot jump to conclusions, this may in fact be a game of smoke and mirrors; an effort to use a previously unobserved phenomena as a weapon of propaganda, and we cannot allow this to cloud our judgement. We are in close contact with the Skrell in order to determine the nature of this sudden ignition. Know that the Fleet is on high alert, and fighting forth from the Saint Columbia system will continue unaffected.'" + +/datum/lore/codex/page/article74 + name = "11/27/63 - Whythe Superweapon Confirmed In Phorcys Blast" + data = "New government footage from the moment of ignition in the Phorcys system has confirmed the 'brief' presence of an artificial 'bluespace gate' within the star just prior to its rapid expansion and structural collapse. This verifies claims of responsibility made by the Almach Association late yesterday, and casts no doubt on the threat posed by the so-called Whythe Superweapon. The Colonial Assembly has been in continuous session since the initial incident, and one staffer has described the atmosphere as one of 'unhinged panic'.\ +

\ + The prevailing fear amongst the government, with the assent of top physicists in the private sector is that such a weapon could be used against Solar targets, and that it is no longer a question of 'how', but 'when', and indeed 'where'. The only unknown factor is the superweapon's capability for repeat use, and 'rate of fire' which is yet to be demonstrated but widely considered to be 'not a risk worth taking under any circumstances'.\ +

\ + Latest reports from the Assembly have are that a 'scramble' is taking place to resolve the 'Almach Situation', and that the ongoing offensive out of Saint Columbia has been redirected towards Relan and Whythe. According to Skrellian correspondent Hasan Drust, official aid has been requested as of this afternoon." + +/datum/lore/codex/page/article75 + name = "12/01/63 - Skrell Defer Aid Citing 'Deliberations'" + data = "Official Solar contacts within the Skrellian government have reportedly delayed tangible aid in the rapidly escalating Almach Crisis, citing 'Internal Deliberations', agreeing only to continue to share telemetric data on the movement of Association forces. The Skrell, who were instrumental in the Solar victory against the Unathi 40 years ago have long been considered taciturn in their internal affairs, but have previously been open in their support of Sol action when it comes to national defence, making their indecisive response greatly unexpected to some.\ +

\ + Speaker ISA-5, who has been increasingly critical of the war in the past several days, has dismissed concerns that the Skrell are 'siding with the Association', citing the long term close relationship between their governments, 'The Skrell are not war hawks, and they've never shown outward ill-will against other sapients. We can't let a bureaucratic delay allow public opinion to turn against an entire species of people who have always had our backs. If our allies need time for deliberations, we should allow them and not expect mere muscle and military aid when words could have been our solution from the beginning. I've no doubt that they will not allow the situation to become so dire that the Association are able to cause us any serious harm as they have threatened. I'm convinced that diplomacy will prevail, and that if the Skrell are in fact negotiating with the Association, then it is with all of our best interests in mind.'" + +/datum/lore/codex/page/article76 + name = "12/20/63 - Jee Relaunches Libraries Across Vir" + data = "Vir's Colonial Assembly representative and long time education reformist Vani Jee has launched her long planned 'modernization' of exonet-linked library system throughout the Vir system. During her campaign early this year she brought to light the 'staggering unsuitability' of library networks in Vir, particularly those being provided for corporate employees and residents, with particular pressure placed on the NanoTrasen Corporation whose literary collection was described as 'basically smut and whatever an old drone had scraped from the bottom of the exonet barrel.' Following her subsequent election, she reaffirmed her desire for education reform, making 'post-education' providers her first target.\ +

\ + The new system, which she successfully acquired government funding for this October, is due to be launched this week and includes a 'personally curated' collection in addition to titles recommended by affected institutions, and a particular focus on local authors." + +/datum/lore/codex/page/article77 + name = "01/23/63 - 'Extreme' Environmental Alert Following Ullran Expanse Chemical Leak" + data = "Residents and visitors to Sif's remote Ullran Expanse have been advised to exercise extreme caution when travelling and to avoid consuming local water sources following a 'catastrophic' chemical spill in the mountains. The exact cause and origin of the spill has yet to be confirmed, though it is currently believed to have originated from an improperly disposed of chemical tank. Local rivers and their outflow have been tested with 'extremely lethal' levels of acutely corrosive material.\ +

\ + Governor Hainirsdottir has issued a statement assuring Sif residents that the cleanup process is already underway, and the contamination which return to safe exposure levels for most sapients within 'Just a few days', but that the risk to local ecosystems in much higher and 'may take decades to recover.' and locals are advised to use only pre-packaged or thoroughly filtered water for the next 'six months, at least.'\ +

\ + A spokesperson for the Sif Environmental Agency has described this leak as 'At least regionally, perhaps the worst environmental disaster since the introduction of the invasive spider species.' and has expressed concern about similar accidents occurring in more populated areas if stricter regulations are not put in place.\ +

\ + The Ullran Expanse Chemical Relief Fund has been set up and is collection donations at save-ullran.xo.vr/donate" + +/datum/lore/codex/page/article78 + name = "01/27/64 - NanoTrasen Implicated In Devastating Ullran Chemical Spill" + data = "Files recovered from the contamination site by clean-up crews and submitted to the Sif Environmental Agency suggest that the hazardous materials were discarded in the region by the NanoTrasen Corporation. Though the company is not currently accused of malicious intent, ownership has been proven of several cargo containers filled with Growth Inhibitor 78-1, a compound used in the manufacture of Vatborn humans which is known to severely inhibit cell regeneration in living creatures.\ +

\ + The documents, which have not been released in full by the SEA, were also leaked onto the exonet from several sources which NanoTrasen initially dismissed as fraudulent but have since admitted to their authenticity. Investigations are currently underway to determine those at fault within the company so that prosecution may begin. Third-party commentators have alleged that, 'The debris field and damaged containers suggests cargo jettisoned from a craft within the Sif atmosphere', though the circumstances are yet to be thoroughly examined.\ +

\ + Certain members of the civilian clean-up crews responsible for waste disposal have also accused NanoTrasen of failing to provide their employees with sufficient safety information and protective equipment, which led to several minor injuries and one volunteer was reportedly admitted to hospital for 'severe side-effects of exposure' but has since been discharged." + +/datum/lore/codex/page/article79 + name = "02/10/64 - Shelf Fleet Vanishes Without A Trace!" + data = "Government agencies are scrambling to explain the apparent 'total disappearance' of the Almach-aligned Shelf fleet. Initial reports from the fleet's last known location describe a phenomenon not dissimilar to that observed just prior to the ignition of the Phorcys star in November, but the SCG has assured the media that 'No activity has been detected from the Whythe superweapon that would indicate any relation to the ongoing Shelf situation.'\ +

\ + Independent telemetric data from several sources has confirmed the presence of a 'bluespace anomaly' in the moments preceding the fleet. Currently efforts are focused on determining whether the fleet has been lost with all hands or if survivors may yet be found, but no trace of the fleet or of telltale signs of large fleet movements anywhere within or beyond Almachi space have yet been detected.\ +

\ + This afternoon, Speaker Mackenzie West of the Icarus Front addressed Sol, and indicated that communication was underway 'across faction lines' with the Association to determine the cause and implications of Shelf's apparent loss. The Almach Assocation has claimed not to be responsible for the 'possible attack' and both sides has expressed concern for the 'astronomical loss of life this may represent.'\ +

\ + Shelf, a largely Positronic colony fleet, consists of over 1700 vessels including the 'One Leaky Bitch', current headquarters of Morpheus Shelf, Morpheus' non-Solar 'spin-out' corporation established last June. The fleet has continuously denied direct affiliation with the Almach Assocation, but was involved in a major drone attack on Solar vessels just nine months ago, which was claimed to be 'in error'." + +/datum/lore/codex/page/article80 + name = "02/12/64 - Spectralist Wardens to hold Vigils for Lost Fleet" + data = "In the wake of Shelf's sudden disappearence, Wardens across SolGov space have collectively agreed to hold services and vigils throughout dozens of systems for those who are doubtless worried for their loved ones aboard the missing ships. Spectralism, a synthetic-centric religion, finds it's roots within 'Haven', a small vessel and community that travels alongside the wider Shelf fleet, though considers itself a distinct entity. Its ministers, known as Wardens, tend to its adherants wherever they may be found.\ +

\ + Despite Haven's well-known and somewhat-controversial independence of identity from Shelf, all indications point to the Fleet's disappearance having taken the attached ship with it. All twelve Spectralist Elders are known to have been onboard Haven at the time of its disappearance, as well as numerous other significant Spectralists and other spiritual leaders thought to have been on Shelf. The potential loss of the entire upper organizational body could be devastating to the religion, who have long been instrumental in the synthetic rights movement.\ +

\ + Ceramica, a Warden operating out of Nyx, reached out for comment with the following: 'We are as worried as everyone else who calls Shelf their home, or who has lost contact with friends or family. You need not believe in the First Spark to have a place at your local vigil; We welcome everyone who may be hurting. This is our way, this has always been our way. We remind everyone to stay mindful, and to reach out to those you see struggling. In times like this, we cannot leave each other behind.'" + +/datum/lore/codex/page/article81 + name = "02/14/64 - Shelf Safe After 'Impossible' Jump!" + data = "The missing Shelf fleet has reappeared hundreds of light years beyond the Eutopia system just days after its sudden disappearance on Monday. Unencrypted bluespace transmissions from the fleet's new location - several months travel from its last known position in Almachi space - assured all who would listen that 'The fleet (had) arrived safe and sound.' and apologized for 'Any alarm (the fleet) may have caused'. Though no official report has been released nor information from Shelf itself, initial counts indicate that a number of Shelfican vessels may not have survived the 'impossible journey' intact.\ +

\ + Current analysis of the bluespace anomaly detected prior to Shelf's unexpected departure indicate that the same technology as employed by the Whythe Superweapon may have been used by Shelf to create 'a bluespace portal thus far inconceivable by modern science'. The revelation has sparked concerns that 'extreme mercurial elements' within Shelf may have been responsible for the hardware behind the Assocation's 'system eating' weapon.\ +

\ + Sifat Unar of the EIO has expressed particular concern that 'Such improbable technology relying on concepts deemed so staggeringly arcane that our very understanding of the laws of the universe had written them off as impossible - and to be applied in such callous ways without regard for life or perhaps even the fabric of reality, could only have been developed by machine minds that could threaten our very being.' Shelf has dismissed these claims as 'Scaremongering' and 'Just jealous that somebody else thought of it first', though they would not confirm nor deny their involvement in the development of the new bluespace portals." + +/datum/lore/codex/page/article82 + name = "04/11/64 - Whythe Breached - An End In Sight?" + data = "According to latest reports from the Almach front, Sol vessels have established a foothold in the debris fields of the desolate Whythe system, home to the enemy's controversial 'Superweapon'. Admiral Barka has confirmed that bombardment of the weapon has begun, but that 'shields are holding at present', owing to the vast construction's immense power generation capabilities, but remains confident that the 'siege' will come to an end within a few months, and that the Almachi now hold only 'minimal retaliatory capacity'.\ +

\ + Fleet sources have been quick to address a flurry of activity on the exonet which proposed that the superweapon might be deployed against Sol's core systems in a last-ditch effort to inflict damage on their former government. According to a statement posted just hours after the initial invasion press release, 'the Fleet is aware of all risk factors regarding the Whythe Superweapon, and following two long months of analysis are certain that constant, substantial pressure placed on the weapon's shield systems will render the offensive component of the weapon dormant until the hull can be breached.'\ +

\ + The general mood in the Colonial Assembly today is one of relief, as all signs point to a total collapse or surrender of Association forces in their home systems once their trump card has been captured or destroyed by SCG forces. Secretary West has already expressed congratulations to the troops, 'despite the lack of assistance from our allies, as the Shadow Coalition would have had us believe was necessary.'" + +/datum/lore/codex/page/article83 + name = "04/13/64 - Skrell Ultimatum Shocks Sol!" + data = "After three months of diplomatic iciness, the Skrellian Far Kingdoms have contacted both the SCG and Almach Association with one demand: Sign an armistice or prepare for war. Supported by an immense fleet movement through the recently quashed Xe'qua region, the Far Kingdoms have demanded an immediate end to hostilities, and 'incorporation of Almachi holdings as a Skrellian protectorate, under strict oversight and regulation of their research and activities.' By Skrell demands, the Fleet has two weeks to fully withdraw from the Almach region and any vessels on either side continuing to engage will be 'disabled, boarded, and have its crew arrested pending a formal peace agreement.'\ +

\ + A wave of outrage has swept the Colonial Assembly, with heated debate as to Sol's response defying all party lines. While Speaker ISA-5 has been widely criticized by political opponents for their 'overzealous trust in the Skrell', they have remained acquiescent to the Skrell's demands, stating that it may be the best way to avoid any further bloodshed and maintain good relationships with the Skrell. Conversely, a small group of hardliners from across the major parties headed by SEO Representative Colin Zula of Alpha Centauri, have formed a political coalition opposing any form of 'Surrender or appeasement in the face of foreign aggression', demanding Sol keep its forces in place and 'Finish off the Association before they can be allowed to wreak havoc unsupervised and uncontrolled.'\ +

\ + Surprising some, long-time supporter of the Almach War, MacKenzie West has established themselves as a figure of moderation in the Assembly, promising that the Icarus Front would pursue 'aggressive negotiations' with the Far Kingdoms in order to better understand their motivations and, if territory is to be ceded, 'ensure the Almachi are placed under a firm hand'. He notes that the Skrell have never adhered to Five Points policy, but that careful diplomacy has always ensured their 'less savoury tendencies' have never spilled over to Sol space." + +/datum/lore/codex/page/article84 + name = "04/16/64 - Assembly Shaken By Reshuffle" + data = "Following the shock announcement of the Skrellian demands on Monday, sixteen planetary representatives under the SEO's Colin Zula have announced the formation of a new political party named the 'Solar Sovereignty Party' under the banner of 'Independence from foreign demands'. The party consists of defectors from all three major parties; 9 Sol Economic Organization, 4 Icarus Front and 3 Shadow Coalition representatives have 'jumped ship' and will back Zula's demands to resume war with the Association, even if it means butting heads with the Skrell.\ +

\ + Rewi Kerehoma, chair of the SEO has expressed 'regret' that Mr. Zula and his supporters had chosen to splinter from the party, rather than work with 'More moderate, but like-minded' individuals across the SEO and wider Assembly. The SEO's official stance on the Skrellian demands are to demand close Solar oversight of any 'protectorate' to ensure that the region is 'policed to the highest standard, but that current Almachi citizens are afforded all the sapient rights they would be under the SCG.'\ +

\ + In the Shadow Coalition, a formal motion has been put forth by a small minority of representatives calling for the resignation of Speaker ISA-5, citing 'Total blindness to the political situation,' in the leadup to this week's events.\ +

\ + Meanwhile as Skrell vessels enter the Whythe system, the Solar Fleet has ceased bombardment of the Whythe Superweapon, handing off 'suppression' of the weapon to Skrell forces." + +/datum/lore/codex/page/article85 + name = "04/20/64 - Sol To Submit - Almach Subsumed Under Treaty of Whythe" + data = "Following 'intense' deliberations between the Far Kingdoms and representatives from the SCG, a decision has been reached to cede the secessionist Almach Association territory to the Skrell, and withdraw all forces from the region. The newly established Almach Protectorate will be subject to 'extremely stringent' oversight by Skrellian authorities, and international exchange of 'research and technologies' from the region will be banned 'in both directions', pending more a more exacting deal with the SCG. Sol is to be allowed 'regular inspections' of the territory on a schedule established by the Kingdoms.\ +

\ + The Solar envoy included the chairs of each of the major parties, senior ambassadors to major Skrell systems, and representatives from the Solar Fleet. The newly founded SSF were extended an invitation, but reportedly turned it down. A dejected looking MacKenzie West announced the terms of the treaty late this afternoon, stating that they had 'fought tooth and nail' for a fair deal for all parties involved, including civilians of all species now living under Skrellian occupation, and that 'those not directly involved in the corruption of humanity's sanctity should not be made to suffer for the actions of their superiors.'\ +

\ + Notably absent from deliberations were many key members of the Association's upper echelons, with 'lesser' diplomats taking the place of both Angessa Martei and Vounna's Naomi Harper. Almachi and Skrell sources were reluctant to explain these absenses, and it remains unclear as to whether they have been taken into Skrellian custody or remain at large.\ +

\ + Selma Jorg, Representative for Vir, has decried the treaty as a 'Sapientarian disaster in the making'. The former career diplomat has cited the 'general mistreatment of species deemed 'lesser'' as a recurring concern with the Skrell, and the complete occupation of majority human and positronic space, which unprecedented, could lead to 'conditions not much better than slavery' for those still living in the area. She has refrained from any direct accusations, pending the results of Sol's first permitted inspection." + +/datum/lore/codex/page/article85 + name = "04/22/64 - Skrell Impose New Regime in Relan" + data = "As agreed upon in the Treaty of Whythe, the Far Kingdoms have occupied the Relan system, putting an end to the Free Relan Federation. How the system will be organized is not entirely clear at this point. Despite the effective abolition of the Relanian government, Skrell presence in the system appears relatively light, and many of the scattered stations have no Skrell presence at all.\ +

\ + Former President Nia Fischer gave the following statement to a crowd gathered outside the Capitol Section of Carter: 'This is a dark time for all of us. I promise to you that, in my continued service to you, I will work with the Far Kingdoms to ensure that all of our people are treated well and our rights respected, and that we will arrive at a form of government that is acceptable to you.' The gathered crowd began to shout questions and accusations, and Fischer was quickly escorted back into the capitol by Skrellian guards without answering questions from the press or others. The crowd was quickly dispersed by Skrellian military police and Carter's own police force.\ +

\ + In the meantime, the governing of the system remains in the hands of the sparse occupation forces, aided by parts of the former Federation government.\ +

\ + In other news from the system, the Republic of Taron has negotiated a preliminary navigation and trade agreement with the Far Kingdoms, officially maintaining their neutrality despite the occupation of the majority of the system." + +/datum/lore/codex/page/article86 + name = "04/27/64 - Chaos in Relan" + data = "Simmering tensions in the Relan system have boiled over, with riots erupting on Carter, Abhayaranya, and New Busan. Since former President Fischer's brief address, small demonstrations against both the Skrell occupation and the collaborating elements of the former Federation government have taken place on many stations, but within the last day full-blown riots have broken out. While accurate information on the situation within the stations is rare, it is currently believed that the deaths of two protesters on Abhayaranya were the catalyst.\ +

\ + Damage to the three stations has been relatively light, with one major exception. A large fire broke out in the Capitol Section of Carter, killing at least 22, including former President Fischer, and wounding at least 74 more. Other casualties among rioters, police, and the populations of the stations are unknown at this point.\ +

\ + Other stations with significant permanent populations have been paralyzed by local inaction and the disloyalty of local police and security forces to the Far Kindgoms Skrell, and several with no Skrell presence have issued statements that they will not be accepting any military presence from the Far Kingdoms. It is unclear at this point if this represents the beginning of another major conflict within the system." + +/datum/lore/codex/page/article87 + name = "04/30/64 - Meralar Correspondent: Triumphant Return!" + data = "Celebrations have erupted throughout Tajaran space with the return of the PCMV Raniira's Grace, which has spent the last several months providing joint assistance with Solar military forces during the now-ceased hostilities with the Almach Association.\ +

\ + Khama Suketa enai-Lutiir, representative of the Tajaran Pearlshield Coalition, has provided the following statement:\ +

\ + 'It is great honour that we welcome the crew of the Raniira's Grace back to their homes at Mesomori. We have all seen the battle reports, and loathe as we are to celebrate bloodshed, sometimes it is a necessary evil in the pursuit of a greater peace, and the Grace pursued that peace with fervour and tenacity as befitting our kind, and exemplified what we can do when put to the test. She is but one ship, and yet one ship can make all the difference. Lives have been saved, and the crew has returned alive and well. This is merely the beginning of what we can accomplish in the cosmos.'\ +

\ + When asked for comment on the Treaty of Whythe, Suketa had this to say:\ +

\ + 'Indeed, the bittersweetness behind all of this. I will say, it is a... complicated and nuanced situation, as is so often the case with politics. We have our views on the matter, for sure, but now is not the time to formally engage with them. The Pearlshield is watching carefully, and when the dust settles and the terms of the treaty are exercised and accepted, we can take clearer view and action as possible and necessary. We still stand by the ideals we entered the war with, and we trust our allies to share them as ever. That will suffice for the moment.'" + +/datum/lore/codex/page/article88 + name = "05/13/64 - Agreement Signed at Ithaca Station, New Government In Place" + data = "In an effort to end the ongoing violence in the Relan system and regain the cooperation of 'insubordinate' stations, the Far Kingdoms Skrell have negotiated an agreement with community leaders and former Assemblypersons from a number of stations, including insubordinates, meeting at the largest of the insubordinates, Ithaca. Under these agreements, the Skrell will vacate most stations in the system, but will maintain a fleet base in Relan's Outer Belt for mutual defence, first at Carter and later at a dedicated station. Relan will have harsh restrictions placed on its military and will agree to formal diplomatic neutrality, but will be free to organize its own government under supervision and military occupation will end.\ +

\ + The mood on Ithaca has been tense as negotiations have gone on, but with the announcement of the results, crowds have packed the main thoroughfares and public spaces of the station in celebration. Francis Harp Yong, governor of Ithaca and a leading figure in the talks, addressed a crowd outside the Administration Section of Ithaca today. \ +

\ + 'The agreement we have signed with the Skrell today has given our people a new chance, free from the mistakes of the war and the baggage of the former Association. The war was not brought on us by our choice, nor the occupation we have recently faced. We want peace, and that is obvious even to those who were fighting against us weeks or days ago.\ +

\ + Make no mistake, that is what our agreement today symbolizes. A new era of peace for us, where we no longer have to worry about the threat of piracy or invasion. We can return to our homes, rebuild our stations, and forge a new future for ourselves and our children'\ +

\ + It was also announced that though the work of restoring order to the system is ongoing, they expect elections will be held for a new Assembly and President within the next few months, with the exact date announced once violence on the major stations has ceased and cooperation from the insubordinate stations is secured. Yong will head an interim government in the meantime." + +/datum/lore/codex/page/article89 + name = "08/15/64 - Almach Permits First Solar Inspection" + data = "Almost four months since its establishment as a Skrellian territory, the Almach Protectorate Government has extended its first formal invitation to Solar Confederate Government inspectors to ensure the fledgling state is complying with restrictions imposed by the Treaty of Whythe.\ +

\ + The composition of the official Solar Inspection Group has been a matter of much deliberation over the past several months, and owing to the ground to be covered now includes over 3,500 experts from a wide variety of fields. The bulk of the Group is comprised of Transgressive Technologies Commission agents, including the EIO, but also includes military officials, independent observers, and corporate representatives. The inclusion of the latter group spurred heated debate in the Colonial Assembly, but ultimately 'thought-leaders' from Ward-Takahashi, NanoTrasen, and Hephaestus Industries were admitted, while other interests will have to be satisfied to be represented by Sol Economic Organization liaisons.\ +

\ + The APG, currently based out of what is to be a neutral embassy on Carter in Relan pending the completion of the new government centre of Vigilance Station in Whythe, is not legally required to fully comply with Five Points regulation, though the Whythe terms ensure that any transgressive research is undertaken under the strictest guidelines. The Skrell have amiably agreed to ensure that any innovation by the protectorate is safe, controlled, and does not enter Solar territory. These terms are similar to those applied to such technologies developed by and for the Skrell themselves, whose expertise is considered unrivalled in the field, but has been widely criticised by certain human bioconservative groups.\ +

\ + The inspection is expected to take several weeks, and will begin tomorrow." + +/datum/lore/codex/page/article90 + name = "08/29/64 - Kaleidoscope Cosmetics Goes Trans-Stellar After Genix Merger" + data = "Personal care giant Kaleidoscope Cosmetics has been officially recognised by the Solar Galactic Exchange as a true Trans-stellar Corporation today, following a controversial merger with Genix Therapeutic Systems and expanding its corporate assets to over 20 key systems.\ +

\ + Genix, which will now be operating under the Kaleidoscope name while retaining some corporate autonomy, has come under some scrutiny from the Transgressive Technologies Commission in recent months following its aggressive acquisition of liquidated Almachi assets in the aftermath of the Association's dissolution in April. The company was cleared of suspected Five Points violations without fanfare just two weeks ago, and allowed to resume work on the development a variety of previously approved commercial genetic modification products.\ +

\ + Many cosmetic gene-modification products have been available for some time - primarily in the Almach Rim - but have remained targeted at a relatively niche market. These treatments, ranging from cosmetic anti-aging to 'fantasy' body features are now set to be marketed and available in 'hundreds' of Kaleidoscope clinics galaxy-wide in the coming months. The TTC has reported that they are 'Confident that no transgressive modification is being provided and that these modifications are strictly superficial'. They have officially wished Kaleidoscope's directors well in their ascent to the galactic stage." + +/datum/lore/codex/page/article91 + name = "09/21/64 - Almach Passes Inspection - Concerns Raised" + data = "The Solar Inspection Group has granted the Almach Protectorate a passing grade in the first official inspection of the territory under Skrellian rule, though ethical concerns have been raised by a number of independent observers involved in the process.\ +

\ + During the course of the month-long inspection, Skrell facilitators were cooperative in ensuring the SIG were given 'unlimited' access to all research and development facilities requested by Sol, as well as informing the group of numerous previously unidentified locations that had been flagged by the Almach Protectorate Government since assuming control of the region in April. Critics of protectorate have suggested that the 'official list' may not be as comprehensive as stated, but the SIG has stated that they are 'confident that no deception has been undertaken by the APG. We have observed no evidence of research being concealed from our teams, and to the best of our knowledge the only locations left undisturbed are those few still occupied by Association holdouts, beyond the control of either inspecting government.'\ +

\ + Also as a result of the inspection, concerns have been raised regarding the treatment of ex-Association citizens, particularly the often genetically modified residents of Angessa's Pearl. While Angessa Martei's location is still unknown, her legacy - a society described by some as a cult of personality with emphasis on the cult - poses a significant threat to Skrellian control of the Exalt's Light system, and the clash of 'strong ideologies' has allegedly resulted in mistreatment of detainees that, according to the official report 'would not be permitted in Solar jurisdictions'.\ +

\ + The Protectorate's passing grade opens the door for interstellar trade to resume between the two nations for the first time in several years. Manufacturing giant Ward-Takahashi has already released a public statement on its intent to deal with the APG, and several other trans-stellars are expected to follow suit." + +/datum/lore/codex/page/article92 + name = "09/24/64 - Kaleidoscope Announce Exclusive Almach Deal" + data = "Mere days after the announcement of the reopening of Almachi-Solar trade, the Kaleidoscope Cosmetics corporation has confirmed that they have secured 'exclusive rights' to genetic products produced by several major manufacturers in the Angessa's Pearl system formerly owned by The Exalt - the insular mercurial theocracy of Exalt's Light - and recently handed over to the Almach Protectorate Government.\ +

\ + The details of the company's trade agreement have not been made public, but have reportedly already been approved by both the APG and SCG. The promptness of the agreement suggests to some that negotitations had been underway well before the announcement of the Protectorate's passing grade. Though cooperation between trans-stellar interests and government entities is far from unusual, such dealings with foreign governments - such as those widely made as 'open secrets' with Eutopia - are considered distasteful by many within the Icarus Front.\ +

\ + The Angessan products Kaleidoscope intends to offer have also not been made public, but are all to be thoroughly screened by the Transgressive Technologies Commission before being made available, though 'failing' proposals may be approved for use exclusively within Protectorate territory." + +/datum/lore/codex/page/article93 + name = "10/04/64 - Yong Wins Relani Elections" + data = "Despite concerns about domestic unrest and potential Skrellian interference, elections in Relan have gone ahead, selecting a new President and System Assembly. Francis Harp Yong, leader of the interim government and previous governor of the city-station Ithaca, known for his leading role in negotiating the end of Skrellian occupation and calming riots and rebellions earlier this year, has won the Presidency in a landslide, receiving nearly seventy percent of the vote. His party, the Spacer Union, has secured a narrow majority in the Assembly. The New Federalists, led by former member of the Harper government Odoacer Mieville, are the largest opposition party.\ +

\ + Yong has promised to reinforce Relani neutrality and rebuild the pre-war social system, forming a coalition of labor, technoprogressives, and anti-war activists. His victory likely means an end to the unrest that has plagued Relan since the end of the war with Almach." + +/datum/lore/codex/page/article94 + name = "12/23/64 - Two Vessels Feared Lost In Isavau's Gamble" + data = "Two Solar salvage vessels have been declared missing this week while undertaking operations in the remote Isavau's Gamble system. Locals also report that several smaller craft from the Eutopia system have 'vanished' under similar circumstances. Authorities are treating the disappearances as potential pirate attacks.\ +

\ + The XIV Sri Chamarajendra with crew of 32, and IIV Reimarus with 9 are both reported to have lost contact with the system's spaceport while undertaking far-orbit salvage operations on decommissioned and abandoned facilities, including the ILS Harvest Moon which detonated with all hands earlier this year. The disappearances have spurred the system government to request greater anti-piracy support from the SCG, which has been much reduced since the Almach War and increased tensions on the Hegemony border.\ +

\ + While Proximal to the independent and often 'lawless' Eutopia system, as well as the Rarkajar Rift, infamous prowl of the human-tajaran Jaguar Gang, the Isavau's System has rarely been a direct target for such large-scale apparent hijackings, and no group has yet claimed credit or demanded ransom." + +/datum/lore/codex/page/article95 + name = "12/27/64 - NanoTrasen Accused In Satisfaction Poll Fixing" + data = "The results of an annual system-wide corporate employee satisfaction poll in Vir have been called into question after a leak of internal employee contracts by an anonymous whistle blower. According to verified documents provided to the Vir News Network, NanoTrasen employees on annual employment contracts up for renewal are instructed to fill out an appended form expressing 'Extremely High' satisfaction with their employment at the company, or the contract will be deemed 'incomplete' and thus invalid.\ +

\ + NanoTrasen have been winners of the Vir Happy Employee Award for the 7 years running as of this year, and as such the legitimacy of the award, which has been run in major systems by the Sol Economic Organization since 2503, has been called seriously into question. The SEO has expressed regrets regarding the alleged fixing, but has stated that participating corporations are within their right to encourage employees to vote in a particular way.\ +

\ + According to NanoTrasen, the so-called 'Satisfaction Clause' in their contract renewal process is entirely permissible from a legal standpoint, and the company has no plans to make any changes at this time. When approached for comment, one anonymous employee stated that they 'had never even heard of' the award." + +/datum/lore/codex/page/article96 + name = "01/03/65 - VirGov Seals Security Deal With Local Firm" + data = "Governor Lusia Hainirsdottir has announced sweeping changes to government law enforcement in Vir, lynchpinned by the signing of a five-year contract with home-grown independent security and arms firm, Hedberg-Hammarstrom. The private enterprise will be assuming 'key duties' in local law enforcement and system security, in a move that Hainirsdottir says 'will save millions in taxpayer money, and encourages local, Virite businesses that we trust them every step of the way'.\ +

\ + While many colonies and facilities in Vir rely wholly on in-house security forces and will continue to do so, Hedberg-Hammarstrom is set to take over government patrol duties throughout the system, as well as administrating a large portion of previously government-run local law enforcement agencies including policing and wilderness garrisons.\ +

\ + CEO Gunnar Hammarstrom has reassured current SifGuard members at all levels that they need not fear for their jobs, and that for many the changes will be as simple as a slight change in uniform and a different name on their paychecks, but that H-H agents will be assuming managerial roles in most locations." + +/datum/lore/codex/page/article97 + name = "01/05/65 - Top NanoTrasen Executive Injured In Sif Bombing" + data = "Calvert Moravec, Chief Operations Officer for NanoTrasen Vir remains in a critical condition following a suspected assassination attempt on Saturday. The former gubernatorial candidate had been making a speech at a small NanoTrasen facility known for a prior terrorist attack by Boiling Point forces two years ago, when a small explosive device detonated close to the executive's leg, rendering him unconcious.\ +

\ + NanoTrasen security have elected to investigate the bombing internally, refusing to cooperate with SifGuard authorities on the grounds of disagreements with newly established Hedberg-Hammarstrom management. Mr. Moravec, nephew of NanoTrasen CEO Albary Moravec had reportedly been speaking out against H-H's involvement in national policing when the blast occurred.\ +

\ + Commander Spradling of NanoTrasen Internal Security has issued a company-wide active search order for one member of the audience who remains unaccounted for named 'Lae Vu', who is believed to be a journalist or posing as such, accompanied by images from communicator footage taken at the event.\ +

\ + This amateur footage also shows one member of the audience shouting an anti-corporate slogan and throwing a small electronic device at Moravec before being escorted from the room, just moments prior to the explosion. Spradling has stated that this individual, who is believed to be a disgruntled veteran of the Sif Defense Force, remains one of several persons of interest, but that the thrown item does not appear to be connected directly with the explosive device.\ +

\ + Reports from witnesses suggest that Mr. Moravec made a temporary recovery thanks to the fast action of medical staff aboard the NLS Southern Cross, but that a few hours later he appeared to suffer from a seizure, after which he was placed into a medically induced coma that he is yet to recover from. Unverified images from the Cross appear to show a disoriented individual resembling Moravec self-medicating with a cocktail of prescribed painkillers and alcoholic beverages, though the company strongly denies their veracity." + +/datum/lore/codex/page/article98 + name = "02/02/65 - NanoTrasen Announces Employee-Led Advisement Scheme" + data = "Trans-stellar giant NanoTrasen has today announced the launch of their brand-new 'NanoTrasen Employee Representation Committee' scheme, which will allow employee-selected representatives to have a say in company policy on a local basis. Initially launching as a pilot in 'a few key regions', the NERC is intended to provide an in-house method for those working for NanoTrasen to 'address grievances and provide valuable input without resorting to radical means'.\ +

\ + Vir is one of three size regions of varying scale but similar company presence selected for the pilot program, alongside the 'Deep Bowl' - including Stove, Viola and New Singapore, and 'South America', on Earth. Elections are expected to take place over the coming weeks, with each region electing representatives from core facilities in their locale. The Vir Branch will be expected to select five employees, one from each of; their New Reykjavik Head Office (Colloquially know as 'CentComm'), Karan colony the NCS Northern Star, Kalmar-based NMB Gullstrand medical research center, Sivian way-station NLS Southern Cross, and the company's sprawling Ekmanshalvo Fabrication Plant.\ +

\ + The Representation Committee is set to have quite significant powers over their region's day-to-day operations, ranging from Standard Operation Procedure, to security enforcement, to interior design." + +/datum/lore/codex/page/article99 + name = "02/06/65 - Calvert Moravec Dead At 58, Announces Withdrawal From Public Life" + data = "Just over a month since his injury in a brazen assassination attempt, NanoTrasen Vir's Chief Operations Officer Calvert Moravec has announced his 'temporary withdrawal' from public and corporate matters, in an inspiring speech given from his post-cloning recovery ward. The noted corporate executive passed away on Friday, following a long comatose period, but is expected to make a full recovery.\ +

\ + Mr. Moravec has stated that he believes a spell 'away from the public eye' will do wonders for his recovery, and 'expects to make a return some time in the coming years'. However, Moravec has reaffirmed that his stance on corporate policing, which is believed to have been the reason for the January bombing, remains unchanged; 'The refusal of Hedberg-Hammarstrom to allow our security teams to access government criminal records has been a significant hindrance to the investigation into my death. Allowing just one corporation exclusive access to this data is unequivocally wrong.'" + +/datum/lore/codex/page/article100 + name = "02/08/65 - NERC Campaigning Begins in Vir" + data = "NanoTrasen's latest employee initiative, the NanoTrasen Employee Representation Committee is set to hold their first in-house election this coming weekend, after 'respectable' signup rates for the positions across all participating Vir-based facilities.\ +

\ + According to those interviewed at a few sites, campaigning may be mixed. One potential committee member for the Gullstrand Medical Center described the competition as 'cut-throat' with staff looking to be split between the selection of already respected chief medical experts, and 'more represenative' service staff. Conversely, one worker at the Ekmanshalvo Fabrication Plant complex stated that he 'would probably just vote for whoever I've heard of.'\ +

\ + Final voting will take place on Saturday the 13th of February, with results announced by the following Monday." + +/datum/lore/codex/page/article101 + name = "02/11/65 - Top Astronomers Announce 'Alarming' Tachyon Downtick" + data = "The Galactic Survey Administration has today released a 'high priority' report on what is being described as a 'significant decline in core tachyon density' throughout the known galaxy. According to recent findings tachyon deterioration, which had previously been 'negligible' has undergone a 'rapid acceleration' which could begin to seriously affect interstellar transit in as soon as 30 to 50 years.\ +

\ + Tachyons are a naturally occurring particle present in varying density which form the primary mechanism for bluespace drive operation. In simple terms, the higher the density of tachyons, the more efficiently starship engines are capable of operating. Low-density regions such as the Rarkajar Rift have long posed a challenge to interstellar trade, and the expansion of such regions could prove devastating to galactic unity.\ +

\ + FTL industry leaders Focal Point Energistics have already announced 'immediate investigation' into the GSA's findings after taking a blow on the stock exchange, and have guaranteed a 'commitment to future-proofing' in all forthcoming products." + +/datum/lore/codex/page/article102 + name = "02/15/65 - NanoTrasen Announces First NERC Members" + data = "Following Saturday's internal election, NanoTrasen Vir has elected the first five members for its new Employee Representation Committee. These individuals are expected to hold the position for one month:\ +

\ + For the New Reykjavik Head Office Iraluq James, a remote personnel operative, won the position on a platform of employee morale, team-building and employee-employer conflict resolution.\ +

\ + On the NCS Northern Star, NanoTrasen's main colony station in Vir Victoria Bell, a cybernetic chef and hardshell operator won her place with promises of increased regulatory transparency and clarity, including the publication of an in-house magazine.\ +

\ + At the NMB Gullstrand medical science center in Kalmar, a close race between top doctors was upset by the election of a station security commander, Wish Elara-Voight who promises 'improvements to the safety and security of NanoTrasen facilities with a focus on enforcing current SoP and CorpReg policies and placing new procedure in the handbooks.'\ +

\ + The waypoint station NLS Southern Cross selected a cybernetic Unathi candidate, researcher Dr. Haven Rasikl to represent them on the basis of encouraging interdepartmental cooperation and communication.\ +

\ + Finally, the Ekmanshalvo Fabrication Plant has selected fabrication programmer Terazon Norddahl, who promises to push for overhauls and modernization of the company's internal transport and support systems, including shuttle scheduling." + +/datum/lore/codex/page/article103 + name = "03/10/65 - GSA Confirms Presence Of 'New' Deep-Space Threat" + data = "This morning the Galactic Survey Administration released confirmation that a previously unknown deep-space dwelling species was indeed responsible for the disappearance of five Extraplanar Discovery Division vessels early last year, three of which have returned adrift over the past several days. The species, colloquially dubbed the 'Bluespace Bugs' after initial reports from the recovered EDD ships, are believed to be capable of manipulating matter in a manner reminicent of experimental bluespace technology.\ +

\ + The three 'returning' vessels are said to have been 'significantly off-course', with their points of galactic re-entry differing vastly from their initial points of egress, and final programmed return routes. Each ship having departed on routes from Sol, the SCG-E Bungaree was reported adrift by Almach Protectorate officials close to the Vounna system, the SCG-E Ketumati severely damaged on a collision course with the Erebus star, in the Nyx system, and the SCG-E Mag Mell collided with the garden world of Sif, in Vir. The Gagarin and Xu Fu remain unaccounted for, but due to the proximity of final contact, their disappearance has also been ascribed to the 'bugs'.\ +

\ + Investigation of the recovered vessels each indicated signs of a brief struggle, always following reports of unexplained equipment disappearances and equipment failure. No crew, or crew remains have been found, with the exception of a single unidentified human thumb aboard the Bungaree.\ +

\ + Additionally, each ship has been identified as having undergone some degree of material alteration, with elements ranging from hull plating to crew belongings having taken on a crystaline form dubbed 'Magmellite' after the ship most thoroughly 'reconstructed'. It is unclear whether the mineral is somehow secreted by the alien species, or merely a product of the same environment.\ +

\ + GSA sources have stated that there is no current evidence that the insectoid creatures - identified only from scattered descriptions left from missing EDD personnel - are in any way sapient or malicious, and the lost vessels are thought to have merely disturbed a scattered array of endemic populations far from the galactic plane. Precisely why the species has only been encountered in the past year, and now all at once, is not yet known." + +/datum/lore/codex/page/article104 + name = "05/24/65 - Oculum Apologizes for Interstellar Relay Outages" + data = "Week-long difficulties with interstellar transmissions in several central star systems due to an 'unexpected behaviour' in bluespace relays 'should be resolved soon' according to telecoms giant Oculum Broadcast. The company has apologized to customers for connection speed drops as much as 80% which have rendered certain live systems near impossible for many customers, including disruption of telecast Colonial Assembly meetings on Luna which have been temporarily put on hold in order to allow representatives time to attend in person.\ +

\ + Customers may experience reduced speeds compared to prior service, but have been promised a two-year price freeze on exonet service packages for home and business users on most major providers in participating areas. In-system communications remain unaffected.\ +

\ + Initial reports that the finale broadcast of Game of Drones was 'rendered unwatchable' by connection issues proved to be unfounded as severe lag and audio distortion were confirmed as 'part of the creator's artistic vision for the story's end'." + +/datum/lore/codex/page/article105 + name = "06/07/65 - 104 Feared Dead In Oasis Tourist Shuttle Incident" + data = "The Vir Governmental Authority has confirmed the destruction of a small interstellar tourist vessel departing the Vir system. The ITV Relaxation IX operated by Thousand Palms Hotels, was bound for a popular resort in Oasis and reportedly 'split in two' shortly after confirming system bluespace departure with Vir space traffic control, exposing all passenger compartments to space and killing at least 94 of the 108 people onboard.\ +

\ + Four crew members recovered from forward sections are being treated for 'non-life-threatening' pressure injuries at a nearby medical facility, and ten individuals believed to have been situated at the rear of the ship remain unaccounted for. The exact cause of the break-up is yet to be determined, but initial accounts from surviving crew members describe the bluespace drive of the ship as having 'taken off by itself' at such speed that the rear of the fuselage was 'cut clean off' with no regard for structural elements. Foul play is not currently suspected.\ +

\ + The VGA believes that the chances of finding further survivors are 'extremely slim', though efforts to recover the rear section, which was 'sling-shot' into interstellar space, are underway. Gilthari Exports, Thousand Palms' parent company have temporarily suspended operation of all vessels fitted with similar bluespace drives, and Major Bill's Transportation is expected to follow suit. Wulf Aeronautics was unavailable for comment at this time." + +/datum/lore/codex/page/article106 + name = "07/09/65 - 'Bluespace Bugs' Linked To Almach Tech" + data = "Initial public reports on the extraplanar species commonly known as 'Bluespace Bugs' has proposed that the first recognizable signs of their activity within observable space, coincide precisely with the development - and particularly the test-firing - of the Whythe Superweapon, and that there may be a direct link between the two. The report, released by the Galactic Survey Administration this afternoon hypothesizes that the newly developed bluespace manipulation techniques used in Whythe may have acted as a signal to the deep-space dwelling creatures in a manner similar to moths attracted to artificial light. The GSA is currently collaborating with the Almach Protectorate Government to investigate the potential link further.\ +

\ + Additionally, findings from analysis of both inorganic and biological samples collected from the three recovered Extraplanar Discovery ships believed to belong to the 'Bugs' has excited much of the scientific community, with news that the insect-like aliens and their apparent dietary waste-product Magmellite may be composed in a manner completely unlike any life previously encountered in the known galaxy. The findings may rewrite our understanding of biology and material science, though a full specimen is desired to confirm these early findings.\ +

\ + The creatures have been given a tentative scientific name X Extraneus Tarlevi, after Captain Volmer Tarlev of the SCG-E Ketumati whose recorded descriptions were instrumental in establishing a basic understanding of the species' behavior. Researchers currently believe that the Bluespace Bugs are merely a form of bulk-feeding omnivore attracted to the EDD vessels in deep space by their bluespace drives, and that the loss of the ships was merely unfortunate happenstance rather than deliberate, malicious attack. Studies are already underway to determine methods that might prevent further incidents of this types before any further extraplanar missions are approved." + +/datum/lore/codex/page/article107 + name = "08/15/65 - Enigmatic Arkship Sighted After 200 Year Voyage" + data = "Recent reports from the New Singapore-based Exoplanar Traffic Observation Committee, have claimed historic extraplanar arkship, the VHS Rodnakya, has changed trajectory and may be approaching the galactic plane once more.\ +

\ + The ETOC, comprised of mostly exoplanar and shuttlecraft enthusiasts in the Bowl, have been tracking both government and private survey expeditions since the 2450's, reporting the approximate locations and assumed status of vessels for public record. The VHS Rodnakya has been a major point of interest among ETOC members since its formation, sometimes dominating discussions entirely, and the focus for numerous unverified theories.\ +

\ + The Arkship and its support fleet, known as 'Vystholm' was constructed in the early 2300's by Stanislava Dalibor, and left the galactic plane in response to the abolition of the SCG's First Contact Policy that demanded the capture and interrogation of unknown sapient aliens. It has not had any official contact with the galactic community since. Largely known for radical and since-outdated views on non-human intelligent life, their original crew was known to include a number of early Icarus Front extremists which may have fermented into a dangerous ideology after 200 years of isolation.\ +

\ + This alleged trajectory change has sparked excitement among the committee, including a flurry of completely unsupported reports of spies infiltrating Solar society, from the corporate workforce to major government bodies.\ +

\ + The Vir News Network does not endorse the unverified claims of the Exoplanar Traffic Observation Committee." + +/datum/lore/codex/page/article108 + name = "09/12/65 - Gateway Transport Suspended Amidst Safety Concerns" + data = "Nine of the galaxy's top trans-stellars have announced immediate suspension of bluespace gateway transit services following a report by Wulf Aeronautics indicating that some of the same tachyon instabilities affecting their faster-than-light engine technology may have even more severe reprecussions for rapid point-to-point teleportation that could result in 'significant decrease in matter' during rematerialization that could result in customer death, disfigurement, or loss of luggage.\ +

\ + Dismissing accusations that this was a move to bolster a weakened spacecraft travel industry, Focal Point Energistics, the original developers of modern gateway technology were first to announce their suspension of service on all first-party operated access points. Major contract operators, including NanoTrasen, Ward-Takahashi, and Gilthari Exports have followed suit citing a desire for caution when dealing with premium employee transport.\ +

\ + NanoTrasen are the Vir system's leading operator of gateway transport, offering 'luxury, near-instant interplanetary commutes' between most major company facilities, and the Vir Interstellar Spaceport. The company says it will be removing many smaller gate installations for 'full examination and required enhancements' and expects the service to return 'within a few weeks'.\ +

\ + Major Bill's Transportation have announced an increased frequency of service to affected NanoTrasen locations for the duration of the gateway suspension." + +/datum/lore/codex/page/article109 + name = "10/23/65 - 12th Missing Ship Prompts Official Isavau Response" + data = "After a shocking 12th interstellar vessel was declared missing in the Isavau's Gamble system earlier this week, the SCG has formally announced the launch of an official investigation, including the deployment of a significant Fleet security presence in the region. The lost ship, the HFV El Cid is recorded as having a crew complement of eight, pushing the total missing people in the system over the past year over one hundred and fifty. A contingent of around twenty SCG vessels - search and rescue, salvage, and armed warships - has been dispatched to the region to take over from near-absent local investigators, but is not expected to arrive for at least a month due to worsening FTL flight conditions.\ +

\ + The El Cid is believed to have been hauling highly secure cargo internationally, which may have been the final deciding factor in launching a confederation-level investigation into the abnormal number of appearances, and the SCG has come under quick criticism for their apparent prioritization of lost cargo over sapient lives. Fleet Admiral Silvain Barka, celebrated veteran of the Almach War, has stated 'Lives are our number one concern. The matter of the Hephaestus cargo has simply moved our timeline forward due to concerns that if high-grade arms were to fall into pirate hands, the situation in Isavau's Gamble could rapidly worsen. We want to avoid that, and bring back as many of the missing crew as possible.'\ +

\ + While piracy has long been a concern in the Bowl, with the 'Jaguar Gang' pirates making their home in the region, and a general uptick having occurred since the beginning of the Almach Crisis, it is unusual for such a high proportion of missing ships crews to remain lost without report of recovery or ransom demands. Accusations of brutality have been levied at the Vystholm flotilla, despite their improbable distance from the star system. To date the XIV Sri Chamarajendra remains the single largest loss of life, at 32 believed dead during a large salvage mission late last year." + +/datum/lore/codex/page/article110 + name = "10/26/65 - 'Bluespace Bug' Confirmed Activity Near Tajaran Space" + data = "The following address is from Khama Suketa enai-Lutiir, representative of the Tajaran Pearlshield Coalition:\ +

\ + 'Good day, everyone. We would like to put the rumor mills to rest lest they get out of hand. Eleven Solar days ago, the Silk system's perimeter defenses picked up what appeared to be a derelict Vox raiding ship that had drifted into range. Security forces boarded the craft and found clear signs of fighting within the crew compartments, but no traces of the crew themselves. The craft's bluespace drives were notably ripped out of the hull, and it's believed the craft had been drifting for up to nearly two Solar weeks prior, as it has been identified as the 'Skiskatachtlakta', belonging to a well-known Vox raiding group our cousins in the Arrathiir system have been contending with for a few years now, and that was their last confirmed contact with it.\ +

\ + 'Most importantly however, and the key reason for this address, is a significant portion of the ship's hull, particularly concentrated around the site of its bluespace drives, has been confirmed to've been converted to the material known as 'Magmellite', related to the so-called 'bluespace bugs' or X Extraneus Tarlevi that have been of note outside our borders. To acknowledge and assuage any natural alarm on our own part, there is no indication any part of the incident took place on our side of the Rift, and we are deploying additional reconnaissance and recovery ships, drones and general personnel throughout controlled space to keep a watchful eye, and we are negotiating with Solar forces in Silk to expand our presence as appropriate. We are currently analyzing the Magmellite samples recovered from the Skiskatachtlakta and will be sharing any findings with our fellows in the scientific sphere, as well as returning the ship's plundered riches if and when possible.\ +

\ + 'There is currently no cause for concern beyond the understandable. If and when there is, we will rise to the occasion as always. Together, we will discover the truth of these strange times we find ourselves in. Until then, be safe, and be well. May our stars shine upon us all.'" + +/datum/lore/codex/page/article111 + name = "01/14/66 - Unathi Border On Alert After Manoeuvre Scare" + data = "The Solar garrison at Abel's Rest remains on high alert following a critical near-miss scenario resulting from an unannounced Unathi fleet arrival at the disputed system's perimeter alert zone, which has since been determined to be not a deliberate act of war. According to the Moghes Hegemony the fleet is 'part of a re-evaluation of key troop deployments, that will be of mutual benefit to peace in the region'.\ +

\ + The arriving fleet, comprised of mostly troop transport vessels, remained in distant orbit of the star for seven hours before diplomatic contact could be established, during which time the SCG garrison remained at battle-ready stance. This marks the closest proximity to open conflict in Abel's Rest since the end of the Unathi War over 45 years ago. SolGov peacekeepers have confirmed decreased planetside garrison activity over the past several months, and key Hegemony warships have departed in recent weeks.\ +

\ + It remains impossible to determine the Unathi's true intentions as such a withdrawal could preface devastating planetary bombardment, or invasion elsewhere, and some members of the Icarus Front have called for immediate redeployment to the front in response. The SCG Fleet has assured the public that relations with the Hegemony have 'never been better' and that long-range sensors indicate a withdrawal from the entire border region on a far wider scale." + +/datum/lore/codex/page/article112 + name = "02/13/66 - Isavau's Gamble Fleet Report 'All Silent'" + data = "Early reports from the SCG contingent sent to investigate potential pirate activity in the Isavau's Gamble system include shocking descriptions of a system 'gone silent', with supposedly zero manmade signals originating from any ship or station in the entire area. Prior loss of contact several days prior had been ascribed to naturally occurring background noise 'overwhelming' the system Spaceport's bluespace relays, which had been operating at reduced efficiency due to the ongoing tachyon downtick.\ +

\ + While messages from the SCG-D Brazen Bull were similarly weakened by what has been described as a bluespace 'hum', no immediate cause for alarm was raised. The fleet indicated that they were proceeding to investigate the Isavau International Spaceport and hoped to make direct contact with the crew within a matter of hours.\ +

\ + While telecommunications outages were a forecasted consequence of the tachyon downtick, highly focused and widespread instances such as that occurring in Isavau's Gamble were not, which has cast doubt on the predictive models being used, and raised concerns of additional factors at play. A newly observed phenomena from the Brazen Bull's report, 'blue points of light suspended in space with no discernible origin' has led to some speculation of a re-concentration of tachyon particles which some hope may hold the key to preventing further deterioration of the energetic landscape." + +/datum/lore/codex/page/outage + name = "02/14/66 - 02/15/74 - RELAY DATA OUTAGE" + data = "Article data lost for 2922 day period. Reason: Damage sustained to Oculum systems during Skathari Incursion. Please contact your administrator for details." + +/datum/lore/codex/page/article113 + name = "08/17/74 - Vox Continue To Show Alarming Divergence In Behaviour; Experts Baffled" + data = "Reports published by the Interspecies Joint Anti-Piracy Initiative this month continue to support an unsettling trend; the Vox, violent reptoavian aliens best known for engaging in rampant piracy, are simply not behaving as expected. Tactical and strategic models built painstakingly over the last three centuries are now showing accuracy ratings as low as 3%, with a rapidly growing number of raids either occurring outwith predicted regions or timeframes, or more alarmingly, not being predicted at all.\ +

\ + 'Something has altered their priorities,' said Wataru Murata, the head of the Joint Operations Group in charge of tracking Vox activity. 'In some areas we're seeing vastly more unarmed transport, mining and salvaging vessels, than we were as recently as two months ago, and in others, we're seeing strength and frequency of raiding groups as much as tripling. It's a very complex situation.'\ +

\ + 'They've never been so unpredictable before,' agreed senior naval officer Akira Doi. 'I understand that there is currently no official theory on why this is happening, but I believe it all goes back to the Skathari Incursion.'\ +

\ + Many leading scientists are skeptical that the Incursion, despite having thrown much of the galactic community into chaos over an eight-year period of conflict with the insectoid Skathari, could have seriously disrupted the Vox in the same way, given the relatively low indications of Skathari presence in known Vox operating territories, but Admiral Doi strongly disagrees.\ +

\ + 'The Skathari are aggressive to an unprecedented degree,' he explained, 'and they had the ability and numbers to annihilate entire communities. I see no reason why that shouldn't have applied to the Vox.'\ +

\ + While some colonies and stations welcome this reprieve from raids and piracy, others are finding themselves under renewed pressure, with resources and labour withdrawn on the advice of apparently unreliable modelling. A representative of the Pearlshield Coalition territory of Arrathiir had this to say regarding the sluggish reallocation of resources after the latest wave of raids:\ +

\ + 'On the frontier we are no strangers to fighting and rebuilding after raider attacks, but without reliable resupply of fuel and munitions from the home worlds, we cannot even field our ships. This is costing us dearly.'" + +/datum/lore/codex/page/article114 + name = "09/25/74 - 'Emerald Skies' Conspiracy Protest Shuts Down New Reykjavik Mall" + data = "This weekend saw the Vinterlykke Shopping Center shut down after a surge of protesters crowded the mall. Vinterlykke is known as the largest mall in New Reykjavik, renowned for its expansive selection of shops, restaurants, and entertainment options.\ +

\ + According to witnesses, protesters crowded the major walkways, preventing shoppers from passing and leaving some stranded in shops to avoid the crowd. Many shops barred and locked the storefronts in response, an unnamed employee of one store commenting, 'That many people <...> you never know if it's going to get out of control.'\ +

\ + The protesters chanted with signs regarding NanoTrasen's exclusive rights in studying the Sif Anomalous Region, demanding that studies into the anomalous properties be public knowledge. The march appears to be headed by the Skathari conspiracy group 'Emerald Skies', known in recent months for many other smaller protests regarding the government response to the Incursion, and beliefs that Skathari are more intelligent than the public has been informed.\ +

\ + The disruption was eventually cleared out by mall security forces before the crowd could grow out of control. It is reported that Vinterlykke will reopen on Monday with additional security measures in place." diff --git a/code/modules/maps/tg/reader.dm b/code/modules/maps/tg/reader.dm index bb320e27ae..34692e2152 100644 --- a/code/modules/maps/tg/reader.dm +++ b/code/modules/maps/tg/reader.dm @@ -418,6 +418,14 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new) if(orientation != 0) // 0 means no rotation var/atom/A = . A.set_dir(turn(A.dir, orientation)) + if(istype(crds, /turf/simulated/floor)) //CHOMPAdd: Wilderness ceilings! + var/turf/simulated/floor/F = crds + if(istype(F.loc, /area/submap) && F.outdoors != 1) + for(var/obj/effect/zone_divider/ZD in F.contents) + qdel(ZD) + var/turf/above = GetAbove(F) + if(above && istype(above, /turf/simulated/open)) + above.ChangeTurf(get_base_turf_by_area(F), FALSE, TRUE) //CHOMPAdd End /dmm_suite/proc/create_atom(path, crds) set waitfor = FALSE diff --git a/code/modules/materials/materials/metals/steel.dm b/code/modules/materials/materials/metals/steel.dm index 99afcd385d..2a65386c60 100644 --- a/code/modules/materials/materials/metals/steel.dm +++ b/code/modules/materials/materials/metals/steel.dm @@ -15,6 +15,19 @@ new /datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), new /datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]") )), + new /datum/stack_recipe_list("comfy chairs", list( + new /datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), + new /datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), + new /datum/stack_recipe("brown comfy chair", /obj/structure/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), + new /datum/stack_recipe("lime comfy chair", /obj/structure/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), + new /datum/stack_recipe("teal comfy chair", /obj/structure/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), + new /datum/stack_recipe("red comfy chair", /obj/structure/bed/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), + new /datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), + new /datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), + new /datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), + new /datum/stack_recipe("yellow comfy chair", /obj/structure/bed/chair/comfy/yellow, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), + new /datum/stack_recipe("orange comfy chair", /obj/structure/bed/chair/comfy/orange, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), + )), new /datum/stack_recipe_list("rounded chairs", list( new /datum/stack_recipe("beige rounded chair", /obj/structure/bed/chair/comfy/rounded/beige, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), new /datum/stack_recipe("black rounded chair", /obj/structure/bed/chair/comfy/rounded/black, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), diff --git a/code/modules/materials/sheets/stone.dm b/code/modules/materials/sheets/stone.dm index c30766cda4..ff8864ccef 100644 --- a/code/modules/materials/sheets/stone.dm +++ b/code/modules/materials/sheets/stone.dm @@ -26,7 +26,7 @@ /obj/item/stack/material/concrete name = "concrete brick" - icon_state = "brick" + icon_state = "sheet-brick" default_type = "concrete" no_variants = FALSE apply_colour = 1 diff --git a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm index 27ddc6d783..3cd370c58e 100644 --- a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm +++ b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm @@ -93,9 +93,6 @@ EQUIPMENT("Resonator", /obj/item/resonator, 900), EQUIPMENT("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1200), EQUIPMENT("Super Resonator", /obj/item/resonator/upgraded, 2500), - EQUIPMENT("Fine Excavation Kit - Chisels", /obj/item/weapon/storage/excavation, 500), - EQUIPMENT("Fine Excavation Kit - Measuring Tape", /obj/item/device/measuring_tape, 125), - EQUIPMENT("Fine Excavation Kit - Hand Pick", /obj/item/weapon/pickaxe/hand, 375), EQUIPMENT("Explosive Excavation Kit - Plastic Charge",/obj/item/weapon/plastique/seismic/locked, 1500), EQUIPMENT("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded, 3000), EQUIPMENT("Industrial Equipment - Inducer", /obj/item/weapon/inducer, 3500), diff --git a/code/modules/mining/ore_redemption_machine/survey_vendor.dm b/code/modules/mining/ore_redemption_machine/survey_vendor.dm index b7c170b80f..14bac95bf3 100644 --- a/code/modules/mining/ore_redemption_machine/survey_vendor.dm +++ b/code/modules/mining/ore_redemption_machine/survey_vendor.dm @@ -54,7 +54,9 @@ EQUIPMENT("Defense Equipment - Plasteel Machete", /obj/item/weapon/material/knife/machete, 50), EQUIPMENT("Defense Equipment - Razor Drone Deployer", /obj/item/weapon/grenade/spawnergrenade/manhacks/station/locked, 100), EQUIPMENT("Defense Equipment - Sentry Drone Deployer", /obj/item/weapon/grenade/spawnergrenade/ward, 150), - EQUIPMENT("Defense Equipment - Frontier Carbine", /obj/item/weapon/gun/energy/locked/frontier/carbine, 750), + EQUIPMENT("Defense Equipment - Frontier Carbine", /obj/item/weapon/gun/energy/locked/frontier/carbine, 400), //CHOMPEDIT + EQUIPMENT("Defense Equipment - Frontier Phaser", /obj/item/weapon/gun/energy/locked/frontier, 150), //CHOMPADD + EQUIPMENT("Defense Equipment - Holdout Phaser", /obj/item/weapon/gun/energy/locked/frontier/holdout, 100), //CHOMPADD EQUIPMENT("Hybrid Equipment - Proto-Kinetic Dagger", /obj/item/weapon/kinetic_crusher/machete/dagger, 75), EQUIPMENT("Hybrid Equipment - Proto-Kinetic Machete", /obj/item/weapon/kinetic_crusher/machete, 250), EQUIPMENT("Fishing Net", /obj/item/weapon/material/fishing_net, 50), @@ -67,12 +69,20 @@ EQUIPMENT("Mini-Translocator", /obj/item/device/perfect_tele/one_beacon, 120), EQUIPMENT("Survey Tools - Mapping Unit", /obj/item/device/mapping_unit, 150), EQUIPMENT("Survey Tools - Mapping Beacon", /obj/item/device/holomap_beacon, 25), + EQUIPMENT("Survey Tools - Advanced Cataloguer", /obj/item/device/cataloguer/advanced, 300), //CHOMPADD EQUIPMENT("Survival Equipment - Insulated Poncho", /obj/random/thermalponcho, 75), EQUIPMENT("Survival Equipment - Glowstick", /obj/item/device/flashlight/glowstick, 5), EQUIPMENT("Survival Equipment - Flare", /obj/item/device/flashlight/flare, 5), EQUIPMENT("Survival Equipment - Radioisotope Glowstick", /obj/item/device/flashlight/glowstick/radioisotope, 40), EQUIPMENT("Survival Equipment - Modular Explorer Suit", /obj/item/clothing/suit/armor/pcarrier/explorer, 200), EQUIPMENT("Survival Equipment - Armored Jumpsuit", /obj/item/clothing/under/explorer/armored, 200), + EQUIPMENT("Survival Equipment - Exploration Plate", /obj/item/clothing/accessory/armor/armorplate/explorer, 50), //CHOMPADD + EQUIPMENT("Survival Equipment - Exploration Arm Guards", /obj/item/clothing/accessory/armor/armguards/explorer, 50), //CHOMPADD + EQUIPMENT("Survival Equipment - Exploration Leg Guards", /obj/item/clothing/accessory/armor/legguards/explorer, 50), //CHOMPADD + EQUIPMENT("Survival Equipment - Exploration Riot shield", /obj/item/weapon/shield/riot/explorer, 75), //CHOMPADD + EQUIPMENT("Survival Equipment - Storage Pouch", /obj/item/clothing/accessory/storage/pouches/green, 10), //CHOMPADD + EQUIPMENT("Survival Equipment - Large Storage Pouch", /obj/item/clothing/accessory/storage/pouches/large/green, 25), //CHOMPADD + EQUIPMENT("Survival Equipment - Pathfinder Belt", /obj/item/weapon/storage/belt/explorer/pathfinder, 200), //CHOMPADD ) prize_list["Consumables"] = list( EQUIPMENT("1 Marker Beacon", /obj/item/stack/marker_beacon, 1), @@ -111,7 +121,6 @@ EQUIPMENT("Thalers - 100", /obj/item/weapon/spacecash/c100, 100), EQUIPMENT("Umbrella", /obj/item/weapon/melee/umbrella/random, 20), EQUIPMENT("UAV - Recon Skimmer", /obj/item/device/uav, 40), - ) //VOREStation Edit End diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index d62004069e..cd6dfd962d 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -455,7 +455,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(usr, "You cannot follow a mob standing on holy grounds!") return if(get_z(target) in using_map?.secret_levels) - to_chat(src, SPAN_WARNING("Sorry, that target is in an area that ghosts aren't allowed to go.")) + to_chat(src, "Sorry, that target is in an area that ghosts aren't allowed to go.") return if(target != src) if(following && following == target) @@ -463,7 +463,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp following = target to_chat(src, "Now following [target]") if(ismob(target)) - forceMove(get_turf(target)) + var/target_turf = get_turf(target) + if(!target_turf) + to_chat(usr, "This mob does not seem to exist in the tangible world.") + return + forceMove(target_turf) var/mob/M = target M.following_mobs += src else diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 9fcf0f9427..ccbd8af8df 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -32,6 +32,42 @@ var/list/holder_mob_icon_cache = list() held.reset_view(src) START_PROCESSING(SSobj, src) +//CHOMPEdit Start - Add status so that you can see where you are... +/mob/living/Stat() + . = ..() + if(. && istype(loc, /obj/item/weapon/holder)) + var/location = "" + var/obj/item/weapon/holder/H = loc + if(ishuman(H.loc)) + var/mob/living/carbon/human/HH = H.loc + if(HH.l_hand == H) + location = "[HH]'s left hand" + else if(HH.r_hand == H) + location = "[HH]'s right hand" + else if(HH.r_store == H || HH.l_store == H) + location = "[HH]'s pocket" + else if(HH.head == H) + location = "[HH]'s head" + else if(HH.shoes == H) + location = "[HH]'s feet" + else + location = "[HH]" + else if(ismob(H.loc)) + var/mob/living/M = H.loc + if(M.l_hand == H) + location = "[M]'s left hand" + else if(M.r_hand == H) + location = "[M]'s right hand" + else + location = "[M]" + else if(ismob(H.loc.loc)) + location = "[H.loc.loc]'s [H.loc]" + else + location = "[H.loc]" + + stat("Location", location) +//CHOMPEdit End + /obj/item/weapon/holder/Entered(mob/held, atom/OldLoc) if(held_mob) held.forceMove(get_turf(src)) diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index 1d36c892cd..1aefd5e2a4 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -296,12 +296,17 @@ frustration++ //CHOMPEdit return -/mob/living/bot/proc/handleFrustrated(var/targ) - if((targ && LAZYLEN(target_path)) || LAZYLEN(patrol_path)) - obstacle = targ ? target_path[1] : patrol_path[1] + +/mob/living/bot/proc/handleFrustrated(has_target) + obstacle = null + if (has_target) + if (length(target_path)) + obstacle = target_path[1] + else if (length(patrol_path)) + obstacle = patrol_path[1] target_path = list() patrol_path = list() - return + /mob/living/bot/proc/lookForTargets() return diff --git a/code/modules/mob/living/bot/mulebot.dm b/code/modules/mob/living/bot/mulebot.dm index 0f851d6dd5..02638226bf 100644 --- a/code/modules/mob/living/bot/mulebot.dm +++ b/code/modules/mob/living/bot/mulebot.dm @@ -187,7 +187,7 @@ flick("mulebot-emagged", src) update_icons() -/mob/living/bot/mulebot/handleFrustrated() +/mob/living/bot/mulebot/handleFrustrated(has_target) custom_emote(2, "makes a sighing buzz.") playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0) ..() diff --git a/code/modules/mob/living/carbon/alien/diona/diona.dm b/code/modules/mob/living/carbon/alien/diona/diona.dm index 690fdb3325..753bdc9010 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona.dm @@ -47,7 +47,7 @@ var/list/_nymph_default_emotes = list( var/obj/item/hat /mob/living/carbon/alien/diona/get_available_emotes() - return global._nymph_default_emotes + return global._nymph_default_emotes.Copy() /mob/living/carbon/alien/diona/Initialize() . = ..() diff --git a/code/modules/mob/living/carbon/alien/emote.dm b/code/modules/mob/living/carbon/alien/emote.dm index cb7ab9b7b0..5f38b60b4c 100644 --- a/code/modules/mob/living/carbon/alien/emote.dm +++ b/code/modules/mob/living/carbon/alien/emote.dm @@ -28,4 +28,4 @@ var/list/_alien_default_emotes = list( ) /mob/living/carbon/alien/get_available_emotes() - . = global._alien_default_emotes + . = global._alien_default_emotes.Copy() diff --git a/code/modules/mob/living/carbon/brain/emote.dm b/code/modules/mob/living/carbon/brain/emote.dm index 5fb8159b1f..41023589ce 100644 --- a/code/modules/mob/living/carbon/brain/emote.dm +++ b/code/modules/mob/living/carbon/brain/emote.dm @@ -14,4 +14,4 @@ var/list/_brain_default_emotes = list( return (istype(container, /obj/item/device/mmi) && ..()) /mob/living/carbon/brain/get_available_emotes() - return global._brain_default_emotes + return global._brain_default_emotes.Copy() diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index dd816d1e8f..b8e4629299 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -99,11 +99,13 @@ // If the body is in VR, move the mind back to the real world if(vr_holder) + src.died_in_vr = TRUE //CHOMPedit, so avatar.dm can delete bodies src.exit_vr() src.vr_holder.vr_link = null for(var/obj/item/W in src) src.drop_from_inventory(W) + // If our mind is in VR, bring it back to the real world so it can die with its body if(vr_link) vr_link.exit_vr() diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index d1691c200c..76ffaccf80 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -158,6 +158,16 @@ var/list/_human_default_emotes = list( /decl/emote/audible/mothscream, /decl/emote/audible/mothchitter, /decl/emote/audible/mothlaugh, + /decl/emote/audible/multichirp, + /decl/emote/audible/gnarl, + /decl/emote/audible/teshsqueak, + /decl/emote/audible/teshchirp, + /decl/emote/audible/teshtrill, + /decl/emote/audible/teshscream, + /decl/emote/visible/bounce, + /decl/emote/visible/jiggle, + /decl/emote/visible/lightup, + /decl/emote/visible/vibrate, //VOREStation Add End //CHOMP Add start /decl/emote/audible/prbt2 @@ -309,12 +319,12 @@ var/list/_simple_mob_default_emotes = list( //VOREStation Add End /mob/living/carbon/human/get_available_emotes() - . = global._human_default_emotes + . = global._human_default_emotes.Copy() if(length(species?.default_emotes)) . |= species.default_emotes /mob/living/simple_mob/get_available_emotes() - . = global._simple_mob_default_emotes + . = global._simple_mob_default_emotes.Copy() /mob/living/carbon/human/verb/pose() set name = "Set Pose" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 2cb5300a7f..897ac2d2ca 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -76,9 +76,9 @@ BP_L_LEG = skip_body & EXAMINE_SKIPLEGS, BP_R_LEG = skip_body & EXAMINE_SKIPLEGS) + var/gender_hidden = (skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE) var/gender_key = get_visible_gender(user, gender_hidden) - var/datum/gender/T = gender_datums[gender_key] if (!T) CRASH({"Null gender datum on examine: mob="[src]",hidden="[gender_hidden]",key="[gender_key]",bio="[gender]",id="[identifying_gender]""}) @@ -107,93 +107,88 @@ if(w_uniform && !(skip_gear & EXAMINE_SKIPJUMPSUIT) && w_uniform.show_examine) //Ties var/tie_msg + var/tie_msg_warn if(istype(w_uniform,/obj/item/clothing/under) && !(skip_gear & EXAMINE_SKIPTIE)) var/obj/item/clothing/under/U = w_uniform if(LAZYLEN(U.accessories)) - var/list/accessories_visible = list() //please let this fix the stupid fucking runtimes + tie_msg += ". Attached to it is" + tie_msg_warn += "! Attached to it is" + var/list/accessory_descs = list() if(skip_gear & EXAMINE_SKIPHOLSTER) for(var/obj/item/clothing/accessory/A in U.accessories) if(A.show_examine && !istype(A, /obj/item/clothing/accessory/holster)) // If we're supposed to skip holsters, actually skip them - accessories_visible.Add(A) + accessory_descs += "\a [A]" else for(var/obj/item/clothing/accessory/A in U.accessories) if(A.concealed_holster == 0 && A.show_examine) - accessories_visible.Add(A) - - if(accessories_visible.len) - tie_msg += " Attached to it is [english_list(accessories_visible)]." - - var/list/pocket_msg - if(l_store) - var/l_store_message = l_store.pocket_description(src, user) - if(l_store_message) - LAZYADD(pocket_msg, l_store_message) - if(r_store) - var/r_store_message = r_store.pocket_description(src, user) - if(r_store_message) - LAZYADD(pocket_msg, r_store_message) - if(LAZYLEN(pocket_msg)) - tie_msg += " Near the waist it has [english_list(pocket_msg)]." + accessory_descs += "\a [A]" + tie_msg += " [lowertext(english_list(accessory_descs))]." if(w_uniform.blood_DNA) - msg += "[T.He] [T.is] wearing \icon[w_uniform][bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]" + msg += "[T.He] [T.is] wearing [bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != "#030303") ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]" else - msg += "[T.He] [T.is] wearing \icon[w_uniform][bicon(w_uniform)] \a [w_uniform].[tie_msg]" + msg += "[T.He] [T.is] wearing [bicon(w_uniform)] \a [w_uniform].[tie_msg]" //head if(head && !(skip_gear & EXAMINE_SKIPHELMET) && head.show_examine) if(head.blood_DNA) - msg += "[T.He] [T.is] wearing \icon[head][bicon(head)] [head.gender==PLURAL?"some":"a"] [(head.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [head.name] on [T.his] head!" + msg += "[T.He] [T.is] wearing [bicon(head)] [head.gender==PLURAL?"some":"a"] [(head.blood_color != "#030303") ? "blood" : "oil"]-stained [head.name] on [T.his] head!" else - msg += "[T.He] [T.is] wearing \icon[head][bicon(head)] \a [head] on [T.his] head." + msg += "[T.He] [T.is] wearing [bicon(head)] \a [head] on [T.his] head." //suit/armour if(wear_suit) var/tie_msg + var/tie_msg_warn if(istype(wear_suit,/obj/item/clothing/suit)) var/obj/item/clothing/suit/U = wear_suit if(LAZYLEN(U.accessories)) - tie_msg += " Attached to it is [english_list(U.accessories)]." + tie_msg += ". Attached to it is" + tie_msg_warn += "! Attached to it is" + var/list/accessory_descs = list() + for(var/accessory in U.accessories) + accessory_descs += "\a [accessory]" + tie_msg += " [lowertext(english_list(accessory_descs))]." if(wear_suit.blood_DNA) - msg += "[T.He] [T.is] wearing \icon[wear_suit][bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_suit.name][tie_msg]!" + msg += "[T.He] [T.is] wearing [bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != "#030303") ? "blood" : "oil"]-stained [wear_suit.name]![tie_msg]" else - msg += "[T.He] [T.is] wearing \icon[wear_suit][bicon(wear_suit)] \a [wear_suit].[tie_msg]" + msg += "[T.He] [T.is] wearing [bicon(wear_suit)] \a [wear_suit].[tie_msg]" //suit/armour storage if(s_store && !(skip_gear & EXAMINE_SKIPSUITSTORAGE) && s_store.show_examine) if(s_store.blood_DNA) - msg += "[T.He] [T.is] carrying \icon[s_store][bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!" + msg += "[T.He] [T.is] carrying [bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != "#030303") ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!" else - msg += "[T.He] [T.is] carrying \icon[s_store][bicon(s_store)] \a [s_store] on [T.his] [wear_suit.name]." + msg += "[T.He] [T.is] carrying [bicon(s_store)] \a [s_store] on [T.his] [wear_suit.name]." //back if(back && !(skip_gear & EXAMINE_SKIPBACKPACK) && back.show_examine) if(back.blood_DNA) - msg += "[T.He] [T.has] \icon[back][bicon(back)] [back.gender==PLURAL?"some":"a"] [(back.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [back] on [T.his] back." + msg += "[T.He] [T.has] [bicon(back)] [back.gender==PLURAL?"some":"a"] [(back.blood_color != "#030303") ? "blood" : "oil"]-stained [back] on [T.his] back." else - msg += "[T.He] [T.has] \icon[back][bicon(back)] \a [back] on [T.his] back." + msg += "[T.He] [T.has] [bicon(back)] \a [back] on [T.his] back." //left hand if(l_hand && l_hand.show_examine) if(l_hand.blood_DNA) - msg += "[T.He] [T.is] holding \icon[l_hand][bicon(l_hand)] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!" + msg += "[T.He] [T.is] holding [bicon(l_hand)] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != "#030303") ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!" else - msg += "[T.He] [T.is] holding \icon[l_hand][bicon(l_hand)] \a [l_hand] in [T.his] left hand." + msg += "[T.He] [T.is] holding [bicon(l_hand)] \a [l_hand] in [T.his] left hand." //right hand if(r_hand && r_hand.show_examine) if(r_hand.blood_DNA) - msg += "[T.He] [T.is] holding \icon[r_hand][bicon(r_hand)] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!" + msg += "[T.He] [T.is] holding [bicon(r_hand)] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != "#030303") ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!" else - msg += "[T.He] [T.is] holding \icon[r_hand][bicon(r_hand)] \a [r_hand] in [T.his] right hand." + msg += "[T.He] [T.is] holding [bicon(r_hand)] \a [r_hand] in [T.his] right hand." //gloves if(gloves && !(skip_gear & EXAMINE_SKIPGLOVES) && gloves.show_examine) if(gloves.blood_DNA) - msg += "[T.He] [T.has] \icon[gloves][bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!" + msg += "[T.He] [T.has] [bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != "#030303") ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!" else - msg += "[T.He] [T.has] \icon[gloves][bicon(gloves)] \a [gloves] on [T.his] hands." + msg += "[T.He] [T.has] [bicon(gloves)] \a [gloves] on [T.his] hands." else if(blood_DNA && !(skip_body & EXAMINE_SKIPHANDS)) msg += "[T.He] [T.has] [(hand_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained hands!" @@ -211,16 +206,16 @@ //belt if(belt && !(skip_gear & EXAMINE_SKIPBELT) && belt.show_examine) if(belt.blood_DNA) - msg += "[T.He] [T.has] \icon[belt][bicon(belt)] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!" + msg += "[T.He] [T.has] [bicon(belt)] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != "#030303") ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!" else - msg += "[T.He] [T.has] \icon[belt][bicon(belt)] \a [belt] about [T.his] waist." + msg += "[T.He] [T.has] [bicon(belt)] \a [belt] about [T.his] waist." //shoes if(shoes && !(skip_gear & EXAMINE_SKIPSHOES) && shoes.show_examine) if(shoes.blood_DNA) - msg += "[T.He] [T.is] wearing \icon[shoes][bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!" + msg += "[T.He] [T.is] wearing [bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != "#030303") ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!" else - msg += "[T.He] [T.is] wearing \icon[shoes][bicon(shoes)] \a [shoes] on [T.his] feet." + msg += "[T.He] [T.is] wearing [bicon(shoes)] \a [shoes] on [T.his] feet." else if(feet_blood_DNA && !(skip_body & EXAMINE_SKIPHANDS)) msg += "[T.He] [T.has] [(feet_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained feet!" @@ -231,38 +226,28 @@ descriptor = "in [T.his] mouth" if(wear_mask.blood_DNA) - msg += "[T.He] [T.has] \icon[wear_mask][bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_mask.name] [descriptor]!" + msg += "[T.He] [T.has] [bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != "#030303") ? "blood" : "oil"]-stained [wear_mask.name] [descriptor]!" else - msg += "[T.He] [T.has] \icon[wear_mask][bicon(wear_mask)] \a [wear_mask] [descriptor]." + msg += "[T.He] [T.has] [bicon(wear_mask)] \a [wear_mask] [descriptor]." //eyes if(glasses && !(skip_gear & EXAMINE_SKIPEYEWEAR) && glasses.show_examine) if(glasses.blood_DNA) - msg += "[T.He] [T.has] \icon[glasses][bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!" + msg += "[T.He] [T.has] [bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != "#030303") ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!" else - msg += "[T.He] [T.has] \icon[glasses][bicon(glasses)] \a [glasses] covering [T.his] eyes." + msg += "[T.He] [T.has] [bicon(glasses)] \a [glasses] covering [T.his] eyes." //left ear if(l_ear && !(skip_gear & EXAMINE_SKIPEARS) && l_ear.show_examine) - msg += "[T.He] [T.has] \icon[l_ear][bicon(l_ear)] \a [l_ear] on [T.his] left ear." + msg += "[T.He] [T.has] [bicon(l_ear)] \a [l_ear] on [T.his] left ear." //right ear if(r_ear && !(skip_gear & EXAMINE_SKIPEARS) && r_ear.show_examine) - msg += "[T.He] [T.has] \icon[r_ear][bicon(r_ear)] \a [r_ear] on [T.his] right ear." + msg += "[T.He] [T.has] [bicon(r_ear)] \a [r_ear] on [T.his] right ear." //ID if(wear_id && wear_id.show_examine) - /*var/id - if(istype(wear_id, /obj/item/device/pda)) - var/obj/item/device/pda/pda = wear_id - id = pda.owner - else if(istype(wear_id, /obj/item/weapon/card/id)) //just in case something other than a PDA/ID card somehow gets in the ID slot :[ - var/obj/item/weapon/card/id/idcard = wear_id - id = idcard.registered_name - if(id && (id != real_name) && (get_dist(src, usr) <= 1) && prob(10)) - msg += "[T.He] [T.is] wearing \icon[wear_id][bicon(wear_id)] \a [wear_id] yet something doesn't seem right..." - else*/ - msg += "[T.He] [T.is] wearing \icon[wear_id][bicon(wear_id)] \a [wear_id]." + msg += "[T.He] [T.is] wearing [bicon(wear_id)]\a [wear_id]." //Jitters if(is_jittery) @@ -438,6 +423,9 @@ msg += "Physical status: \[[medical]\]" msg += "Medical records: \[View\] \[Add comment\]" + if(hasHUD(user,"best")) + msg += "Employment records: \[View\] \[Add comment\]" + var/flavor_text = print_flavor_text() if(flavor_text) @@ -476,5 +464,3 @@ else if(istype(M, /mob/living/silicon/robot)) var/mob/living/silicon/robot/R = M return R.sensor_type //VOREStation Add - Borgo sensors are now binary so just have them on or off - - return 0 diff --git a/code/modules/mob/living/carbon/human/examine_vr.dm b/code/modules/mob/living/carbon/human/examine_vr.dm index 52162a96af..5fce5e9e9b 100644 --- a/code/modules/mob/living/carbon/human/examine_vr.dm +++ b/code/modules/mob/living/carbon/human/examine_vr.dm @@ -80,6 +80,9 @@ if("medical") if(omni.mode == "med" || omni.mode == "best") return TRUE + if("best") + if(omni.mode == "best") + return TRUE return FALSE diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 99eb70b2e9..59460e4f95 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -569,10 +569,97 @@ var/mob/living/silicon/robot/U = usr R.fields[text("com_[counter]")] = text("Made by [U.name] ([U.modtype] [U.braintype]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]
[t1]") + if (href_list["emprecord"]) + if(hasHUD(usr,"best")) + var/perpname = "wot" + var/read = 0 + + var/obj/item/weapon/card/id/I = GetIdCard() + if(I) + perpname = I.registered_name + else + perpname = name + for (var/datum/data/record/E in data_core.general) + if (E.fields["name"] == perpname) + for (var/datum/data/record/R in data_core.general) + if (R.fields["id"] == E.fields["id"]) + if(hasHUD(usr,"best")) + to_chat(usr, "Name: [R.fields["name"]]") + to_chat(usr, "Assignment: [R.fields["real_rank"]] ([R.fields["rank"]])") + to_chat(usr, "Home System: [R.fields["home_system"]]") + to_chat(usr, "Citizenship: [R.fields["citizenship"]]") + to_chat(usr, "Primary Employer: [R.fields["personal_faction"]]") + to_chat(usr, "Religious Beliefs: [R.fields["religion"]]") + to_chat(usr, "Notes: [R.fields["notes"]]") + to_chat(usr, "\[View Comment Log\]") + read = 1 + + if(!read) + to_chat(usr, "Unable to locate a data core entry for this person.") + + if (href_list["emprecordComment"]) + if(hasHUD(usr,"best")) + var/perpname = "wot" + var/read = 0 + + var/obj/item/weapon/card/id/I = GetIdCard() + if(I) + perpname = I.registered_name + else + perpname = name + for (var/datum/data/record/E in data_core.general) + if (E.fields["name"] == perpname) + for (var/datum/data/record/R in data_core.general) + if (R.fields["id"] == E.fields["id"]) + if(hasHUD(usr,"best")) + read = 1 + var/counter = 1 + while(R.fields[text("com_[]", counter)]) + to_chat(usr, "[R.fields[text("com_[]", counter)]]") + counter++ + if (counter == 1) + to_chat(usr, "No comment found") + to_chat(usr, "\[Add comment\]") + + if(!read) + to_chat(usr, "Unable to locate a data core entry for this person.") + + if (href_list["emprecordadd"]) + if(hasHUD(usr,"best")) + var/perpname = "wot" + var/obj/item/weapon/card/id/I = GetIdCard() + if(I) + perpname = I.registered_name + else + perpname = name + for (var/datum/data/record/E in data_core.general) + if (E.fields["name"] == perpname) + for (var/datum/data/record/R in data_core.general) + if (R.fields["id"] == E.fields["id"]) + if(hasHUD(usr,"best")) + var/t1 = sanitize(tgui_input_text(usr, "Add Comment:", "Emp. records", null, null, multiline = TRUE, prevent_enter = TRUE)) + if ( !(t1) || usr.stat || usr.restrained() || !(hasHUD(usr,"best")) ) + return + var/counter = 1 + while(R.fields[text("com_[]", counter)]) + counter++ + if(istype(usr,/mob/living/carbon/human)) + var/mob/living/carbon/human/U = usr + R.fields[text("com_[counter]")] = text("Made by [U.get_authentification_name()] ([U.get_assignment()]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]
[t1]") + if(istype(usr,/mob/living/silicon/robot)) + var/mob/living/silicon/robot/U = usr + R.fields[text("com_[counter]")] = text("Made by [U.name] ([U.modtype] [U.braintype]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]
[t1]") + if (href_list["lookitem"]) var/obj/item/I = locate(href_list["lookitem"]) src.examinate(I) + if (href_list["lookitem_desc_only"]) + var/obj/item/I = locate(href_list["lookitem_desc_only"]) + if(!I) + return + usr.examinate(I, 1) + if (href_list["lookmob"]) var/mob/M = locate(href_list["lookmob"]) src.examinate(M) @@ -864,7 +951,7 @@ if(VISIBLE_GENDER_FORCE_BIOLOGICAL) return gender else - if((wear_mask || (head?.flags_inv & HIDEMASK)) && (wear_suit?.flags_inv & HIDEJUMPSUIT)) + if(((wear_mask?.flags_inv & HIDEFACE) || (head?.flags_inv & HIDEMASK) || (head?.flags_inv & HIDEFACE)) && (wear_suit?.flags_inv & HIDEJUMPSUIT)) return PLURAL if(species?.ambiguous_genders && user) if(ishuman(user)) @@ -1149,6 +1236,7 @@ default_pixel_y = initial(pixel_y) + species.pixel_offset_y pixel_x = default_pixel_x pixel_y = default_pixel_y + center_offset = species.center_offset //CHOMPEdit if(LAZYLEN(descriptors)) descriptors = null diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 7648908cc8..31a5e7be7d 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -395,16 +395,24 @@ emp_act //VORESTATION EDIT START - Allows for thrown vore! //Throwing a prey into a pred takes priority. After that it checks to see if the person being thrown is a pred. + // I put more comments here for ease of reading. if(istype(AM, /mob/living)) var/mob/living/thrown_mob = AM - if((can_be_drop_pred && throw_vore) && (thrown_mob.devourable && thrown_mob.throw_vore && thrown_mob.can_be_drop_prey)) //Prey thrown into pred. + if(isanimal(thrown_mob) && !allowmobvore) //Is the thrown_mob an animal and we don't allow mobvore? + return + // PERSON BEING HIT: CAN BE DROP PRED, ALLOWS THROW VORE. + // PERSON BEING THROWN: DEVOURABLE, ALLOWS THROW VORE, CAN BE DROP PREY. + if((can_be_drop_pred && throw_vore && vore_selected) && (thrown_mob.devourable && thrown_mob.throw_vore && thrown_mob.can_be_drop_prey)) //Prey thrown into pred. vore_selected.nom_mob(thrown_mob) //Eat them!!! visible_message("[thrown_mob] is thrown right into [src]'s [lowertext(vore_selected.name)]!") if(thrown_mob.loc != vore_selected) thrown_mob.forceMove(vore_selected) //Double check. Should never happen but...Weirder things have happened! add_attack_logs(thrown_mob.thrower,src,"Devoured [thrown_mob.name] via throw vore.") return //We can stop here. We don't need to calculate damage or anything else. They're eaten. - else if((can_be_drop_prey && throw_vore && devourable) && (thrown_mob.can_be_drop_pred && thrown_mob.throw_vore)) //Pred thrown into prey. + + // PERSON BEING HIT: CAN BE DROP PREY, ALLOWS THROW VORE, AND IS DEVOURABLE. + // PERSON BEING THROWN: CAN BE DROP PRED, ALLOWS THROW VORE. + else if((can_be_drop_prey && throw_vore && devourable) && (thrown_mob.can_be_drop_pred && thrown_mob.throw_vore && thrown_mob.vore_selected)) //Pred thrown into prey. visible_message("[src] suddenly slips inside of [thrown_mob]'s [lowertext(thrown_mob.vore_selected.name)] as [thrown_mob] flies into them!") thrown_mob.vore_selected.nom_mob(src) //Eat them!!! if(src.loc != thrown_mob.vore_selected) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index c017377297..c8aba57735 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -377,6 +377,12 @@ This saves us from having to call add_fingerprint() any time something is put in W.in_inactive_hand(src) + //VOREStation Addition Start + if(istype(W, /obj/item)) + var/obj/item/I = W + I.equip_special() + //VOREStation Addition End + return 1 //Checks if a given slot can be accessed at this time, either to equip or unequip I diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 5763041914..bbd12e5e97 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -291,11 +291,13 @@ var/obj/item/organ/internal/I = null //Used for further down below when an organ is picked. if(!radiation) if(species.appearance_flags & RADIATION_GLOWS) + glow_override = FALSE set_light(0) if(accumulated_rads) accumulated_rads -= RADIATION_SPEED_COEFFICIENT //Accumulated rads slowly dissipate very slowly. Get to medical to get it treated! else if(((life_tick % 5 == 0) && radiation) || (radiation > 600)) //Radiation is a slow, insidious killer. Unless you get a massive dose, then the onset is sudden! if(species.appearance_flags & RADIATION_GLOWS) + glow_override = TRUE set_light(max(1,min(5,radiation/15)), max(1,min(10,radiation/25)), species.get_flesh_colour(src)) // END DOGSHIT SNOWFLAKE @@ -1200,9 +1202,11 @@ var/turf/T = loc light_amount = T.get_lumcount() / 10 adjust_nutrition(light_amount) - //CHOMPEdit End // nutrition decrease - if (nutrition > 0 && stat != DEAD) + if(nutrition <= 0 && species.shrinks && size_multiplier > RESIZE_TINY) + nutrition = 0.1 + //CHOMPEdit End + if(nutrition > 0 && stat != DEAD) var/nutrition_reduction = species.hunger_factor for(var/datum/modifier/mod in modifiers) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 2d116e98e0..37f8470dc9 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -102,12 +102,14 @@ var/flash_mod = 1 // Stun from blindness modifier (flashes and flashbangs) var/flash_burn = 0 // how much damage to take from being flashed if light hypersensitive var/sound_mod = 1 // Multiplier to the effective *range* of flashbangs. a flashbang's bang hits an entire screen radius, with some falloff. - var/chem_strength_heal = 1 // Multiplier to most beneficial chem strength - var/chem_strength_pain = 1 // Multiplier to painkiller strength (could be used in a negative trait to simulate long-term addiction reducing effects, etc.) - var/chem_strength_tox = 1 // Multiplier to toxic chem strength (inc. chloral/sopo/mindbreaker/etc. thresholds) + + var/chem_strength_heal = 1 // Multiplier to most beneficial chem strength + var/chem_strength_pain = 1 // Multiplier to painkiller strength (could be used in a negative trait to simulate long-term addiction reducing effects, etc.) + var/chem_strength_tox = 1 // Multiplier to toxic chem strength (inc. chloral/sopo/mindbreaker/etc. thresholds) + var/chem_strength_alcohol = 1 // Multiplier to alcohol strength; 0.5 = half, 0 = no effect at all, 2 = double, etc. + var/chemOD_threshold = 1 // Multiplier to overdose threshold; lower = easier overdosing var/chemOD_mod = 1 // Damage modifier for overdose; higher = more damage from ODs - var/alcohol_mod = 1 // Multiplier to alcohol strength; 0.5 = half, 0 = no effect at all, 2 = double, etc. var/pain_mod = 1 // Multiplier to pain effects; 0.5 = half, 0 = no effect (equal to NO_PAIN, really), 2 = double, etc. var/stun_mod = 1 // Multiplier to stun effects; 0.5 = half, - = no effect (immune), 2 = double, etc. var/weaken_mod = 1 // Multiplier to weakness effects; 0.5 = half, - = no effect (immune), 2 = double, etc. diff --git a/code/modules/mob/living/carbon/human/species/species_vr.dm b/code/modules/mob/living/carbon/human/species/species_vr.dm index 77d15d000a..145e296281 100644 --- a/code/modules/mob/living/carbon/human/species/species_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_vr.dm @@ -35,6 +35,7 @@ var/micro_size_mod = 0 // How different is our size for interactions that involve us being small? var/macro_size_mod = 0 // How different is our size for interactions that involve us being big? var/digestion_nutrition_modifier = 1 + var/center_offset = 0.5 //CHOMPEdit /datum/species/proc/give_numbing_bite() //Holy SHIT this is hacky, but it works. Updating a mob's attacks mid game is insane. @@ -86,6 +87,8 @@ if(H.dna) H.dna.ready_dna(H) + handle_base_eyes(H, custom_base) //ChompEDIT. ensure custom species with a base get the correct eyes + return new_copy /datum/species/proc/copy_variables(var/datum/species/S, var/list/whitelist) diff --git a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm index e33a98502e..0b6a891890 100644 --- a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm @@ -48,6 +48,31 @@ trait_points = 2 + //CHOMPEdit Start - add a bunch of default emotes + default_emotes = list( + /decl/emote/audible/teshsqueak, + /decl/emote/audible/teshchirp, + /decl/emote/audible/teshtrill, + /decl/emote/audible/vox_shriek, + /decl/emote/audible/squish, + /decl/emote/audible/chirp, + /decl/emote/visible/bounce, + /decl/emote/visible/jiggle, + /decl/emote/visible/lightup, + /decl/emote/visible/vibrate, + /decl/emote/audible/gnarl, + /decl/emote/audible/purr, + /decl/emote/audible/purrlong, + /decl/emote/human/swish, + /decl/emote/human/wag, + /decl/emote/human/sway, + /decl/emote/human/qwag, + /decl/emote/human/fastsway, + /decl/emote/human/swag, + /decl/emote/human/stopsway + ) + //CHOMPEdit End + /datum/species/custom/update_sort_hint() sort_hint = SPECIES_SORT_CUSTOM diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans.dm b/code/modules/mob/living/carbon/human/species/station/prometheans.dm index d65f2afb7a..fe9f8ce017 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm @@ -60,6 +60,8 @@ var/datum/species/shapeshifter/promethean/prometheans oxy_mod = 0 flash_mod = 0.5 //No centralized, lensed eyes. item_slowdown_mod = 1.33 + + chem_strength_alcohol = 2 cloning_modifier = /datum/modifier/cloning_sickness/promethean diff --git a/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm b/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm index 2ec531d1ce..470206a4c4 100644 --- a/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm +++ b/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm @@ -323,7 +323,7 @@ return /mob/living/simple_mob/slime/promethean/get_available_emotes() - var/list/fulllist = _slime_default_emotes + var/list/fulllist = global._slime_default_emotes.Copy() fulllist += default_emotes return fulllist /mob/living/carbon/human diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index d54928b455..c1fdd74b69 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -71,6 +71,7 @@ name_language = LANGUAGE_UNATHI species_language = LANGUAGE_UNATHI health_hud_intensity = 2.5 + chem_strength_alcohol = 0.75 min_age = 32 max_age = 260 @@ -198,6 +199,7 @@ name_language = LANGUAGE_SIIK species_language = LANGUAGE_SIIK health_hud_intensity = 2.5 + chem_strength_alcohol = 1.25 min_age = 18 max_age = 110 @@ -304,6 +306,7 @@ species_language = LANGUAGE_SKRELLIAN assisted_langs = list(LANGUAGE_EAL, LANGUAGE_TERMINUS, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) health_hud_intensity = 2 + chem_strength_alcohol = 5 water_movement = -3 @@ -519,6 +522,7 @@ show_ssd = "completely quiescent" health_hud_intensity = 2.5 item_slowdown_mod = 0.1 + chem_strength_alcohol = 0 num_alternate_languages = 3 name_language = LANGUAGE_ROOTLOCAL diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm index 5d09da2de6..15605cead8 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm @@ -97,10 +97,10 @@ if (getBruteLoss() || getFireLoss() || getHalLoss() || getToxLoss() || getOxyLoss() || getBrainLoss()) //fails if they have any of the main damage types return FALSE for (var/obj/item/organ/O in organs) //check their organs just in case they're being sneaky and somehow have organ damage but no health damage - if (O.damage) + if (O.is_damaged() || O.status) return FALSE for (var/obj/item/organ/O in internal_organs) //check their organs just in case they're being sneaky and somehow have organ damage but no health damage - if (O.damage) + if (O.is_damaged() || O.status) return FALSE return TRUE @@ -118,10 +118,13 @@ //Dead when hatching if(stat == DEAD) + // var/sickness_duration = 10 MINUTES //CHOMPedit //Reviving from ded takes extra nutrition - if it isn't provided from outside sources, it comes from you if(!hasnutriment()) nutrition=nutrition * 0.75 + // sickness_duration = 20 MINUTES //CHOMPedit chimera_hatch() + // add_modifier(/datum/modifier/resleeving_sickness/chimera, sickness_duration) //CHOMPedit adjustBrainLoss(5) // if they're reviving from dead, they come back with 5 brainloss on top of whatever's unhealed. visible_message("

The former corpse staggers to its feet, all its former wounds having vanished...

") //Bloody hell... clear_alert("hatch") @@ -168,6 +171,13 @@ revive_ready = world.time + 10 MINUTES //set the cooldown CHOMPEdit: Reduced this to 10 minutes, you're playing with fire if you're reviving that often. +/datum/modifier/resleeving_sickness/chimera //near identical to the regular version, just with different flavortexts + name = "imperfect regeneration" + desc = "You feel rather weak and unfocused, having just regrown your body not so long ago." + + on_created_text = "You feel weak and unsteady, that regeneration having been rougher than most." + on_expired_text = "You feel your strength and focus return to you." + /mob/living/carbon/human/proc/revivingreset() // keep this as a debug proc or potential future use revive_ready = REVIVING_READY diff --git a/code/modules/mob/living/carbon/human/species/station/station_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_vr.dm index 6eea9bc061..814204ead5 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_vr.dm @@ -257,6 +257,27 @@ // wikilink="https://wiki.vore-station.net/Backstory#Vulpkanin" catalogue_data = list(/datum/category_item/catalogue/fauna/vulpkanin) + + //Furry fox-like animals shouldn't start freezing at 5 degrees celsius. + //Minor cold is resisted, but not severe frost. + cold_discomfort_level = 263 //Not as good at surviving the frost as tajara, but still better than humans. + + cold_level_1 = 243 //Default 260, other values remain at default. Starts taking damage at -30 celsius. Default tier 2 is -70 and tier 3 is -150 + + + breath_cold_level_1 = 220 // Default 240, lower is better. + + //While foxes can survive in deserts, that's handled by zorren. It's a good contrast that our vulp find heat a little uncomfortable. + + heat_discomfort_level = 295 //Just above standard 20 C to avoid heat message spam, same as Taj + + heat_level_1 = 345 //Default 360 + heat_level_2 = 390 //Default 400 + heat_level_3 = 900 //Default 1000 + + breath_heat_level_1 = 370 //Default 380 - Higher is better + breath_heat_level_2 = 445 //Default 450 + breath_heat_level_3 = 1125 //Default 1250 primitive_form = "Wolpin" @@ -270,6 +291,12 @@ min_age = 18 max_age = 110 + + heat_discomfort_strings = list( + "Your fur prickles in the heat.", + "You feel uncomfortably warm.", + "Your overheated skin itches." + ) /datum/species/unathi mob_size = MOB_MEDIUM //To allow normal mob swapping diff --git a/code/modules/mob/living/carbon/human/species/station/teshari.dm b/code/modules/mob/living/carbon/human/species/station/teshari.dm index 17fe6606da..050e3a729b 100644 --- a/code/modules/mob/living/carbon/human/species/station/teshari.dm +++ b/code/modules/mob/living/carbon/human/species/station/teshari.dm @@ -27,6 +27,7 @@ //CHOMPStation Add. Y'know I should probably just put this upstream. male_scream_sound = 'sound/effects/mob_effects/teshariscream.ogg' female_scream_sound = 'sound/effects/mob_effects/teshariscream.ogg' + center_offset = 0 //CHOMPEdit //CHOMPStation Add End blood_color = "#D514F7" @@ -80,7 +81,7 @@ breath_cold_level_2 = 100 //Default 180 breath_cold_level_3 = 60 //Default 100 - heat_level_1 = 320 //Default 360 + heat_level_1 = 330 //Default 360 heat_level_2 = 370 //Default 400 heat_level_3 = 600 //Default 1000 diff --git a/code/modules/mob/living/carbon/human/species/station/teshari_vr.dm b/code/modules/mob/living/carbon/human/species/station/teshari_vr.dm index 4e61c3b169..b7f46bcc3c 100644 --- a/code/modules/mob/living/carbon/human/species/station/teshari_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/teshari_vr.dm @@ -1,5 +1,5 @@ /datum/species/teshari - mob_size = MOB_SMALL //YW Edit: changed from MOB_MEDIUM to MOB_SMALL + mob_size = MOB_MEDIUM spawn_flags = SPECIES_CAN_JOIN icobase = 'icons/mob/human_races/r_teshari_vr.dmi' deform = 'icons/mob/human_races/r_teshari_vr.dmi' diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm index 9396c85293..fb91b0cce7 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm @@ -76,6 +76,7 @@ desc = "You are blind. For whatever reason, nothing is able to change this fact, not even surgery. WARNING: YOU WILL NOT BE ABLE TO SEE ANY POSTS USING THE ME VERB, ONLY SUBTLE AND DIALOGUE ARE VIEWABLE TO YOU, YOU HAVE BEEN WARNED." cost = -8 special_env = TRUE + custom_only = FALSE /datum/trait/negative/blindness/handle_environment_special(var/mob/living/carbon/human/H) H.sdisabilities |= BLIND //no matter what you do, the blindess still comes for you @@ -169,10 +170,10 @@ // Check for company. for(var/mob/living/M in viewers(get_turf(H))) in_range |= check_mob_company(H,M) - + for(var/obj/effect/overlay/aiholo/A in range(5, H)) in_range |= A - + if(in_range.len > 2) if(H.loneliness_stage < warning_cap) H.loneliness_stage = min(warning_cap,H.loneliness_stage+escalation_speed) @@ -232,7 +233,7 @@ return in_range var/social_check = !istype(M, /mob/living/carbon) && !istype(M, /mob/living/silicon/robot) var/ckey_check = !M.ckey - var/overall_checks = M == H || M.stat == DEAD || social_check || ckey_check + var/overall_checks = M == H || M.stat == DEAD || social_check || ckey_check if(invis_matters && M.invisibility > H.see_invisible) return in_range if(!overall_checks) @@ -291,7 +292,7 @@ var/social_check = only_people && !istype(M, /mob/living/carbon) && !istype(M, /mob/living/silicon/robot) var/self_invisible_check = M == H || M.invisibility > H.see_invisible var/ckey_check = only_people && !M.ckey - var/overall_checks = M.stat == DEAD || social_check || ckey_check + var/overall_checks = M.stat == DEAD || social_check || ckey_check if(self_invisible_check) return 0 if((M.faction == "neutral" || M.faction == H.faction) && !overall_checks) @@ -351,7 +352,7 @@ sub_loneliness(H) for(var/obj/effect/overlay/aiholo/A in range(5, H)) sub_loneliness(H) - + // No company? Suffer :( if(H.loneliness_stage < warning_cap) H.loneliness_stage = min(warning_cap,H.loneliness_stage+escalation_speed) @@ -382,23 +383,23 @@ desc = "Your body is very fragile. Reduces your maximum hitpoints to 25. Beware sneezes. You require only 50 damage in total to die, compared to 200 normally. You will go into crit after losing 25 HP, compared to crit at 100 HP." cost = -12 // Similar to Very Low Endurance, this straight up will require you NEVER getting in a fight. This is extremely crippling. I salute the madlad that takes this. var_changes = list("total_health" = 25) - + /datum/trait/negative/endurance_glass/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..(S,H) H.setMaxHealth(S.total_health) - + /datum/trait/negative/reduced_biocompat_minor name = "Reduced Biocompatibility, Minor" desc = "For whatever reason, you're one of the unlucky few who don't get as much benefit from modern-day chemicals. Remember to note this down in your medical records! Chems are only 80% as effective on you!" cost = -1 var_changes = list("chem_strength_heal" = 0.8) - + /datum/trait/negative/reduced_biocompat name = "Reduced Biocompatibility" desc = "For whatever reason, you're one of the unlucky few who don't get as much benefit from modern-day chemicals. Remember to note this down in your medical records! Chems are only 60% as effective on you!" cost = -4 var_changes = list("chem_strength_heal" = 0.6) - + /datum/trait/negative/reduced_biocompat_extreme name = "Reduced Biocompatibility, Major" desc = "For whatever reason, you're one of the unlucky few who don't get as much benefit from modern-day chemicals. Remember to note this down in your medical records! Chems are only 30% as effective on you!" @@ -428,10 +429,10 @@ /datum/trait/negative/haemophilia_plus/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..(S,H) H.add_modifier(/datum/modifier/trait/haemophilia) - + /datum/trait/negative/pain_intolerance_basic name = "Pain Intolerance" - desc = "You are frail and sensitive to pain. You experience 25% more pain from all sources." + desc = "You are frail and sensitive to pain. You experience 25% more pain from all sources." cost = -2 var_changes = list("pain_mod" = 1.2) // CHOMPEdit: Makes this exact opposite of Pain Tolerance Basic. @@ -440,7 +441,7 @@ desc = "You are highly sensitive to all sources of pain, and experience 50% more pain." cost = -3 var_changes = list("pain_mod" = 1.5) //this makes you extremely vulnerable to most sources of pain, a stunbaton bop or shotgun beanbag will do around 90 agony, almost enough to drop you in one hit. CHOMPEdit: This really should cost more if it's this bad. - + /datum/trait/negative/sensitive_biochem name = "Sensitive Biochemistry" diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm index 30ce470894..7aae2b9d69 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -281,8 +281,75 @@ custom_only = FALSE allergen = ALLERGEN_COFFEE +/datum/trait/neutral/allergy_reaction + name = "Allergy Reaction: Disable Toxicity" + desc = "Take this trait to disable the toxic damage effect of being exposed to one of your allergens. Combine with the Disable Suffocation trait to have purely nonlethal reactions." + cost = 0 + custom_only = FALSE + var/reaction = AG_TOX_DMG + +/datum/trait/neutral/allergy_reaction/apply(var/datum/species/S,var/mob/living/carbon/human/H) + S.allergen_reaction ^= reaction + ..(S,H) + +/datum/trait/neutral/allergy_reaction/oxy + name = "Allergy Reaction: Disable Suffocation" + desc = "Take this trait to disable the oxygen deprivation damage effect of being exposed to one of your allergens. Combine with the Disable Toxicity trait to have purely nonlethal reactions." + cost = 0 + custom_only = FALSE + reaction = AG_OXY_DMG + +/datum/trait/neutral/allergy_reaction/brute + name = "Allergy Reaction: Spontaneous Trauma" + desc = "When exposed to one of your allergens, your skin develops unnatural bruises and other 'stigmata'-like injuries. Be aware that untreated wounds may become infected." + cost = 0 + custom_only = FALSE + reaction = AG_PHYS_DMG + +/datum/trait/neutral/allergy_reaction/burn + name = "Allergy Reaction: Blistering" + desc = "When exposed to one of your allergens, your skin develops unnatural blisters and burns, as if exposed to fire. Be aware that untreated burns are very susceptible to infection!" + cost = 0 + custom_only = FALSE + reaction = AG_BURN_DMG + +/datum/trait/neutral/allergy_reaction/pain + name = "Allergy Reaction: Disable Pain" + desc = "Take this trait to disable experiencing pain after being exposed to one of your allergens." + cost = 0 + custom_only = FALSE + reaction = AG_PAIN + +/datum/trait/neutral/allergy_reaction/weaken + name = "Allergy Reaction: Knockdown" + desc = "When exposed to one of your allergens, you will experience sudden and abrupt loss of muscle control and tension, resulting in immediate collapse and immobility. Does nothing if you have no allergens." + cost = 0 + custom_only = FALSE + reaction = AG_WEAKEN + +/datum/trait/neutral/allergy_reaction/blurry + name = "Allergy Reaction: Disable Blurring" + desc = "Take this trait to disable the blurred/impeded vision effect of allergens." + cost = 0 + custom_only = FALSE + reaction = AG_BLURRY + +/datum/trait/neutral/allergy_reaction/sleepy + name = "Allergy Reaction: Fatigue" + desc = "When exposed to one of your allergens, you will experience fatigue and tiredness, and may potentially pass out entirely. Does nothing if you have no allergens." + cost = 0 + custom_only = FALSE + reaction = AG_SLEEPY + +/datum/trait/neutral/allergy_reaction/confusion + name = "Allergy Reaction: Disable Confusion" + desc = "Take this trait to disable the confusion/disorientation effect of allergens." + cost = 0 + custom_only = FALSE + reaction = AG_CONFUSE + /datum/trait/neutral/allergen_reduced_effect - name = "Reduced Allergen Reaction" + name = "Allergen Reaction: Reduced Intensity" desc = "This trait drastically reduces the effects of allergen reactions. If you don't have any allergens set, it does nothing. It does not apply to special reactions (such as unathi drowsiness from sugars)." cost = 0 custom_only = FALSE @@ -290,7 +357,7 @@ excludes = list(/datum/trait/neutral/allergen_increased_effect) /datum/trait/neutral/allergen_increased_effect - name = "Increased Allergen Reaction" + name = "Allergen Reaction: Increased Intensity" desc = "This trait drastically increases the effects of allergen reactions, enough that even a small dose can be lethal. If you don't have any allergens set, it does nothing. It does not apply to special reactions (such as unathi drowsiness from sugars)." cost = 0 custom_only = FALSE @@ -343,45 +410,53 @@ // Alcohol Traits Start Here, from negative to positive. /datum/trait/neutral/alcohol_intolerance_advanced name = "Liver of Air" - desc = "The only way you can hold a drink is if it's in your own two hands, and even then you'd best not inhale too deeply near it. Drinks are three times as strong." + desc = "The only way you can hold a drink is if it's in your own two hands, and even then you'd best not inhale too deeply near it. Alcohol hits you three times as hard as they do other people." cost = 0 custom_only = FALSE - var_changes = list("alcohol_mod" = 3) // 300% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this! + var_changes = list("chem_strength_alcohol" = 3) /datum/trait/neutral/alcohol_intolerance_basic name = "Liver of Lilies" - desc = "You have a hard time with alcohol. Maybe you just never took to it, or maybe it doesn't agree with you... either way, drinks are twice as strong." + desc = "You have a hard time with alcohol. Maybe you just never took to it, or maybe it doesn't agree with your system... either way, alcohol hits you twice as hard." cost = 0 custom_only = FALSE - var_changes = list("alcohol_mod" = 2) // 200% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this! + var_changes = list("chem_strength_alcohol" = 2) /datum/trait/neutral/alcohol_intolerance_slight name = "Liver of Tulips" - desc = "You have a slight struggle with alcohol. Drinks are one and a half times stronger." + desc = "You are what some might call 'a bit of a lightweight', but you can still keep your drinks down... most of the time. Alcohol hits you fifty percent harder." cost = 0 custom_only = FALSE - var_changes = list("alcohol_mod" = 1.5) // 150% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this! + var_changes = list("chem_strength_alcohol" = 1.5) + +/datum/trait/neutral/alcohol_tolerance_reset + name = "Liver of Unremarkableness" + desc = "This trait exists to reset alcohol (in)tolerance for non-custom species to baseline normal. It can only be taken by Skrell, Tajara, Unathi, Diona, and Prometheans, as it would have no effect on other species." + cost = 0 + custom_only = FALSE + var_changes = list("chem_strength_alcohol" = 1) + allowed_species = list(SPECIES_SKRELL,SPECIES_TAJ,SPECIES_UNATHI,SPECIES_DIONA,SPECIES_PROMETHEAN) /datum/trait/neutral/alcohol_tolerance_basic name = "Liver of Iron" - desc = "You can hold drinks much better than those lily-livered land-lubbers! Arr! Drinks are only three-quarters as strong." + desc = "You can hold drinks much better than those lily-livered land-lubbers! Arr! Alcohol's effects on you are reduced by about a quarter." cost = 0 custom_only = FALSE - var_changes = list("alcohol_mod" = 0.75) // 75% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this! + var_changes = list("chem_strength_alcohol" = 0.75) /datum/trait/neutral/alcohol_tolerance_advanced name = "Liver of Steel" - desc = "Drinks tremble before your might! You can hold your alcohol twice as well as those blue-bellied barnacle boilers! Drinks are only half as strong." + desc = "Drinks tremble before your might! You can hold your alcohol twice as well as those blue-bellied barnacle boilers! Alcohol has just half the effect on you as it does on others." cost = 0 custom_only = FALSE - var_changes = list("alcohol_mod" = 0.5) // 50% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this! + var_changes = list("chem_strength_alcohol" = 0.5) /datum/trait/neutral/alcohol_immunity name = "Liver of Durasteel" desc = "You've drunk so much that most booze doesn't even faze you. It takes something like a Pan-Galactic or a pint of Deathbell for you to even get slightly buzzed." cost = 0 custom_only = FALSE - var_changes = list("alcohol_mod" = 0.25) // 25% as effective if alcohol_mod is set to 1. If it's not 1 in species.dm, update this! + var_changes = list("chem_strength_alcohol" = 0.25) // Alcohol Traits End Here. /datum/trait/neutral/colorblind/mono diff --git a/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm b/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm index 680e9d69bb..023a9272cb 100644 --- a/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm @@ -43,7 +43,7 @@ cost = 0 category = 0 custom_only = FALSE - var_changes = list("unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/chimera, /datum/unarmed_attack/bite/sharp, /datum/unarmed_attack/bite/sharp/numbing)) // CHOMPEdit: Fix 'chimera unarmed attacks with this trait + var_changes = list("unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/chimera, /datum/unarmed_attack/bite/sharp, /datum/unarmed_attack/bite/sharp/numbing)) // Fixes the parent forgetting to add 'chimera-specific claws /datum/trait/positive/snowwalker/xenochimera sort = TRAIT_SORT_SPECIES @@ -65,6 +65,8 @@ custom_only = FALSE /datum/trait/positive/winged_flight/xenochimera + sort = TRAIT_SORT_SPECIES + allowed_species = list(SPECIES_XENOCHIMERA) name = "Xenochhimera: Winged Flight" desc = "Allows you to fly by using your wings. Don't forget to bring them!" cost = 0 diff --git a/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm b/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm index ec054ab520..c9254c0c9a 100644 --- a/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm +++ b/code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm @@ -79,7 +79,7 @@ src.vr_link = avatar // Can't reuse vr_holder so that death can automatically eject users from VR // Move the mind - avatar.Sleeping(1) + // avatar.Sleeping(1) So vox don't drop their can, also feels arbitrary src.mind.transfer_to(avatar) to_chat(avatar, "You have enterred Virtual Reality!\nAll normal gameplay rules still apply.\nWounds you suffer here won't persist when you leave VR, but some of the pain will.\nYou can leave VR at any time by using the \"Exit Virtual Reality\" verb in the Abilities tab, or by ghosting.") //No more prommie VR thing, so removed tidbit about changing appearance to_chat(avatar, " You black out for a moment, and wake to find yourself in a new body in virtual reality.") // So this is what VR feels like? @@ -117,4 +117,14 @@ if(istype(vr_holder.loc, /obj/machinery/vr_sleeper)) var/obj/machinery/vr_sleeper/V = vr_holder.loc - V.go_out() \ No newline at end of file + V.go_out() + + if(died_in_vr) + spawn(3000) //Delete the body after 5 minutes to make sure mob subsystem doesn't cry + var/list/slots = list(slot_back,slot_handcuffed,slot_l_store,slot_r_store,slot_wear_mask,slot_l_hand,slot_r_hand,slot_wear_id,slot_glasses,slot_gloves,slot_head,slot_shoes,slot_belt,slot_wear_suit,slot_w_uniform,slot_s_store,slot_l_ear,slot_r_ear) + for(var/slot in slots) + var/obj/item/I = get_equipped_item(slot = slot) + if(I) + unEquip(I,force = TRUE) + release_vore_contents(include_absorbed = TRUE, silent = TRUE) + qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index e0c9397f0e..5f63f1d757 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -137,46 +137,46 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() var/desired_scale_y = size_multiplier * icon_scale_y desired_scale_x *= species.icon_scale_x desired_scale_y *= species.icon_scale_y + center_offset = species.center_offset //CHOMPEdit + if(offset_override) //CHOMPEdit + center_offset = 0 //CHOMPEdit vis_height = species.icon_height appearance_flags |= PIXEL_SCALE if(fuzzy) appearance_flags &= ~PIXEL_SCALE + center_offset = 0 //CHOMPEdit //VOREStation Edit End // Regular stuff again. var/matrix/M = matrix() var/anim_time = 3 - // VOREStation Edit Start: Porting Taur Loafing - if(tail_style?.can_loaf && resting) // Only call these if we're resting? - update_tail_showing() - return // No need to do the rest, we return early - /* // Commenting this out as sleeping is fucky - if(tail_style?.can_loaf && lying && sleeping) // If we're put under by anesthetic or fainting - update_tail_showing() - // return // No need to do the rest, we return early - */ - // VOREStation Edit End - //Due to some involuntary means, you're laying now if(lying && !resting && !sleeping) anim_time = 1 //Thud if(lying && !species.prone_icon) //Only rotate them if we're not drawing a specific icon for being prone. - var/randn = rand(1, 2) - if(randn <= 1) // randomly choose a rotation - M.Turn(-90) + // CHOMPEdit Start Loafy Time + if(tail_style?.can_loaf && resting) // Only call these if we're resting? + update_tail_showing() + M.Scale(desired_scale_x, desired_scale_y) else - M.Turn(90) - M.Scale(desired_scale_y, desired_scale_x)//VOREStation Edit - if(species.icon_height == 64)//VOREStation Edit - M.Translate(13,-22) - else - M.Translate(1,-6) + var/randn = rand(1, 2) + if(randn <= 1) // randomly choose a rotation + M.Turn(-90) + else + M.Turn(90) + if(species.icon_height == 64) + M.Translate(13,-22) + else + M.Translate(1,-6) + M.Scale(desired_scale_y, desired_scale_x) + M.Translate(center_offset * desired_scale_x, (vis_height/2)*(desired_scale_y-1)) //CHOMPEdit + // CHOMPEdit End layer = MOB_LAYER -0.01 // Fix for a byond bug where turf entry order no longer matters else M.Scale(desired_scale_x, desired_scale_y)//VOREStation Edit - M.Translate(0, (vis_height/2)*(desired_scale_y-1)) //VOREStation edit + M.Translate(center_offset * desired_scale_x, (vis_height/2)*(desired_scale_y-1)) //CHOMPEdit if(tail_style?.can_loaf) // VOREStation Edit: Taur Loafing update_tail_showing() // VOREStation Edit: Taur Loafing layer = MOB_LAYER // Fix for a byond bug where turf entry order no longer matters @@ -739,16 +739,34 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(!l_ear && !r_ear) return //Why bother, if no ear sprites + if(hide_headset) //CHOMPEdit Start + if(l_ear && istype(l_ear, /obj/item/device/radio/headset)) //No need to generate blank images if only headsets are present. + if(!r_ear || istype(r_ear, /obj/item/device/radio/headset)) + return + if(r_ear && istype(r_ear, /obj/item/device/radio/headset)) + if(!l_ear || istype(l_ear, /obj/item/device/radio/headset)) + return + // Blank image upon which to layer left & right overlays. var/image/both = image(icon = 'icons/effects/effects.dmi', icon_state = "nothing", layer = BODY_LAYER+EARS_LAYER) if(l_ear) - var/image/standing = l_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_l_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER) - both.add_overlay(standing) + if(istype(l_ear, /obj/item/device/radio/headset)) + if(!hide_headset) + var/image/standing = l_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_l_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER) + both.add_overlay(standing) + else + var/image/standing = l_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_l_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER) + both.add_overlay(standing) if(r_ear) - var/image/standing = r_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_r_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER) - both.add_overlay(standing) + if(istype(r_ear, /obj/item/device/radio/headset)) + if(!hide_headset) + var/image/standing = r_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_r_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER) + both.add_overlay(standing) + else + var/image/standing = r_ear.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_r_ear_str, default_icon = INV_EARS_DEF_ICON, default_layer = EARS_LAYER) + both.add_overlay(standing) //CHOMPEdit End overlays_standing[EARS_LAYER] = both apply_layer(EARS_LAYER) @@ -1274,13 +1292,13 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() //If you have a custom tail selected if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !istaurtail(tail_style)) && !tail_hidden) - var/icon/tail_s = new/icon("icon" = tail_style.icon, "icon_state" = (tail_style.can_loaf && resting) ? "[tail_style.icon_state]_loaf" : (wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state)) // VOREStation Edit: Taur Loafing + var/icon/tail_s = new/icon("icon" = (tail_style.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = (wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state)) //CHOMPEdit if(tail_style.can_loaf && !is_shifted) - pixel_y = (resting) ? -tail_style.loaf_offset : 0 //move player down, then taur up, to fit the overlays correctly // VOREStation Edit: Taur + pixel_y = (resting) ? -tail_style.loaf_offset*size_multiplier : default_pixel_y //move player down, then taur up, to fit the overlays correctly // VOREStation Edit: Taur Loafing if(tail_style.do_colouration) tail_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_style.color_blend_mode) if(tail_style.extra_overlay) - var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = (tail_style?.can_loaf && resting) ? "[tail_style.extra_overlay]_loaf" : tail_style.extra_overlay) // VOREStation Edit: Taur Loafing + var/icon/overlay = new/icon("icon" = (tail_style?.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay) //CHOMPEdit if(wagging && tail_style.ani_state) overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay_w) overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode) @@ -1292,7 +1310,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() qdel(overlay) if(tail_style.extra_overlay2) - var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay2) + var/icon/overlay = new/icon("icon" = (tail_style?.can_loaf && resting) ? tail_style.icon_loaf : tail_style.icon, "icon_state" = tail_style.extra_overlay2) //CHOMPEdit if(wagging && tail_style.ani_state) overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay2_w) overlay.Blend(rgb(src.r_tail3, src.g_tail3, src.b_tail3), tail_style.color_blend_mode) @@ -1310,7 +1328,6 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(istaurtail(tail_style)) var/datum/sprite_accessory/tail/taur/taurtype = tail_style working.pixel_x = -16 - working.pixel_y = (tail_style.can_loaf && resting) ? tail_style.loaf_offset : 0 // VOREStation Edit: Taur Loafing if(taurtype.can_ride && !riding_datum) riding_datum = new /datum/riding/taur(src) verbs |= /mob/living/carbon/human/proc/taur_mount diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 6356bfb7b3..eb7462967e 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -238,6 +238,9 @@ return /mob/living/proc/handle_light() + if(glow_override) + return FALSE + if(instability >= TECHNOMANCER_INSTABILITY_MIN_GLOW) var/distance = round(sqrt(instability / 2)) if(distance) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index f2628e8790..6835b9496b 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -328,8 +328,14 @@ //Throwing a prey into a pred takes priority. After that it checks to see if the person being thrown is a pred. if(istype(AM, /mob/living)) var/mob/living/thrown_mob = AM - if(!client && !thrown_mob.allowmobvore) - return //The mob is AI controlled and the prey doesn't allow for mob vore allowed, don't even bother. + + if(!allowmobvore && isanimal(thrown_mob)) //Does the person being hit not allow mob vore and the perrson being thrown a simple_mob? + return + if(!thrown_mob.allowmobvore && isanimal(src)) //Does the person being thrown not allow mob vore and is the person being hit (us) a simple_mob? + return + + // PERSON BEING HIT: CAN BE DROP PRED, ALLOWS THROW VORE. + // PERSON BEING THROWN: DEVOURABLE, ALLOWS THROW VORE, CAN BE DROP PREY. if((can_be_drop_pred && throw_vore) && (thrown_mob.devourable && thrown_mob.throw_vore && thrown_mob.can_be_drop_prey)) //Prey thrown into pred. vore_selected.nom_mob(thrown_mob) //Eat them!!! visible_message("[thrown_mob] is thrown right into [src]'s [lowertext(vore_selected.name)]!") @@ -338,6 +344,9 @@ on_throw_vore_special(TRUE, thrown_mob) add_attack_logs(thrown_mob.thrower,src,"Devoured [thrown_mob.name] via throw vore.") return //We can stop here. We don't need to calculate damage or anything else. They're eaten. + + // PERSON BEING HIT: CAN BE DROP PREY, ALLOWS THROW VORE, AND IS DEVOURABLE. + // PERSON BEING THROWN: CAN BE DROP PRED, ALLOWS THROW VORE. else if((can_be_drop_prey && throw_vore && devourable) && (thrown_mob.can_be_drop_pred && thrown_mob.throw_vore)) //Pred thrown into prey. visible_message("[src] suddenly slips inside of [thrown_mob]'s [lowertext(thrown_mob.vore_selected.name)] as [thrown_mob] flies into them!") thrown_mob.vore_selected.nom_mob(src) //Eat them!!! diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index c5e7a857b8..031d6ddb89 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -55,7 +55,8 @@ var/image/dsoverlay = null //Overlay used for darksight eye adjustments - var/glow_toggle = 0 // If they're glowing! + var/glow_toggle = FALSE // If they're glowing! + var/glow_override = FALSE // Ignore the manual toggle var/glow_range = 2 var/glow_intensity = null var/glow_color = "#FFFFFF" // The color they're glowing! @@ -80,4 +81,4 @@ var/flying = 0 // Allows flight var/inventory_panel_type = /datum/inventory_panel var/datum/inventory_panel/inventory_panel - var/last_resist_time = 0 // world.time of the most recent resist that wasn't on cooldown. + var/last_resist_time = 0 // world.time of the most recent resist that wasn't on cooldown. diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index d7abf3bcc1..e68d333cec 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -19,12 +19,14 @@ verbs |= /mob/living/proc/lick verbs |= /mob/living/proc/smell verbs |= /mob/living/proc/switch_scaling + verbs |= /mob/living/proc/mute_entry //CHOMPEdit + verbs |= /mob/living/proc/center_offset //CHOMPEdit if(!no_vore) verbs |= /mob/living/proc/vorebelly_printout if(!vorePanel) AddComponent(/datum/component/vore_panel) - + verbs += /mob/living/proc/vore_transfer_reagents //CHOMP If mob doesnt have bellies it cant use this verb for anything verbs += /mob/living/proc/vore_check_reagents //CHOMP If mob doesnt have bellies it cant use this verb for anything verbs += /mob/living/proc/vore_bellyrub //CHOMP If mob doesnt have bellies it probably won't be needing this anyway diff --git a/code/modules/mob/living/silicon/emote.dm b/code/modules/mob/living/silicon/emote.dm index a471c62b22..5bb86dac68 100644 --- a/code/modules/mob/living/silicon/emote.dm +++ b/code/modules/mob/living/silicon/emote.dm @@ -13,11 +13,11 @@ var/list/_silicon_default_emotes = list( ) /mob/living/silicon/get_available_emotes() - return global._silicon_default_emotes + return global._silicon_default_emotes.Copy() /mob/living/silicon/pai/get_available_emotes() - var/list/fulllist = _silicon_default_emotes + var/list/fulllist = global._silicon_default_emotes.Copy() fulllist |= _robot_default_emotes fulllist |= _human_default_emotes return fulllist \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/pai_vr.dm b/code/modules/mob/living/silicon/pai/pai_vr.dm index 86ef6cca5a..662ff89642 100644 --- a/code/modules/mob/living/silicon/pai/pai_vr.dm +++ b/code/modules/mob/living/silicon/pai/pai_vr.dm @@ -1,5 +1,5 @@ /mob/living/silicon/pai - var/people_eaten = 0 + //var/people_eaten = 0 //CHOMPEdit - no longer needed. icon = 'icons/mob/pai_vr.dmi' softfall = TRUE var/eye_glow = TRUE @@ -57,6 +57,11 @@ var/soft_si = FALSE //signaler var/soft_ar = FALSE //ar hud + //CHOMPEdit Begin - Add vore capacity + vore_capacity = 1 + vore_capacity_ex = list("stomach" = 1) + //CHOMPEdit End + /mob/living/silicon/pai/Initialize() . = ..() @@ -97,12 +102,14 @@ return return feed_grabbed_to_self(src,T) +/*CHOMPEdit - Just using the update_fullness from living now. /mob/living/silicon/pai/proc/update_fullness_pai() //Determines if they have something in their stomach. Copied and slightly modified. var/new_people_eaten = 0 for(var/obj/belly/B as anything in vore_organs) for(var/mob/living/M in B) new_people_eaten += M.size_multiplier people_eaten = min(1, new_people_eaten) +*/ /mob/living/silicon/pai/update_icon() //Some functions cause this to occur, such as resting ..() @@ -111,22 +118,28 @@ add_eyes() return - update_fullness_pai() + update_fullness() //CHOMPEdit - Switch to /living update_fullness + //CHOMPEdit begin - Add multiple belly size support + //Add a check when selecting a chassis if you add in support for this, to set vore_capacity to 2 or however many states you have. + var/fullness_extension = "" + if(vore_capacity > 1 && vore_fullness > 1) + fullness_extension = "_[vore_fullness]" + //CHOMPEdit end - if(!people_eaten && !resting) + if(!vore_fullness && !resting) //CHOMPEdit - Use vore_fullness instead of people_eaten icon_state = "[chassis]" //Using icon_state here resulted in quite a few bugs. Chassis is much less buggy. - else if(!people_eaten && resting) + else if(!vore_fullness && resting) //CHOMPEdit - Use vore_fullness instead of people_eaten icon_state = "[chassis]_rest" // Unfortunately not all these states exist, ugh. - else if(people_eaten && !resting) - if("[chassis]_full" in cached_icon_states(icon)) - icon_state = "[chassis]_full" + else if(vore_fullness && !resting) //CHOMPEdit - Use vore_fullness instead of people_eaten + if("[chassis]_full[fullness_extension]" in cached_icon_states(icon)) //CHOMPEdit begin - Add multiple belly size support + icon_state = "[chassis]_full[fullness_extension]" //CHOMPEdit - Add multiple belly size support else icon_state = "[chassis]" - else if(people_eaten && resting) - if("[chassis]_rest_full" in cached_icon_states(icon)) - icon_state = "[chassis]_rest_full" + else if(vore_fullness && resting) //CHOMPEdit - Use vore_fullness instead of people_eaten + if("[chassis]_rest_full[fullness_extension]" in cached_icon_states(icon)) //CHOMPEdit begin - Add multiple belly size support + icon_state = "[chassis]_rest_full[fullness_extension]" //CHOMPEdit begin - Add multiple belly size support else icon_state = "[chassis]_rest" if(chassis in wide_chassis) @@ -143,15 +156,21 @@ icon = holo_icon add_eyes() return - update_fullness_pai() - if(!people_eaten && !resting) + update_fullness() + //CHOMPEdit begin - Add multiple belly size support + //Add a check when selecting a chassis if you add in support for this, to set vore_capacity to 2 or however many states you have. + var/fullness_extension = "" + if(vore_capacity > 1 && vore_fullness > 1) + fullness_extension = "_[vore_fullness]" + //CHOMPEdit end + if(!vore_fullness && !resting) //CHOMPEdit - Use vore_fullness instead of people_eaten icon_state = "[chassis]" - else if(!people_eaten && resting) + else if(!vore_fullness && resting) //CHOMPEdit - Use vore_fullness instead of people_eaten icon_state = "[chassis]_rest" - else if(people_eaten && !resting) - icon_state = "[chassis]_full" - else if(people_eaten && resting) - icon_state = "[chassis]_rest_full" + else if(vore_fullness && !resting) //CHOMPEdit - Use vore_fullness instead of people_eaten + icon_state = "[chassis]_full[fullness_extension]" //CHOMPEdit begin - Add multiple belly size support + else if(vore_fullness && resting) //CHOMPEdit - Use vore_fullness instead of people_eaten + icon_state = "[chassis]_rest_full[fullness_extension]" //CHOMPEdit begin - Add multiple belly size support if(chassis in wide_chassis) pixel_x = -16 default_pixel_x = -16 @@ -171,6 +190,19 @@ var/oursize = size_multiplier resize(1, FALSE, TRUE, TRUE, FALSE) //We resize ourselves to normal here for a moment to let the vis_height get reset chassis = possible_chassis[choice] + + //CHOMPEdit Begin - Reset vore_capacity to allow multiple belly sizes as an option + vore_capacity = 1 + vore_capacity_ex = list("stomach" = 1) + //As an example of how you would add support for multiple belly sizes... + /* + if(chassis == "example") + vore_capacity = 2 + vore_capacity_ex = list("stomach" = 2) + */ + //Vore sprites would need to be added with sizes being example, example_full, example_full_2, example_full_3, and so forth + //CHOMPEdit End + if(chassis == "13") if(!holo_icon) if(!get_character_icon()) diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm index 9def436c7c..018c2b4336 100644 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -33,4 +33,4 @@ var/list/_robot_default_emotes = list( ) /mob/living/silicon/robot/get_available_emotes() - return global._robot_default_emotes + return global._robot_default_emotes.Copy() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index eabc175c0f..b5d4eed0cc 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1074,6 +1074,23 @@ choose_icon(icon_selection_tries, module_sprites) return + //CHOMPEdit Begin - Allow multiple sizes of vore sprites and/or resting vore sprites + if(dogborg && (icontype == "Cat" || icontype == "Cat Mining" || icontype == "Cat Cargo")) + sleeper_resting = TRUE + else + sleeper_resting = FALSE + //And then for multiple belly sizes... + if(dogborg && (icontype == "example")) + vore_capacity = 2 + vore_capacity_ex["stomach"] = 2 + else if(dogborg) + vore_capacity = 1 + vore_capacity_ex["stomach"] = 1 + else + vore_capacity = 0 + vore_capacity_ex["stomach"] = 0 + //CHOMPEdit End + icon_selected = 1 icon_selection_tries = 0 to_chat(src, "Your icon has been set. You now require a module reset to change it.") diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index 76a479a80d..cc0d12c3f0 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -544,6 +544,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/taperoll/police(src) src.modules += new /obj/item/weapon/reagent_containers/spray/pepper(src) src.modules += new /obj/item/weapon/gripper/security(src) + src.modules += new /obj/item/device/ticket_printer(src) //VOREStation Add src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) /obj/item/weapon/robot_module/robot/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) @@ -862,6 +863,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/pickaxe/plasmacutter/borg(src) src.modules += new /obj/item/borg/combat/shield(src) src.modules += new /obj/item/borg/combat/mobility(src) + src.modules += new /obj/item/device/ticket_printer(src) //VOREStation Add src.emag = new /obj/item/weapon/gun/energy/lasercannon/mounted(src) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm index 0127068772..2706cfd3ec 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm @@ -100,6 +100,7 @@ "Acheron" = "mechoid-Medical", "Shellguard Noble" = "Noble-MED", "ZOOM-BA" = "zoomba-medical", + "W02M" = "worm-surgeon", "Feminine Humanoid" = "uptall-medical" ) @@ -110,6 +111,7 @@ "Acheron" = "mechoid-Medical", "Shellguard Noble" = "Noble-MED", "ZOOM-BA" = "zoomba-crisis", + "W02M" = "worm-crisis", "Feminine Humanoid" = "uptall-crisis" ) @@ -121,6 +123,7 @@ "Acheron" = "mechoid-Service", "Shellguard Noble" = "Noble-SRV", "ZOOM-BA" = "zoomba-service", + "W02M" = "worm-service", "Feminine Humanoid" = "uptall-service" ) @@ -131,6 +134,7 @@ "Acheron" = "mechoid-Service", "Shellguard Noble" = "Noble-SRV", "ZOOM-BA" = "zoomba-clerical", + "W02M" = "worm-service", "Feminine Humanoid" = "uptall-service" ) @@ -141,6 +145,7 @@ "Acheron" = "mechoid-Janitor", "Shellguard Noble" = "Noble-CLN", "ZOOM-BA" = "zoomba-janitor", + "W02M" = "worm-janitor", "Feminine Humanoid" = "uptall-janitor" ) @@ -151,6 +156,7 @@ "Acheron" = "mechoid-Security", "Shellguard Noble" = "Noble-SEC", "ZOOM-BA" = "zoomba-security", + "W02M" = "worm-security", "Feminine Humanoid" = "uptall-security" ) @@ -161,6 +167,7 @@ "Acheron" = "mechoid-Miner", "Shellguard Noble" = "Noble-DIG", "ZOOM-BA" = "zoomba-miner", + "W02M" = "worm-miner", "Feminine Humanoid" = "uptall-miner" ) @@ -171,6 +178,7 @@ "Acheron" = "mechoid-Standard", "Shellguard Noble" = "Noble-STD", "ZOOM-BA" = "zoomba-standard", + "W02M" = "worm-standard", "Feminine Humanoid" = "uptall-standard", "Feminine Humanoid, Variant 2" = "uptall-standard2" ) @@ -180,6 +188,7 @@ "Acheron" = "mechoid-Engineering", "Shellguard Noble" = "Noble-ENG", "ZOOM-BA" = "zoomba-engineering", + "W02M" = "worm-engineering", "Feminine Humanoid" = "uptall-engineering" ) @@ -189,6 +198,7 @@ "Acheron" = "mechoid-Science", "ZOOM-BA" = "zoomba-research", "XI-GUS" = "spiderscience", + "W02M" = "worm-janitor", "Feminine Humanoid" = "uptall-science" ) @@ -197,6 +207,7 @@ vr_sprites = list( "Acheron" = "mechoid-Combat", "ZOOM-BA" = "zoomba-combat", + "W02M" = "worm-combat", "Feminine Humanoid" = "uptall-security" ) @@ -226,6 +237,7 @@ src.modules += new /obj/item/taperoll/police(src) //Block out crime scenes. src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg(src) //They /are/ a security borg, after all. src.modules += new /obj/item/weapon/dogborg/pounce(src) //Pounce + src.modules += new /obj/item/device/ticket_printer(src) src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) //Emag. Not a big problem. var/datum/matter_synth/water = new /datum/matter_synth(500) //Starts full and has a max of 500 @@ -391,7 +403,8 @@ can_be_pushed = 0 sprites = list( "Traumahound" = "traumavale", - "Drake" = "draketrauma" + "Drake" = "draketrauma", + "Borgi" = "borgi-trauma" ) /obj/item/weapon/robot_module/robot/medical/trauma/New(var/mob/living/silicon/robot/R) diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm index a321313c71..2d0f550c0e 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -66,7 +66,16 @@ "uptall-engineering", "uptall-miner", "uptall-security", - "uptall-science" + "uptall-science", + "worm-standard", + "worm-engineering", + "worm-janitor", + "worm-crisis", + "worm-miner", + "worm-security", + "worm-combat", + "worm-surgeon", + "worm-service" ) //List of all used sprites that are in robots_vr.dmi @@ -99,10 +108,16 @@ ..() if(dogborg == TRUE && stat == CONSCIOUS) //update_fullness() // CHOMPEdit - Needed so that we can have the vore sprites when only using vore bellies + //CHOMPEdit begin - Add multiple belly size support + //Add a check when selecting an icon in robot.dm if you add in support for this, to set vore_capacity to 2 or however many states you have. + var/fullness_extension = "" + if(vore_capacity_ex["stomach"] > 1 && vore_fullness_ex["stomach"] > 1) + fullness_extension = "_[vore_fullness_ex["stomach"]]" + //CHOMPEdit end if(sleeper_g == TRUE) add_overlay("[module_sprites[icontype]]-sleeper_g") if(sleeper_r == TRUE || (!sleeper_g && vore_fullness_ex["stomach"])) //CHOMPEdit - Also allow normal vore bellies to affect this sprite - add_overlay("[module_sprites[icontype]]-sleeper_r") + add_overlay("[module_sprites[icontype]]-sleeper_r[fullness_extension]") //CHOMPEdit - Allow multiple belly sizes... if(istype(module_active,/obj/item/weapon/gun/energy/laser/mounted)) add_overlay("laser") if(istype(module_active,/obj/item/weapon/gun/energy/taser/mounted/cyborg)) @@ -116,24 +131,24 @@ //CHOMPEdit Begin - Add ability to have sleeper belly sprites if available if(sleeper_resting && sleeper_g == TRUE) add_overlay("[module_sprites[icontype]]-sleeper_g-sit") - if(sleeper_resting && sleeper_r == TRUE) - add_overlay("[module_sprites[icontype]]-sleeper_r-sit") + if(sleeper_resting && (sleeper_r == TRUE || (!sleeper_g && vore_fullness_ex["stomach"]))) + add_overlay("[module_sprites[icontype]]-sleeper_r-sit[fullness_extension]") //CHOMPEdit End if(bellyup) icon_state = "[module_sprites[icontype]]-bellyup" //CHOMPEdit Begin - Add ability to have sleeper belly sprites if available if(sleeper_resting && sleeper_g == TRUE) add_overlay("[module_sprites[icontype]]-sleeper_g-bellyup") - if(sleeper_resting && sleeper_r == TRUE) - add_overlay("[module_sprites[icontype]]-sleeper_r-bellyup") + if(sleeper_resting && (sleeper_r == TRUE || (!sleeper_g && vore_fullness_ex["stomach"]))) + add_overlay("[module_sprites[icontype]]-sleeper_r-bellyup[fullness_extension]") //CHOMPEdit End else if(!sitting && !bellyup) icon_state = "[module_sprites[icontype]]-rest" //CHOMPEdit Begin - Add ability to have sleeper belly sprites if available if(sleeper_resting && sleeper_g == TRUE) add_overlay("[module_sprites[icontype]]-sleeper_g-rest") - if(sleeper_resting && sleeper_r == TRUE) - add_overlay("[module_sprites[icontype]]-sleeper_r-rest") + if(sleeper_resting && (sleeper_r == TRUE || (!sleeper_g && vore_fullness_ex["stomach"]))) + add_overlay("[module_sprites[icontype]]-sleeper_r-rest[fullness_extension]") //CHOMPEdit End else icon_state = "[module_sprites[icontype]]" @@ -181,7 +196,6 @@ icon = 'modular_chomp/icons/mob/widerobot_ch.dmi' else if(icontype == "Cat" || icontype == "Cat Mining" || icontype == "Cat Cargo") // CHOMPEdit icon = 'modular_chomp/icons/mob/catborg/catborg.dmi' - sleeper_resting = TRUE else icon = wideborg_dept return diff --git a/code/modules/mob/living/simple_mob/simple_mob.dm b/code/modules/mob/living/simple_mob/simple_mob.dm index ae4583b501..8406a48137 100644 --- a/code/modules/mob/living/simple_mob/simple_mob.dm +++ b/code/modules/mob/living/simple_mob/simple_mob.dm @@ -253,11 +253,13 @@ // Turf related slowdown var/turf/T = get_turf(src) - if(T && T.movement_cost && !hovering) // Flying mobs ignore turf-based slowdown. Aquatic mobs ignore water slowdown, and can gain bonus speed in it. + if(T && T.movement_cost && (!hovering || !flying)) // Flying mobs ignore turf-based slowdown. Aquatic mobs ignore water slowdown, and can gain bonus speed in it. if(istype(T,/turf/simulated/floor/water) && aquatic_movement) . -= aquatic_movement - 1 else . += T.movement_cost + if(flying) + adjust_nutrition(-0.5) if(purge)//Purged creatures will move more slowly. The more time before their purge stops, the slower they'll move. if(. <= 0) diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm index 9f22991009..7da6e35861 100644 --- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm +++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm @@ -57,14 +57,14 @@ can_be_drop_prey = TRUE //CHOMP Add This also counts for spontaneous prey for telenoms and phase noms. var/damage_threshold = 0 //For some mobs, they have a damage threshold required to deal damage to them. + var/nom_mob = FALSE //If a mob is meant to be hostile for vore purposes but is otherwise not hostile, if true makes certain AI ignore the mob var/voremob_loaded = FALSE //CHOMPedit: On-demand belly loading. // Release belly contents before being gc'd! /mob/living/simple_mob/Destroy() release_vore_contents() - if(prey_excludes) - prey_excludes.Cut() + LAZYCLEARLIST(prey_excludes) return ..() //For all those ID-having mobs @@ -125,7 +125,7 @@ if(!M.allowmobvore || !M.devourable) // Don't eat people who don't want to be ate by mobs //ai_log("vr/wont eat [M] because they don't allow mob vore", 3) //VORESTATION AI TEMPORARY REMOVAL return 0 - if(M in prey_excludes) // They're excluded + if(LAZYFIND(prey_excludes, M)) // They're excluded //ai_log("vr/wont eat [M] because they are excluded", 3) //VORESTATION AI TEMPORARY REMOVAL return 0 if(M.size_multiplier < vore_min_size || M.size_multiplier > vore_max_size) @@ -230,6 +230,7 @@ var/obj/belly/B = new /obj/belly(src) vore_selected = B B.immutable = 1 + B.affects_vore_sprites = TRUE //CHOMPEdit - vore sprites enabled for simplemobs! B.name = vore_stomach_name ? vore_stomach_name : "stomach" B.desc = vore_stomach_flavor ? vore_stomach_flavor : "Your surroundings are warm, soft, and slimy. Makes sense, considering you're inside \the [name]." B.digest_mode = vore_default_mode @@ -266,6 +267,7 @@ "The churning walls slowly pulverize you into meaty nutrients.", "The stomach glorps and gurgles as it tries to work you into slop.") can_be_drop_pred = TRUE // Mobs will eat anyone that decides to drop/slip into them by default. + B.belly_fullscreen = "yet_another_tumby" /mob/living/simple_mob/Bumped(var/atom/movable/AM, yes) if(tryBumpNom(AM)) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm index 48ed60e0ab..5081c63b8e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm @@ -108,7 +108,9 @@ say_got_target = list() /mob/living/simple_mob/vore/alienanimals/catslug/init_vore() - ..() + if(!voremob_loaded) //CHOMPEdit + return + .=..() var/obj/belly/B = vore_selected B.name = "stomach" B.desc = "The hot slick gut of a catslug!! Copious slime smears over you as you’re packed away into the gloom and oppressive humidity of this churning gastric sac. The pressure around you is intense, the squashy flesh bends and forms to your figure, clinging to you insistently! There’s basically no free space at all as your ears are filled with the slick slide of flesh against flesh and the burbling of gastric juices glooping all around you. The thumping of a heart booms from somewhere nearby, making everything pulse in against you in time with it! This is it! You’ve been devoured by a catslug!!!" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/jellyfish.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/jellyfish.dm index 86aa800248..f87d118f81 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/jellyfish.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/jellyfish.dm @@ -77,6 +77,7 @@ GLOBAL_VAR_INIT(jellyfish_count, 0) vore_default_contamination_flavor = "Wet" vore_default_contamination_color = "grey" vore_default_item_mode = IM_DIGEST + can_be_drop_prey = FALSE //CHOMP Add var/reproduction_cooldown = 0 diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm index 4f1e1efd9d..0865afb904 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm @@ -75,6 +75,7 @@ vore_default_contamination_flavor = "Wet" vore_default_contamination_color = "grey" vore_default_item_mode = IM_DIGEST + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/vore/alienanimals/skeleton/alt icon_state = "altskeleton" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spacewhale.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spacewhale.dm index 0b27faa6c8..883e5b887b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spacewhale.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spacewhale.dm @@ -90,6 +90,7 @@ vore_default_contamination_flavor = "Wet" vore_default_contamination_color = "grey" vore_default_item_mode = IM_DIGEST + can_be_drop_prey = FALSE //CHOMP Add /datum/say_list/spacewhale emote_see = list("ripples and flows", "flashes rhythmically","glows faintly","investigates something") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm index 8bae5e7852..783084f09f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm @@ -86,6 +86,8 @@ reload_max = 1 reload_count = 0 reload_time = 7 SECONDS + + can_be_drop_prey = FALSE //CHOMP Add /datum/ai_holder/simple_mob/ranged/kiting/space_ghost diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm index 41eae89376..d0ac5273dc 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/startreader.dm @@ -85,6 +85,8 @@ var/flipped = FALSE var/flip_cooldown = 0 + + can_be_drop_prey = FALSE //CHOMP Add /datum/say_list/startreader emote_see = list("bobs", "digs around","gnashes at something","yawns","snaps at something") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm index 24c6ce1ded..18de1c9139 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm @@ -160,6 +160,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have? vore_default_contamination_flavor = "Wet" vore_default_contamination_color = "grey" vore_default_item_mode = IM_DIGEST + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/vore/alienanimals/teppi/init_vore() if(!voremob_loaded) //CHOMPEdit @@ -278,6 +279,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have? // The friend zone. var/obj/belly/p = new /obj/belly(src) p.immutable = TRUE + p.affects_vore_sprites = TRUE //CHOMPEdit - vore sprites enabled for simplemobs! p.mode_flags = 40 p.human_prey_swallow_time = 0.01 SECONDS p.digestchance = 0 diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm index 5262126826..1edfc304f2 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm @@ -42,6 +42,8 @@ var/has_reproduced = FALSE var/used_dominate // world.time when the dominate power was last used. + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/animal/borer/roundstart roundstart = TRUE diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm index 66c14c7b38..33677238c0 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm @@ -117,6 +117,8 @@ /obj/item/stack/material/chitin = 1\ ) + can_be_drop_prey = FALSE //CHOMP Add + /mob/living/simple_mob/animal/giant_spider/apply_melee_effects(var/atom/A) if(isliving(A)) var/mob/living/L = A diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird_vr.dm index 1640d2ddea..0b0f55351a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird_vr.dm @@ -1,4 +1,9 @@ /mob/living/simple_mob/animal/passive/bird/azure_tit/tweeter name = "Tweeter" desc = "A beautiful little blue and white bird, if only excessively loud for no reason sometimes." - makes_dirt = FALSE \ No newline at end of file + makes_dirt = FALSE + +/mob/living/simple_mob/animal/passive/bird/azure_tit/great + name = "Great Tit" + desc = "A species of bird, colored blue and white. Isn't it great?" + size_multiplier = 2 diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm index 241d00714f..184e7c4ed5 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm @@ -60,7 +60,7 @@ var/list/_cat_default_emotes = list( return ..() /mob/living/simple_mob/animal/passive/cat/get_available_emotes() - return global._cat_default_emotes + return global._cat_default_emotes.Copy() /mob/living/simple_mob/animal/passive/cat/handle_special() if(!stat && prob(2)) // spooky diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka.dm index 8772a061d7..c07c0cd467 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/grafadreka.dm @@ -89,9 +89,10 @@ Field studies suggest analytical abilities on par with some species of cepholapo to_chat(target, SPAN_NOTICE("You hear an eerie howl from somewhere to the [dir2text(direction)].")) /mob/living/simple_mob/animal/sif/grafadreka/get_available_emotes() + . = global._default_mob_emotes.Copy() if(!is_baby) - return global._default_mob_emotes | /decl/emote/audible/drake_howl - return global._default_mob_emotes + . |= /decl/emote/audible/drake_howl + return // Overriding this to handle sitting. /mob/living/simple_mob/animal/sif/grafadreka/lay_down() diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hare.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hare.dm index 44c6cea6f5..f566e738b2 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hare.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hare.dm @@ -64,6 +64,8 @@ meat_amount = 1 say_list_type = /datum/say_list/hare + + can_be_drop_prey = TRUE //CHOMP Add /datum/say_list/hare speak = list("Snrf...","Crk!") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm index bdcd9b6179..9831ac3769 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm @@ -88,6 +88,7 @@ say_list_type = /datum/say_list/crab var/weaken_amount = 2 // Be careful with this number. High values will equal a permastun. + // Stuns the thing that got hit briefly. /mob/living/simple_mob/animal/sif/hooligan_crab/apply_melee_effects(atom/A) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm index 3a7999f015..f8bf5195e2 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/kururak.dm @@ -83,6 +83,7 @@ var/instinct // The points used by Kururaks to decide Who Is The Boss var/obey_pack_rule = TRUE // Decides if the Kururak will automatically assign itself to follow the one with the highest instinct. + /datum/say_list/kururak speak = list("Kurr?","|R|rrh..", "Ksss...") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/leech.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/leech.dm index cd74b8d4c5..1c89c7f21b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/leech.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/leech.dm @@ -101,7 +101,7 @@ if(!istype(H)) return . - if(istype(L.buckled, /obj/vehicle) || L.hovering) // Ignore people hovering or on boats. + if(istype(L.buckled, /obj/vehicle) || L.hovering || L.flying) // Ignore people hovering or on boats. return TRUE if(!.) @@ -501,4 +501,4 @@ holder.a_intent = I_HURT /decl/mob_organ_names/leech - hit_zones = list("mouthparts", "central segment", "tail segment") \ No newline at end of file + hit_zones = list("mouthparts", "central segment", "tail segment") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm index 937c45143b..45e5f92f0a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/racoon.dm @@ -68,6 +68,7 @@ var/obj/item/clothing/head/hat = null // The hat the Sakimm may be wearing. var/list/friend_loot_list = list(/obj/item/weapon/coin) // What will make this animal non-hostile if held? var/randomize_size = TRUE + can_be_drop_prey = TRUE //CHOMP Add /mob/living/simple_mob/animal/sif/sakimm/verb/remove_hat() set name = "Remove Hat" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm index 2fc4b202a4..53e8a23079 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm @@ -55,6 +55,7 @@ say_list_type = /datum/say_list/savik ai_holder_type = /datum/ai_holder/simple_mob/savik + /datum/say_list/savik speak = list("Hruuugh!","Hrunnph") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm index 219c6eb550..a1965be8af 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm @@ -58,6 +58,7 @@ organ_names = /decl/mob_organ_names/shantak say_list_type = /datum/say_list/shantak + /datum/say_list/shantak speak = list("Shuhn.","Shrunnph?","Shunpf.") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm index be88baab27..fc01dc7f94 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm @@ -8,3 +8,5 @@ /obj/item/weapon/reagent_containers/food/snacks/crabmeat = 20, /obj/item/weapon/reagent_containers/food/snacks/meat = 10 ) + + can_be_drop_prey = FALSE //CHOMP Add diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/siffet.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/siffet.dm index f649e5a68f..e18c1ea336 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/sif/siffet.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/siffet.dm @@ -40,6 +40,7 @@ say_list_type = /datum/say_list/siffet ai_holder_type = /datum/ai_holder/simple_mob/siffet + /datum/say_list/siffet speak = list("Yap!", "Heh!", "Huff.") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/alien.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/alien.dm index 7127b42830..b61320f87c 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/alien.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/alien.dm @@ -32,6 +32,8 @@ meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat meat_amount = 5 + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/animal/space/alien/drone name = "alien drone" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/animals_yw.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/animals_yw.dm index cf48d42ee1..8876770055 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/animals_yw.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/animals_yw.dm @@ -77,6 +77,8 @@ var/turns_since_scan = 0 var/mob/flee_target + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/clockwork/handle_special() if(!stat && prob(2)) // spooky diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm index f4c4719059..b94b3369bd 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm @@ -38,6 +38,8 @@ say_list_type = /datum/say_list/mouse // Close enough var/scare_chance = 15 + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/animal/space/bats/apply_melee_effects(var/atom/A) if(isliving(A)) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/bear.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/bear.dm index c9d75869fb..9efa23c3f8 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/bear.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/bear.dm @@ -26,6 +26,8 @@ meat_amount = 8 say_list_type = /datum/say_list/bear + + can_be_drop_prey = FALSE //CHOMP Add /datum/say_list/bear speak = list("RAWR!","Rawr!","GRR!","Growl!") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm index 7b21c428bb..b09d61c9c3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm @@ -59,6 +59,8 @@ ai_holder_type = /datum/ai_holder/simple_mob/melee var/knockdown_chance = 15 + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/animal/space/carp/apply_melee_effects(var/atom/A) if(isliving(A)) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm index 875434ebea..e1bf57c6f7 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm @@ -27,6 +27,8 @@ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/chicken meat_amount = 3 + + can_be_drop_prey = FALSE //CHOMP Add /datum/say_list/goose speak = list("HONK!") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose_ch.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose_ch.dm index ad45498057..b153305e89 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose_ch.dm @@ -2,6 +2,8 @@ name = "domesticated goose" desc = "It's a domesticated goose. It still looks pretty angry." faction = "neutral" //Mess with this and the goose will eat anyones face, will eat other factions faces, appropiate considering its a hellbird - Jack + + can_be_drop_prey = TRUE //CHOMP Add /mob/living/simple_mob/animal/space/goose/domesticated/casino name = "Donella" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm index 76df7a2382..420f3a498f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm @@ -62,6 +62,8 @@ ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive var/rank //pyro, operative, ammo, stealth. more to come. Do not leave blank. + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/animal/space/mouse_army/New() ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm index e7dea44853..1aa342ca86 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/snake_vr.dm @@ -46,6 +46,8 @@ say_list_type = /datum/say_list/snake ai_holder_type = /datum/ai_holder/simple_mob/passive + + can_be_drop_prey = FALSE //CHOMP Add /datum/say_list/snake emote_hear = list("hisses") diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm index c2decea8af..91952185ae 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/worm.dm @@ -58,6 +58,8 @@ var/time_maw_opened = 0 var/maw_cooldown = 30 SECONDS var/open_maw = FALSE // Are we trying to eat things? + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/animal/space/space_worm/head name = "space worm" diff --git a/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm b/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm index 31ffb6ef1d..9cd2582bd1 100644 --- a/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm +++ b/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm @@ -29,6 +29,8 @@ mob_class = MOB_CLASS_SLIME ai_holder_type = /datum/ai_holder/simple_mob/melee + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/blob/speech_bubble_appearance() return "slime" diff --git a/code/modules/mob/living/simple_mob/subtypes/horror/horror .dm b/code/modules/mob/living/simple_mob/subtypes/horror/horror .dm index b663972372..472af6dd6b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/horror/horror .dm +++ b/code/modules/mob/living/simple_mob/subtypes/horror/horror .dm @@ -25,3 +25,5 @@ max_n2 = 0 minbodytemp = 0 maxbodytemp = 700 + + can_be_drop_prey = FALSE //CHOMP Add \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm index a52bd28c30..9ffbf209ef 100644 --- a/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm +++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm @@ -19,6 +19,8 @@ // Most humans leave a corpse var/corpse = null + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/humanoid/death() ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm index b2f981c7fd..14e28d049c 100644 --- a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm +++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm @@ -42,6 +42,7 @@ special_attack_min_range = 2 special_attack_max_range = 7 + //////////////////////////////// // Grenade Attack //////////////////////////////// diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/posessed_ch.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/posessed_ch.dm index 0f183f17d6..ee87745973 100644 --- a/code/modules/mob/living/simple_mob/subtypes/humanoid/posessed_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/posessed_ch.dm @@ -47,6 +47,7 @@ ai_holder_type = /datum/ai_holder/simple_mob/merc say_list_type = /datum/say_list/possessed //Set to Null on silenced. + // corpse = /obj/effect/landmark/mobcorpse/possessed // Will eventually leave a full corpse with an activated RIG on it. But not yet. diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/russian.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/russian.dm index 121e112a7a..1aab37cb2d 100644 --- a/code/modules/mob/living/simple_mob/subtypes/humanoid/russian.dm +++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/russian.dm @@ -23,6 +23,7 @@ corpse = /obj/effect/landmark/mobcorpse/russian + /mob/living/simple_mob/humanoid/russian/ranged icon_state = "russianranged" icon_living = "russianranged" diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mechanical.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mechanical.dm index 981fa91c38..1c047f9093 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mechanical.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mechanical.dm @@ -18,6 +18,8 @@ taser_kill = FALSE poison_resist = 1.0 shock_resist = -0.5 + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/mechanical/isSynthetic() return TRUE diff --git a/code/modules/mob/living/simple_mob/subtypes/metroid/metBaseType.dm b/code/modules/mob/living/simple_mob/subtypes/metroid/metBaseType.dm index 8196ce60f8..57cc5f4b0b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/metroid/metBaseType.dm +++ b/code/modules/mob/living/simple_mob/subtypes/metroid/metBaseType.dm @@ -59,6 +59,8 @@ var/evo_limit = 0 var/next meat_type = /obj/item/toy/figure/bounty_hunter + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/metroid/Initialize() nutrition = 100 //Have them start off pretty hungry still. diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm index 83910850e3..f1c089f78b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm @@ -62,6 +62,8 @@ var/list/construct_spells = list() // var/do_glow = TRUE + can_be_drop_prey = FALSE //CHOMP Add + /mob/living/simple_mob/construct/place_spell_in_hand(var/path) if(!path || !ispath(path)) return 0 diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm b/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm index 9151ea6e2e..95e3ecebe8 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm @@ -29,6 +29,8 @@ speak_emote = list("gibbers") ai_holder_type = /datum/ai_holder/simple_mob/melee + + can_be_drop_prey = FALSE //CHOMP Add // Strong Variant /mob/living/simple_mob/creature/strong diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm b/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm index 0ee4daf433..36b68d05ca 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm @@ -41,6 +41,8 @@ min_n2 = 0 max_n2 = 0 minbodytemp = 0 + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/faithless/Process_Spacemove(var/check_drift = 0) return 1 diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/unknown.dm b/code/modules/mob/living/simple_mob/subtypes/occult/unknown.dm index 7ad77018e8..1671459c30 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/unknown.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/unknown.dm @@ -40,6 +40,8 @@ var/all_special_attacks = list(GA_ADS, GA_CALLDOWN, GA_LINES, GA_BULLETHELL, GA_ILLUSION, GA_CONFUSION, GA_SPEEDUP) loot_list = list(/obj/item/device/nif/glitch = 100) + + can_be_drop_prey = FALSE //CHOMP Add /obj/item/projectile/energy/slow_orb name = "TROJAN" @@ -260,7 +262,7 @@ vision_range = 10 closest_distance = 4 -/datum/ai_holder/simple_mob/ranged/bossmob_glitch/pre_special_attack(atom/A) +/datum/ai_holder/simple_mob/ranged/aggressive/bossmob_glitch/pre_special_attack(atom/A) var/mob/living/simple_mob/glitch_boss/GB if(istype(holder, /mob/living/simple_mob/glitch_boss)) GB = holder diff --git a/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm b/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm index 50ee63637c..7b0f11ed6f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm +++ b/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm @@ -28,6 +28,8 @@ meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat meat_amount = 4 + + can_be_drop_prey = FALSE //CHOMP Add /decl/mob_organ_names/tomato hit_zones = list("flesh", "leaf", "mouth") \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm b/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm index be6af537c8..a9b95c9d70 100644 --- a/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm +++ b/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm @@ -31,6 +31,8 @@ meat_amount = 2 pixel_x = -16 + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/animal/space/tree/apply_melee_effects(var/atom/A) if(isliving(A)) diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm b/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm index 4c2a5b3a98..e2d4ecea57 100644 --- a/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm +++ b/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm @@ -81,9 +81,11 @@ var/list/_slime_default_emotes = list( var/mood = ":3" // Icon to use to display 'mood', as an overlay. can_enter_vent_with = list(/obj/item/clothing/head) + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/slime/get_available_emotes() - return global._slime_default_emotes + return global._slime_default_emotes.Copy() /datum/say_list/slime speak = list("Blorp...", "Blop...") diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm index 07231caf07..268f3f3c66 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm @@ -189,6 +189,7 @@ I think I covered everything. player_msg = "You're a variant of the large dragon stripped of its firebreath attack (harm intent). You can still charge (disarm) and tail sweep (grab). Rest to heal slowly. Check your abilities tab for functions." norange = 1 noenrage = 1 + nom_mob = TRUE // Weakened variant for maintpreds /mob/living/simple_mob/vore/bigdragon/friendly/maintpred @@ -526,6 +527,7 @@ I think I covered everything. "The throat closes in tightly, utterly cocooning you with it's silken spongey embrace. Like this it holds, until you feel like you might pass out... eventually, it would shlllrrk agape and loosen up all around you once more, the beast not wanting to lose the wriggly sensation of live prey.", "Blrrbles and squelching pops from it's stomach echo out below you. Each swallow brings greater clarity to those digestive sounds, and stronger acidity to the muggy air around you, inching you closer to it's grasp. Not long now.") B = new /obj/belly/dragon/stomach(src) + B.affects_vore_sprites = TRUE //CHOMPEdit - vore sprites enabled for simplemobs! B.emote_lists[DM_DIGEST] = list( "The stomach walls spontaneously contract! Those wavey, fleshy walls binding your body in their embrace for the moment, slathering you with thick, caustic acids.", "You hear a soft rumbling as the dragon’s insides churn around your body, the well-used stomach walls shuddering with a growl as you melt down.", @@ -551,6 +553,7 @@ I think I covered everything. "Soothing thrumms from the beast sound out, to try help calm you on your way down. The dragon seems to not want you to panic, using surprisingly gentle intent.", "Clenchy embraces rhythmically squelch over you. Spreading outwards, the walls would relent, letting you spread a hot, gooey pocket of space around yourself. You linger, before another undulation of a swallow nudges you further down.") B = new /obj/belly/dragon/stomach/heal(src) + B.affects_vore_sprites = TRUE //CHOMPEdit - vore sprites enabled for simplemobs! B.emote_lists[DM_HEAL] = list( "In tune with the beast's heartbeat, the walls heave and spread all around you. In, tight and close, and then outwards, spreading cobwebs of slime all around.", "The thick folds of flesh around you blrrrble and sqllrrch, as the flesh itself secretes more of this strange, pure, goopy liquid, clenching it among it's crevices to squeeze it all over you in a mess.", @@ -947,6 +950,17 @@ I think I covered everything. if(L.stat) if(L.stat == DEAD && !handle_corpse) // Leave dead things alone return + if(isanimal(L)) //Don't attack simplemobs unless they are hostile. + var/mob/living/simple_mob/M = L + if(M.client) //Don't attack players for no reason even if they're a traditionally hostile mob + return 0 + if(M.nom_mob) //Don't attack mobs that are hostile for their vore functions to work + return 0 + if(M.ai_holder) //Don't attack non-hostile mobs + if(M.ai_holder.hostile) + return 1 + else return 0 + else return 0 if(holder.IIsAlly(L)) if(confirmPatient(L)) holder.a_intent = I_HELP diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon_ch.dm index d5637190d3..77f16fc7f6 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon_ch.dm @@ -177,6 +177,8 @@ I think I covered everything. "Normal" ) var/eyes + + can_be_drop_prey = FALSE //CHOMP Add /// /// Subtypes diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/c_pet.dm b/code/modules/mob/living/simple_mob/subtypes/vore/c_pet.dm index 02cf178447..2a6871ac12 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/c_pet.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/c_pet.dm @@ -40,6 +40,8 @@ ) has_langs = list(LANGUAGE_ANIMAL) + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/animal/passive/honkpet/attack_hand(mob/living/user as mob) if(user.a_intent == I_DISARM) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/catgirl.dm b/code/modules/mob/living/simple_mob/subtypes/vore/catgirl.dm index ac65c8b8bc..4422d5775d 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/catgirl.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/catgirl.dm @@ -34,6 +34,8 @@ "catgirlblack", "catgirlbrown" ) + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/vore/catgirl/New() ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/chungus.dm b/code/modules/mob/living/simple_mob/subtypes/vore/chungus.dm index 418fdac80d..c667b772cf 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/chungus.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/chungus.dm @@ -44,6 +44,7 @@ say_list_type = /datum/say_list/chungus ai_holder_type = /datum/ai_holder/simple_mob/melee + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/vore/aggressive/chungus/death() var/death = list('sound/effects/mob_effects/m_scream_1.ogg','sound/effects/mob_effects/m_scream_2.ogg','sound/effects/mob_effects/m_scream_3.ogg','sound/effects/mob_effects/m_scream_4.ogg') diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/cookiegirl.dm b/code/modules/mob/living/simple_mob/subtypes/vore/cookiegirl.dm index df106b4e1d..78c04b3baf 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/cookiegirl.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/cookiegirl.dm @@ -31,6 +31,7 @@ vore_default_mode = DM_HOLD // They're cookiepeople, what do you expect? vore_digest_chance = 10 // Gonna become as sweet as sugar, soon. vore_icons = SA_ICON_LIVING | SA_ICON_REST + can_be_drop_prey = FALSE //CHOMP Add /datum/ai_holder/simple_mob/passive/cookiegirl/on_hear_say(mob/living/speaker, message) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm b/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm index 1a492c665b..c255cc31a0 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/corrupt_hounds.dm @@ -72,6 +72,8 @@ vore_stomach_flavor = "You have ended up in the fuel processor of this corrupted machine. This place was definitely not designed with safety and comfort in mind. The heated and cramped surroundings oozing potent fluids all over your form, eager to do nothing less than breaking you apart to fuel its rampage for the next few days... hours... minutes? Oh dear..." loot_list = list(/obj/item/borg/upgrade/syndicate = 6, /obj/item/borg/upgrade/vtec = 6, /obj/item/weapon/material/knife/ritual = 6, /obj/item/weapon/disk/nifsoft/compliance = 6) + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi name = "corrupt corrupt hound" diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm b/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm index 26056324a1..c5a04ea5b5 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/deathclaw.dm @@ -67,6 +67,8 @@ vore_min_size = RESIZE_SMALL vore_pounce_chance = 0 // Beat them into crit before eating. vore_icons = SA_ICON_LIVING + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/vore/aggressive/deathclaw/Login() . = ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon.dm b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon.dm index eda4ed5bf5..a98d942dd1 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon.dm @@ -46,6 +46,8 @@ var/shift_state = AB_SHIFT_NONE var/last_shift = 0 var/is_shifting = FALSE + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/vore/demon/init_vore() if(!voremob_loaded) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/dino.dm b/code/modules/mob/living/simple_mob/subtypes/vore/dino.dm index 96a6d1adc7..f7b1492f0d 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/dino.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/dino.dm @@ -38,6 +38,8 @@ min_n2 = 0 max_n2 = 0 minbodytemp = 0 + + can_be_drop_prey = FALSE //CHOMP Add // Activate Noms! /mob/living/simple_mob/vore/aggressive/dino diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/dragon.dm b/code/modules/mob/living/simple_mob/subtypes/vore/dragon.dm index 239533ef74..1e5ed98d6c 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/dragon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/dragon.dm @@ -49,6 +49,8 @@ ai_holder_type = /datum/ai_holder/simple_mob/melee say_list_type = /datum/say_list/dragonboss + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/vore/aggressive/dragon/Process_Spacemove(var/check_drift = 0) return 1 //No drifting in space for space dragons! diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm b/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm index bd033b9f32..41895be835 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm @@ -43,6 +43,8 @@ special_attack_min_range = 1 special_attack_max_range = 5 special_attack_cooldown = 100 + + can_be_drop_prey = FALSE //CHOMP Add // Pepe is love, not hate. /mob/living/simple_mob/vore/aggressive/frog/New() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm index e814e3e93a..e9c0c867bd 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf.dm @@ -39,6 +39,8 @@ can_buckle = TRUE buckle_movable = TRUE buckle_lying = FALSE + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/vore/greatwolf diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf_ch.dm index 3478255cb6..6becc54b61 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/greatwolf_ch.dm @@ -38,6 +38,8 @@ can_buckle = TRUE buckle_movable = TRUE buckle_lying = FALSE + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/vore/greatwolf diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/hippo.dm b/code/modules/mob/living/simple_mob/subtypes/vore/hippo.dm index 481f73a4cd..d2760e8304 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/hippo.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/hippo.dm @@ -49,6 +49,8 @@ say_list_type = /datum/say_list/hippo ai_holder_type = /datum/ai_holder/simple_mob/retaliate + + can_be_drop_prey = FALSE //CHOMP Add // Activate Noms! /mob/living/simple_mob/vore/hippo //I don't know why it's in a seperate line but everyone does it so i do it diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm b/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm index c5fa952264..9353c3619f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/horse.dm @@ -34,6 +34,8 @@ say_list_type = /datum/say_list/horse ai_holder_type = /datum/ai_holder/simple_mob/retaliate + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/vore/horse/big name = "horse" diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/jelly.dm b/code/modules/mob/living/simple_mob/subtypes/vore/jelly.dm index fdd78a1eb4..0715a62d0c 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/jelly.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/jelly.dm @@ -16,6 +16,8 @@ say_list_type = /datum/say_list/jelly ai_holder_type = /datum/ai_holder/simple_mob/retaliate/jelly + + can_be_drop_prey = FALSE //CHOMP Add // Activate Noms! /mob/living/simple_mob/animal/space/jelly diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm b/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm index 15a86126c2..82aba8b245 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm @@ -53,6 +53,8 @@ say_list_type = /datum/say_list/lamia ai_holder_type = /datum/ai_holder/simple_mob/passive + + can_be_drop_prey = FALSE //CHOMP Add /* CHOMPEdit - now handled by new belly features. /mob/living/simple_mob/vore/lamia/update_fullness() @@ -119,6 +121,7 @@ var/obj/belly/tail = new /obj/belly(src) tail.immutable = TRUE + tail.affects_vore_sprites = TRUE //CHOMPEdit - vore sprites enabled for simplemobs! tail.name = "tail stomach" tail.desc = "You slide out into the narrow, constricting tube of flesh that is the lamia's snake half, heated walls and strong muscles all around clinging to your form with every slither." tail.digest_mode = vore_default_mode @@ -136,7 +139,7 @@ tail.human_prey_swallow_time = swallowTime tail.nonhuman_prey_swallow_time = swallowTime tail.vore_verb = "stuff" - tail.belly_sprite_to_affect = "tail" + tail.belly_sprite_to_affect = "tail" //CHOMPEdit - So that tail belly affects tail vore sprite. tail.emote_lists[DM_HOLD] = B.emote_lists[DM_HOLD].Copy() tail.emote_lists[DM_DIGEST] = B.emote_lists[DM_DIGEST].Copy() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm b/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm index 5427b978c9..061e1fc450 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander.dm @@ -47,6 +47,10 @@ vore_pounce_maxhealth = 125 vore_bump_emote = "tries to snap up" + nom_mob = TRUE + + can_be_drop_prey = FALSE //CHOMP Add + /datum/category_item/catalogue/fauna/leopardmander name = "Sivian Fauna - Va'aen Drake" desc = "Classification: S Draconis uncia\ diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander_ch.dm index d8fb0f212f..8f2ee24117 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/leopardmander_ch.dm @@ -46,6 +46,8 @@ vore_default_mode = DM_HEAL vore_pounce_maxhealth = 125 vore_bump_emote = "tries to snap up" + + can_be_drop_prey = FALSE //CHOMP Add /datum/category_item/catalogue/fauna/leopardmander name = "Sivian Fauna - Va'aen Drake" diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/lizardman.dm b/code/modules/mob/living/simple_mob/subtypes/vore/lizardman.dm index c2ee309206..7fb50c4736 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/lizardman.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/lizardman.dm @@ -32,6 +32,8 @@ say_list_type = /datum/say_list/lizardman ai_holder_type = /datum/ai_holder/simple_mob/melee + + can_be_drop_prey = FALSE //CHOMP Add /datum/say_list/lizardman diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm b/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm index 302493b86e..1ce7c81de3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm @@ -120,6 +120,7 @@ swallowTime = 3 SECONDS vore_capacity = 1 vore_default_mode = DM_DIGEST + can_be_drop_prey = FALSE //CHOMP Add /datum/ai_holder/mimic wander = FALSE diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/mobs_monsters/clowns/regularclowns.dm b/code/modules/mob/living/simple_mob/subtypes/vore/mobs_monsters/clowns/regularclowns.dm index 1e30c139f2..d32af4a5ab 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/mobs_monsters/clowns/regularclowns.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/mobs_monsters/clowns/regularclowns.dm @@ -4,6 +4,8 @@ response_harm = "hits" say_list_type = /datum/say_list/clown + + can_be_drop_prey = FALSE //CHOMP Add /datum/say_list/clown speak = list("HONK", "Honk!", "Henk!") diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm b/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm index a088d8282b..22e5ca0888 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/oregrub.dm @@ -88,6 +88,8 @@ "rad" = 100 ) + can_be_drop_prey = FALSE //CHOMP Add + /mob/living/simple_mob/vore/oregrub/lava name = "mature lavagrub" desc = "A mature, rocky lavagrub" diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm b/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm index 1de0976ff7..3297640ce1 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/otie.dm @@ -46,6 +46,8 @@ var/mob/living/carbon/human/friend var/tamed = 0 var/tame_chance = 50 //It's a fiddy-fiddy default you may get a buddy pal or you may get mauled and ate. Win-win! + + can_be_drop_prey = FALSE //CHOMP Add // Activate Noms! diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm b/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm index 2972d33b18..dcdaf87b6f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm @@ -52,6 +52,8 @@ var/extra_posessive = FALSE // Enable if you want their tummy hugs to be inescapable var/autorest_cooldown = 100 + nom_mob = TRUE + /mob/living/simple_mob/vore/pakkun/Life() . = ..() if(client) @@ -61,7 +63,7 @@ if(autorest_cooldown) autorest_cooldown -- - else if(prob(5) && ai_holder.stance == STANCE_IDLE) + else if(prob(5) && (resting || ai_holder.stance == STANCE_IDLE)) autorest_cooldown = rand(50,200) lay_down() @@ -109,7 +111,7 @@ continue if(istype(holder, /mob/living/simple_mob)) var/mob/living/simple_mob/SM = holder - our_targets -= SM.prey_excludes + our_targets -= SM.prey_excludes // Lazylist, but subtracting a null from the list seems fine. return our_targets /datum/ai_holder/simple_mob/ranged/pakkun/can_attack(atom/movable/the_target, var/vision_required = TRUE) @@ -120,14 +122,14 @@ return FALSE if(istype(holder, /mob/living/simple_mob)) var/mob/living/simple_mob/SM = holder - if(L in SM.prey_excludes) + if(LAZYFIND(SM.prey_excludes, L)) return FALSE else return FALSE /mob/living/simple_mob/vore/pakkun/on_throw_vore_special(var/pred, var/mob/living/target) - if(pred && !extra_posessive) - prey_excludes += target + if(pred && !extra_posessive && !(LAZYFIND(prey_excludes, target))) + LAZYSET(prey_excludes, target, world.time) addtimer(CALLBACK(src, .proc/removeMobFromPreyExcludes, weakref(target)), 5 MINUTES) if(ai_holder) ai_holder.remove_target() @@ -151,8 +153,8 @@ user.visible_message("[user] swats [src] with [O]!") release_vore_contents() for(var/mob/living/L in living_mobs(0)) - if(!(L in prey_excludes)) - prey_excludes += L + if(!(LAZYFIND(prey_excludes, L))) + LAZYSET(prey_excludes, L, world.time) addtimer(CALLBACK(src, .proc/removeMobFromPreyExcludes, weakref(L)), 5 MINUTES) else ..() @@ -184,6 +186,8 @@ icon_living = "snappy" icon_state = "snappy" icon_rest = "snappy-rest" + digestable = 0 // pet mob, do not eat + devourable = 0 ai_holder_type = /datum/ai_holder/simple_mob/ranged/pakkun/snappy vore_default_mode = DM_HOLD @@ -211,6 +215,11 @@ petters += M //YOU HAVE OFFERED YOURSELF TO THE LIZARD return ..() +/mob/living/simple_mob/vore/pakkun/snapdragon/snappy/lay_down() + if(LAZYLEN(petters) && prob(50) && !resting) //50% chance she'll forgive a random person when she takes a nap + petters -= pick(petters) + ..() + /mob/living/simple_mob/vore/pakkun/snapdragon/snappy/init_vore() ..() var/obj/belly/B = vore_selected diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm b/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm index 0ff9d3d44c..eff23b4b90 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm @@ -41,6 +41,8 @@ say_list_type = /datum/say_list/panther ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive + + can_be_drop_prey = FALSE //CHOMP Add // Activate Noms! /mob/living/simple_mob/vore/aggressive/panther diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/plants_ch/pitcher.dm b/code/modules/mob/living/simple_mob/subtypes/vore/plants_ch/pitcher.dm index ab2309f837..65df713486 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/plants_ch/pitcher.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/plants_ch/pitcher.dm @@ -59,6 +59,8 @@ GLOBAL_LIST_INIT(pitcher_plant_lure_messages, list( var/scent_strength = 5 //How much can a hungry pitcher confuse nearby people? var/last_lifechecks = 0 //Timing variable to limit vore/hungry proc calls var/list/pitcher_plant_lure_messages = null + + can_be_drop_prey = FALSE //CHOMP Add diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm b/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm index 4740aa24d2..42255fd49e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/rat.dm @@ -69,6 +69,8 @@ say_list_type = /datum/say_list/rat ai_holder_type = /datum/ai_holder/simple_mob/melee/rat + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/vore/aggressive/rat/init_vore() if(!voremob_loaded) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/rat_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/rat_ch.dm index 292525583b..75fa11f63a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/rat_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/rat_ch.dm @@ -1,4 +1,6 @@ /mob/living/simple_mob/vore/aggressive/rat/event maxHealth = 50 health = 50 - vore_pounce_chance = 10 \ No newline at end of file + vore_pounce_chance = 10 + + can_be_drop_prey = FALSE //CHOMP Add \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm index ec1161630a..f3f86693aa 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm @@ -49,7 +49,8 @@ // Do this after the potential vore, so we get the belly update_icon() - + + /* CHOMPEdit, comment out and handle in custom proc //Affect nearby lights var/destroy_lights = 0 if(eye_state == RED_EYES) @@ -66,6 +67,8 @@ L.broken() else L.flicker(10) + */ + handle_phasein_flicker() // CHOMPEdit, special handle for phase-in light flicker //Shifting out else diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm index c84ab019f9..418520f868 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm @@ -144,6 +144,7 @@ var/obj/belly/B = new /obj/belly(src) vore_selected = B B.immutable = 1 + B.affects_vore_sprites = TRUE //CHOMPEdit - vore sprites enabled for simplemobs! B.name = vore_stomach_name ? vore_stomach_name : "stomach" B.desc = vore_stomach_flavor ? vore_stomach_flavor : "Your surroundings are warm, soft, and slimy. Makes sense, considering you're inside \the [name]." B.digest_mode = vore_default_mode diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin_ch.dm deleted file mode 100644 index 61d888b62f..0000000000 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin_ch.dm +++ /dev/null @@ -1,3 +0,0 @@ -// Allow horizontal -/mob/living/simple_mob/shadekin/update_transform() - update_transform_horizontal() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/types.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/types.dm index d09e72aa97..7619cfdaf7 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/types.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/types.dm @@ -167,6 +167,8 @@ area is very taxing on you, but you gain energy extremely fast in any very dark area. You're weaker than other \ shadekin, but your fast energy generation in the dark allows you to phase shift more often." + nom_mob = TRUE + /mob/living/simple_mob/shadekin/yellow ai_holder_type = /datum/ai_holder/simple_mob/melee/hit_and_run diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/slug_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/slug_ch.dm index d43ea7f622..88288a8090 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/slug_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/slug_ch.dm @@ -42,6 +42,8 @@ var/list/my_slime = list() var/slime_max = 35 //With a slug which moves once every 10 seconds and a 5 minute delete timer, this should never exceed 30. var/mob/living/vore_memory = null + + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/vore/slug //I guess separating the vore variables is a little more organized? vore_bump_chance = 100 //Always attempt a bump nom if possible... diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/snake.dm b/code/modules/mob/living/simple_mob/subtypes/vore/snake.dm index 1eee080207..c9ad0e28e3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/snake.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/snake.dm @@ -53,6 +53,8 @@ pixel_y = -16 ai_holder_type = /datum/ai_holder/simple_mob/melee + + can_be_drop_prey = FALSE //CHOMP Add // Activate Noms! /mob/living/simple_mob/vore/aggressive/giant_snake diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm index 23bf4e8444..cfb0f5ea77 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm @@ -60,6 +60,8 @@ var/global/list/moth_amount = 0 // Chompstation Addition, Rykka waz here. *pawst var/shock_chance = 10 // Beware var/powerdraw = 100000 // previous value 150000 // CHOMPStation Addition, Rykka waz here. *pawstamp* var/tracked = FALSE + + can_be_drop_prey = FALSE //CHOMP Add /datum/say_list/solargrub emote_see = list("squelches", "squishes") diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solarmoth_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solarmoth_ch.dm index 3f1fb2ef94..a25ef4021b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/solarmoth_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/solarmoth_ch.dm @@ -67,6 +67,8 @@ "bomb" = 100, "bio" = 100, "rad" = 100) + + can_be_drop_prey = FALSE //CHOMP Add /datum/say_list/solarmoth emote_see = list("flutters") @@ -99,23 +101,25 @@ /mob/living/simple_mob/vore/solarmoth/Life() . = ..() if(icon_state != icon_dead) //I mean on death() Life() should disable but i guess doesnt hurt to make sure -shark - var/datum/gas_mixture/env = loc.return_air() //Gets all the information on the local air. - var/transfer_moles = 0.25 * env.total_moles //The bigger the room, the harder it is to heat the room. - var/datum/gas_mixture/removed = env.remove(transfer_moles) - var/heat_transfer = removed.get_thermal_energy_change(set_temperature) - if(heat_transfer > 0 && env.temperature < T0C + 200) //This should start heating the room at a moderate pace up to 200 degrees celsius. - heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater - removed.add_thermal_energy(heat_transfer) + var/turf/moth_loc = get_turf(src) + if(isturf(moth_loc) && moth_loc.air) + var/datum/gas_mixture/env = moth_loc.return_air() //Gets all the information on the local air. + var/transfer_moles = 0.25 * env.total_moles //The bigger the room, the harder it is to heat the room. + var/datum/gas_mixture/removed = env.remove(transfer_moles) + var/heat_transfer = removed.get_thermal_energy_change(set_temperature) + if(heat_transfer > 0 && env.temperature < T0C + 200) //This should start heating the room at a moderate pace up to 200 degrees celsius. + heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater + removed.add_thermal_energy(heat_transfer) - else if(heat_transfer > 0 && env.temperature < set_temperature) //Set temperature is 10,000 degrees celsius. So this thing will start cooking crazy hot between the temperatures of 200C and 10,000C. - heating_power = original_temp*100 //Changed to work variable -shark //FLAME ON! This will make the moth heat up the room at an incredible rate. - heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater. Except it's hot, so yeah. - removed.add_thermal_energy(heat_transfer) + else if(heat_transfer > 0 && env.temperature < set_temperature) //Set temperature is 10,000 degrees celsius. So this thing will start cooking crazy hot between the temperatures of 200C and 10,000C. + heating_power = original_temp*100 //Changed to work variable -shark //FLAME ON! This will make the moth heat up the room at an incredible rate. + heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater. Except it's hot, so yeah. + removed.add_thermal_energy(heat_transfer) - else - return + else + return - env.merge(removed) + env.merge(removed) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/weretiger.dm b/code/modules/mob/living/simple_mob/subtypes/vore/weretiger.dm index 61c3d57faa..0e71039ef7 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/weretiger.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/weretiger.dm @@ -30,6 +30,8 @@ default_pixel_x = -16 has_hands = 1 + + can_be_drop_prey = FALSE //CHOMP Add // Nomnomn /mob/living/simple_mob/vore/weretiger diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm b/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm index 3b339b71be..aab12f953b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/wolf.dm @@ -32,6 +32,8 @@ ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive catalogue_data = list(/datum/category_item/catalogue/fauna/wolf) + + can_be_drop_prey = FALSE //CHOMP Add // Activate Noms! /mob/living/simple_mob/animal/wolf diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/wolfgirl.dm b/code/modules/mob/living/simple_mob/subtypes/vore/wolfgirl.dm index fa4595459a..94f2e35469 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/wolfgirl.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/wolfgirl.dm @@ -23,6 +23,8 @@ say_list_type = /datum/say_list/wolfgirl ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative/wolfgirl + + can_be_drop_prey = FALSE //CHOMP Add // Activate Noms! /mob/living/simple_mob/vore/wolfgirl diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm b/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm index 4eb5b16661..48cb351290 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm @@ -188,10 +188,10 @@ /* //VOREStation AI Temporary Removal /mob/living/simple_mob/animal/passive/cat/fluff/EatTarget() var/mob/living/TM = target_mob - prey_excludes += TM //so they won't immediately re-eat someone who struggles out (or gets newspapered out) as soon as they're ate + LAZYSET(prey_excludes, TM, world.time) //so they won't immediately re-eat someone who struggles out (or gets newspapered out) as soon as they're ate spawn(3600) // but if they hang around and get comfortable, they might get ate again if(src && TM) - prey_excludes -= TM + LAZYREMOVE(prey_excludes, TM) ..() // will_eat check is carried out before EatTarget is called, so prey on the prey_excludes list isn't a problem. */ @@ -248,4 +248,4 @@ B.digest_mode = safe ? DM_HOLD : vore_default_mode /mob/living/simple_mob/animal/passive/mouse - faction = "mouse" //Giving mice a faction so certain mobs can get along with them. \ No newline at end of file + faction = "mouse" //Giving mice a faction so certain mobs can get along with them. diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 19476f2460..ceb49fa47a 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -233,4 +233,4 @@ var/list/progressbars = null //VOREStation Edit - var/datum/focus //What receives our keyboard inputs. src by default // VOREStation Add - Key Handling + var/datum/focus //What receives our keyboard inputs. src by default diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index a7e88cae7e..fa0b554f34 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -159,8 +159,8 @@ // We're still cooling down from the last move if(!my_mob.checkMoveCooldown()) + DEBUG_INPUT("--------") return - DEBUG_INPUT("--------") next_move_dir_add = 0 // This one I *think* exists so you can tap move and it will move even if delay isn't quite up. next_move_dir_sub = 0 // I'm not really sure why next_move_dir_sub even exists. diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 3f3b649ee6..a6b2e872aa 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -482,7 +482,13 @@ ticker.mode.latespawn(character) - if(J.mob_type & JOB_SILICON) + //CHOMPEdit Begin - non-crew join don't get a message + if(rank == JOB_OUTSIDER) + log_and_message_admins("has joined the round as non-crew. (JMP)",character) + if(!(J.mob_type & JOB_SILICON)) + ticker.minds += character.mind + //CHOMPEdit End + else if(J.mob_type & JOB_SILICON) AnnounceCyborg(character, rank, join_message, announce_channel, character.z) else AnnounceArrival(character, rank, join_message, announce_channel, character.z) @@ -541,6 +547,10 @@ // Checks for jobs with minimum age requirements if((job.minimum_character_age || job.min_age_by_species) && (client.prefs.age < job.get_min_age(client.prefs.species, client.prefs.organ_data["brain"]))) continue + //CHOMPEdit Begin - Check species job bans... (Only used for shadekin) + if(job.is_species_banned(client.prefs.species, client.prefs.organ_data["brain"])) + continue + //CHOMPEdit End // Checks for jobs set to "Never" in preferences //TODO: Figure out a better way to check for this if(!(client.prefs.GetJobDepartment(job, 1) & job.flag)) if(!(client.prefs.GetJobDepartment(job, 2) & job.flag)) diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index c2e5a31951..f3dfe624ba 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -262,7 +262,7 @@ mannequin.toggle_tail(setting = TRUE) mannequin.toggle_wing(setting = TRUE) mannequin.update_tail_showing() - COMPILE_OVERLAYS(mannequin) + mannequin.ImmediateOverlayUpdate() update_character_previews(new /mutable_appearance(mannequin)) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 510ce77a26..434bfa2e3c 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1708,22 +1708,49 @@ shaved //Skrell 'hairstyles' /datum/sprite_accessory/hair/skr - name = "Skrell Average Tentacles" - icon_state = "skrell_hair_average" + name = "Tentacles, Average" + icon_state = "skrell_short" species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) -/datum/sprite_accessory/hair/skr/tentacle_veryshort - name = "Skrell Short Tentacles" - icon_state = "skrell_hair_short" - gender = MALE +/datum/sprite_accessory/hair/skr/pullback + name = "Tentacles, Average, Pullback" + icon_state = "skrell_short_pullback" -/datum/sprite_accessory/hair/skr/tentacle_average - name = "Skrell Long Tentacles" - icon_state = "skrell_hair_long" +/datum/sprite_accessory/hair/skr/very_short + name = "Tentacles, Short" + icon_state = "skrell_very_short" -/datum/sprite_accessory/hair/skr/tentacle_verylong - name = "Skrell Very Long Tentacles" - icon_state = "skrell_hair_verylong" +/datum/sprite_accessory/hair/skr/long + name = "Tentacles, Long" + icon_state = "skrell_long" + +/datum/sprite_accessory/hair/skr/long/pullback + name = "Tentacles, Long, Pullback" + icon_state = "skrell_long_pullback" + +/datum/sprite_accessory/hair/skr/long/scarf + name = "Tentacles, Long, Scarf" + icon_state = "skrell_long_scarf" + +/datum/sprite_accessory/hair/skr/long/wavy + name = "Tentacles, Long, Wavy" + icon_state = "skrell_long_wavy" + +/datum/sprite_accessory/hair/skr/very_long + name = "Tentacles, Very Long" + icon_state = "skrell_very_long" + +/datum/sprite_accessory/hair/skr/very_long/pullback + name = "Tentacles, Very Long, Pullback" + icon_state = "skrell_very_long_pullback" + +/datum/sprite_accessory/hair/skr/very_long/scarf + name = "Tentacles, Very Long, Scarf" + icon_state = "skrell_very_long_scarf" + +/datum/sprite_accessory/hair/skr/very_long/wavy + name = "Tentacles, Very Long, Wavy" + icon_state = "skrell_very_long_wavy" //Tajaran hairstyles /datum/sprite_accessory/hair/taj diff --git a/code/modules/mob/new_player/sprite_accessories_ear_ch.dm b/code/modules/mob/new_player/sprite_accessories_ear_ch.dm index ebfadaa147..95a41df36a 100644 --- a/code/modules/mob/new_player/sprite_accessories_ear_ch.dm +++ b/code/modules/mob/new_player/sprite_accessories_ear_ch.dm @@ -62,11 +62,80 @@ icon_state = "Guilmon_Horns" do_colouration = 1 color_blend_mode = ICON_MULTIPLY - + /datum/sprite_accessory/ears/una_bighorns name = "Unathi Big Horns" icon = 'icons/mob/Human_face_m.dmi' icon_state = "unathi_bighorn" do_colouration = 1 color_blend_mode = ICON_MULTIPLY - + +/datum/sprite_accessory/ears/chorns_nubbydogs_c + name = "Nubby Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_nubby" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_herk_c + name = "Herk Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_herk" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_bork_c + name = "Bork Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_bork" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_bull_c + name = "Bull Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_bull" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_bicarrot_c + name = "Bicarrot Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_bicarrot" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_longcarrot_c + name = "Long Carrot Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_longcarrot" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_shortcarrot_c + name = "Short Carrot Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_shortcarrot" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_scorp_c + name = "Scorp Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_scorp" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_ocean_c + name = "Ocean Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_ocean" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/chorns_chub_c + name = "Chub Chorns (colorable)" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "chorn_chub" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm index 6a9ede2499..4b9e3f6ddf 100644 --- a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm @@ -384,23 +384,29 @@ /datum/sprite_accessory/ears/elfs name = "elven ears" desc = "" + icon = 'icons/mob/human_races/sprite_accessories/ears.dmi' icon_state = "elfs" do_colouration = 1 color_blend_mode = ICON_MULTIPLY /datum/sprite_accessory/ears/elfs1 + icon = 'icons/mob/human_races/sprite_accessories/ears.dmi' species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use /datum/sprite_accessory/ears/elfs2 + icon = 'icons/mob/human_races/sprite_accessories/ears.dmi' species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use /datum/sprite_accessory/ears/elfs3 + icon = 'icons/mob/human_races/sprite_accessories/ears.dmi' species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use /datum/sprite_accessory/ears/elfs4 + icon = 'icons/mob/human_races/sprite_accessories/ears.dmi' species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use /datum/sprite_accessory/ears/elfs5 + icon = 'icons/mob/human_races/sprite_accessories/ears.dmi' species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use /datum/sprite_accessory/ears/sleek @@ -860,7 +866,7 @@ extra_overlay = "altevian-inner" do_colouration = 1 color_blend_mode = ICON_MULTIPLY - + /datum/sprite_accessory/ears/wilddog name = "Wild Dog Ears" desc = "" @@ -869,3 +875,22 @@ do_colouration = 1 color_blend_mode = ICON_MULTIPLY extra_overlay = "wild_doginner" + +/datum/sprite_accessory/ears/teshbeeantenna + name = "Teshari bee antenna" + icon = 'icons/mob/vore/ears_vr.dmi' + icon_state = "teshbee" + +/datum/sprite_accessory/ears/teshantenna + name = "Teshari antenna, colorable" + icon = 'icons/mob/vore/ears_vr.dmi' + icon_state = "teshantenna" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/curlyteshantenna + name = "Teshari curly antenna, colorable" + icon = 'icons/mob/vore/ears_vr.dmi' + icon_state = "curly_bug_tesh" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm index aa01f6c465..919d2bedb0 100644 --- a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm @@ -885,4 +885,25 @@ icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "altevian-incisors" color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_HEAD) \ No newline at end of file + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr_eldritch_markings + name = "Eldritch Markings" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "perrinmarkings" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD,BP_L_ARM,BP_L_HAND,BP_R_ARM,BP_R_HAND,BP_L_LEG,BP_L_FOOT,BP_R_LEG,BP_R_FOOT) + +/datum/sprite_accessory/marking/vr_tesh_beak + name = "Teshari beak, pointed" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "tesh-beak" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr_tesh_beak_alt + name = "Teshari beak, rounded" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "tesh-beak-alt" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) diff --git a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm index cd63d811ef..fe44cafefa 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm @@ -12,6 +12,7 @@ species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use var/list/lower_layer_dirs = list(SOUTH) + var/icon_loaf = null //CHOMPEdit /datum/sprite_accessory/tail/New() . = ..() @@ -1200,6 +1201,106 @@ ani_state = "tentacle_w" do_colouration = 1 color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/perrin_tentacles + name = "octopus tentacles (Perrin Kade)" + desc = "" + icon_state = "perrintentacles" + ckeys_allowed = list("codeme") + +/datum/sprite_accessory/tail/teshbeethorax + name = "Teshari bee thorax" + desc = "" + icon = 'icons/mob/vore/tails_vr.dmi' + icon_state = "beethorax_tesh" + +/datum/sprite_accessory/tail/teshbuggo + name = "Teshari bug abdomen, colorable" + desc = "" + icon = 'icons/mob/vore/tails_vr.dmi' + icon_state = "teshbug_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/teshbuggobee + name = "Teshari bug abdomen, bee top, dual-colorable" + desc = "" + icon = 'icons/mob/vore/tails_vr.dmi' + icon_state = "teshbug_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshbee_markings" + +/datum/sprite_accessory/tail/teshbeefull + name = "Teshari bug abdomen, bee full, dual-colorable" + desc = "" + icon = 'icons/mob/vore/tails_vr.dmi' + icon_state = "teshbug_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshbeefull_markings" + +/datum/sprite_accessory/tail/teshbuggounder + name = "Teshari bug abdomen, underside, dual-colorable" + desc = "" + icon = 'icons/mob/vore/tails_vr.dmi' + icon_state = "teshbug_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshunder_markings" + +/datum/sprite_accessory/tail/teshbuggofirefly + name = "Teshari bug abdomen, firefly, dual-colorable" + desc = "" + icon = 'icons/mob/vore/tails_vr.dmi' + icon_state = "teshbug_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshfirefly_markings" + +/datum/sprite_accessory/tail/fatteshbuggo + name = "Teshari fat bug abdomen, colorable" + desc = "" + icon = 'icons/mob/vore/tails_vr.dmi' + icon_state = "teshbugfat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/fatteshbuggobee + name = "Teshari fat bug abdomen, bee top, dual-colorable" + desc = "" + icon = 'icons/mob/vore/tails_vr.dmi' + icon_state = "teshbugfat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshfatbee_markings" + +/datum/sprite_accessory/tail/fatteshbeefull + name = "Teshari fat bug abdomen, bee full, dual-colorable" + desc = "" + icon = 'icons/mob/vore/tails_vr.dmi' + icon_state = "teshbugfat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshfatbeefull_markings" + +/datum/sprite_accessory/tail/fatteshbuggounder + name = "Teshari fat bug abdomen, underside, dual-colorable" + desc = "" + icon = 'icons/mob/vore/tails_vr.dmi' + icon_state = "teshbugfat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshfatunder_markings" + +/datum/sprite_accessory/tail/fatteshbuggofirefly + name = "Teshari fat bug abdomen, firefly, dual-colorable" + desc = "" + icon = 'icons/mob/vore/tails_vr.dmi' + icon_state = "teshbugfat_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "teshfatfirefly_markings" //LONG TAILS ARE NOT TAUR BUTTS >:O /datum/sprite_accessory/tail/longtail diff --git a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm index 698c91d051..a5f72fb9d8 100644 --- a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm @@ -56,11 +56,20 @@ under_sprites = 'icons/mob/taursuits_wolf_vr.dmi' suit_sprites = 'icons/mob/taursuits_wolf_vr.dmi' icon_sprite_tag = "wolf" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 4 /datum/sprite_accessory/tail/taur/wolf/fatwolf name = "Fat Wolf (Taur)" icon_state = "fatwolf_s" - icon_sprite_tag = "wolf" //This could be modified later. + //icon_sprite_tag = "wolf" //This could be modified later. + loaf_offset = 3 + +/datum/sprite_accessory/tail/taur/wolf/wolf_wag + name = "Wolf (Taur, Fat vwag)" + icon_state = "wolf_s" + ani_state = "fatwolf_s" /datum/sprite_accessory/tail/taur/wolf/wolf_2c name = "Wolf 3-color (Taur)" @@ -69,21 +78,24 @@ extra_overlay2 = "wolf_markings_2" //icon_sprite_tag = "wolf2c" +/datum/sprite_accessory/tail/taur/wolf/fatwolf_2c + name = "Fat Wolf 3-color (Taur)" + icon = 'icons/mob/vore/taurs_ch.dmi' //CHOMPEdit + icon_state = "fatwolf_s" + extra_overlay = "fatwolf_markings" + extra_overlay2 = "fatwolf_markings_2" //CHOMPEdit + //icon_sprite_tag = "fatwolf2c" + loaf_offset = 3 + /datum/sprite_accessory/tail/taur/wolf/wolf_2c_wag - name = "Wolf 3-color (Taur, vwag)" + name = "Wolf 3-color (Taur, Fat vwag)" + icon = 'icons/mob/vore/taurs_ch.dmi' //CHOMPEdit icon_state = "wolf_s" extra_overlay = "wolf_markings" extra_overlay2 = "wolf_markings_2" ani_state = "fatwolf_s" extra_overlay_w = "fatwolf_markings" - extra_overlay2_w = "wolf_markings_2" - -/datum/sprite_accessory/tail/taur/wolf/fatwolf_2c - name = "Fat Wolf 3-color (Taur)" - icon_state = "fatwolf_s" - extra_overlay = "fatwolf_markings" - extra_overlay2 = "wolf_markings_2" - //icon_sprite_tag = "fatwolf2c" + extra_overlay2_w = "fatwolf_markings_2" //CHOMPEdit /datum/sprite_accessory/tail/taur/wolf/synthwolf name = "SynthWolf dual-color (Taur)" @@ -91,12 +103,23 @@ extra_overlay = "synthwolf_markings" extra_overlay2 = "synthwolf_glow" //icon_sprite_tag = "synthwolf" + loaf_offset = 3 /datum/sprite_accessory/tail/taur/wolf/fatsynthwolf name = "Fat SynthWolf dual-color (Taur)" icon_state = "fatsynthwolf_s" extra_overlay = "fatsynthwolf_markings" extra_overlay2 = "fatsynthwolf_glow" + loaf_offset = 3 + +/datum/sprite_accessory/tail/taur/wolf/fatsynthwolf_wag + name = "SynthWolf dual-color (Taur, Fat vwag)" + icon_state = "synthwolf_s" + extra_overlay = "synthwolf_markings" + extra_overlay2 = "synthwolf_glow" + ani_state = "fatsynthwolf_s" + extra_overlay_w = "fatsynthwolf_markings" + extra_overlay2_w = "fatsynthwolf_glow" /datum/sprite_accessory/tail/taur/skunk name = "Skunk (Taur)" @@ -104,6 +127,9 @@ extra_overlay = "skunk_markings" extra_overlay2 = "skunk_markings_2" icon_sprite_tag = "skunk" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 3 /datum/sprite_accessory/tail/taur/naga name = "Naga (Taur)" @@ -157,6 +183,9 @@ under_sprites = 'icons/mob/taursuits_horse_vr.dmi' suit_sprites = 'icons/mob/taursuits_horse_vr.dmi' icon_sprite_tag = "horse" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 4 msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!" msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!" @@ -179,12 +208,18 @@ extra_overlay = "synthhorse_markings" extra_overlay2 = "synthhorse_glow" //icon_sprite_tag = "synthhorse" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 3 /datum/sprite_accessory/tail/taur/cow name = "Cow (Taur)" icon_state = "cow_s" suit_sprites = 'icons/mob/taursuits_cow_vr.dmi' icon_sprite_tag = "cow" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 3 msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!" msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!" @@ -207,6 +242,9 @@ extra_overlay = "deer_markings" suit_sprites = 'icons/mob/taursuits_deer_vr.dmi' icon_sprite_tag = "deer" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 6 msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!" msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!" @@ -229,21 +267,45 @@ // suit_sprites = 'icons/mob/taursuits_lizard_vr.dmi' ///Chomp edit suit_sprites = 'icons/mob/taursuits_lizard_ch.dmi' icon_sprite_tag = "lizard" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 5 + +/datum/sprite_accessory/tail/taur/lizard/fatlizard + name = "Fat Lizard (Taur)" + icon_state = "fatlizard_s" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 3 + +/datum/sprite_accessory/tail/taur/lizard/lizard_wag + name = "Lizard (Taur, Fat vwag)" + icon_state = "lizard_s" + ani_state = "fatlizard_s" /datum/sprite_accessory/tail/taur/lizard/lizard_2c name = "Lizard dual-color (Taur)" icon_state = "lizard_s" extra_overlay = "lizard_markings" //icon_sprite_tag = "lizard2c" - -/datum/sprite_accessory/tail/taur/lizard/fatlizard - name = "Fat Lizard (Taur)" - icon_state = "fatlizard_s" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 5 /datum/sprite_accessory/tail/taur/lizard/fatlizard_2c name = "Fat Lizard (Taur, dual-color)" icon_state = "fatlizard_s" - extra_overlay= "fatlizard_markings" + extra_overlay = "fatlizard_markings" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 3 + +/datum/sprite_accessory/tail/taur/lizard/lizard_2c_wag + name = "Fat Lizard (Taur, dual-color, Fat vwag)" + icon_state = "lizard_s" + extra_overlay = "lizard_markings" + ani_state = "fatlizard_s" + extra_overlay_w = "fatlizard_markings" /datum/sprite_accessory/tail/taur/lizard/synthlizard name = "SynthLizard dual-color (Taur)" @@ -251,12 +313,27 @@ extra_overlay = "synthlizard_markings" extra_overlay2 = "synthlizard_glow" //icon_sprite_tag = "synthlizard" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 3 /datum/sprite_accessory/tail/taur/lizard/fatsynthlizard name = "Fat SynthLizard dual-color (Taur)" icon_state = "fatsynthlizard_s" extra_overlay = "fatsynthlizard_markings" extra_overlay2 = "fatsynthlizard_glow" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 3 + +/datum/sprite_accessory/tail/taur/lizard/synthlizard_wag + name = "SynthLizard dual-color (Taur, Fat vwag)" + icon_state = "synthlizard_s" + extra_overlay = "synthlizard_markings" + extra_overlay2 = "synthlizard_glow" + ani_state = "fatsynthlizard_s" + extra_overlay_w = "fatsynthlizard_markings" + extra_overlay2_w = "fatsynthlizard_glow" /datum/sprite_accessory/tail/taur/spider name = "Spider (Taur)" @@ -311,16 +388,25 @@ icon_state = "feline_s" suit_sprites = 'icons/mob/taursuits_feline_vr.dmi' icon_sprite_tag = "feline" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 5 /datum/sprite_accessory/tail/taur/fatfeline name = "Fat Feline (Taur)" icon_state = "fatfeline_s" //icon_sprite_tag = "fatfeline" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 3 /datum/sprite_accessory/tail/taur/fatfeline_wag - name = "Fat Feline (Taur) (vwag)" + name = "Fat Feline (Taur, Fat vwag)" icon_state = "fatfeline_s" ani_state = "fatfeline_w" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 3 /datum/sprite_accessory/tail/taur/feline/feline_2c name = "Feline 3-color (Taur)" @@ -328,13 +414,29 @@ extra_overlay = "feline_markings" extra_overlay2 = "feline_markings_2" //icon_sprite_tag = "feline2c" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' /datum/sprite_accessory/tail/taur/feline/fatfeline_2c name = "Fat Feline 3-color (Taur)" + icon = 'icons/mob/vore/taurs_ch.dmi' //CHOMPEdit icon_state = "fatfeline_s" extra_overlay = "fatfeline_markings" - extra_overlay2 = "feline_markings_2" + extra_overlay2 = "fatfeline_markings_2" //CHOMPEdit //icon_sprite_tag = "fatfeline2c" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 3 + +/datum/sprite_accessory/tail/taur/feline/feline_2c_wag + name = "Feline 3-color (Taur, Fat vwag)" + icon = 'icons/mob/vore/taurs_ch.dmi' //CHOMPEdit + icon_state = "feline_s" + extra_overlay = "feline_markings" + extra_overlay2 = "feline_markings_2" + ani_state = "fatfeline_s" + extra_overlay_w = "fatfeline_markings" + extra_overlay2_w = "fatfeline_markings_2" //CHOMPEdit /datum/sprite_accessory/tail/taur/feline/synthfeline name = "SynthFeline dual-color (Taur)" @@ -342,12 +444,27 @@ extra_overlay = "synthfeline_markings" extra_overlay2 = "synthfeline_glow" //icon_sprite_tag = "synthfeline" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 3 /datum/sprite_accessory/tail/taur/feline/fatsynthfeline name = "Fat SynthFeline dual-color (Taur)" icon_state = "fatsynthfeline_s" extra_overlay = "fatsynthfeline_markings" extra_overlay2 = "fatsynthfeline_glow" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 3 + +/datum/sprite_accessory/tail/taur/feline/synthfeline_wag + name = "SynthFeline dual-color (Taur, Fat vwag)" + icon_state = "synthfeline_s" + extra_overlay = "synthfeline_markings" + extra_overlay2 = "synthfeline_glow" + ani_state = "fatsynthfeline_s" + extra_overlay_w = "fatsynthfeline_markings" + extra_overlay2_w = "fatsynthfeline_glow" /datum/sprite_accessory/tail/taur/slug name = "Slug (Taur)" @@ -421,14 +538,25 @@ /// suit_sprites = 'icons/mob/taursuits_drake_vr.dmi' ///Chomp edit suit_sprites = 'icons/mob/taursuits_drake_ch.dmi' icon_sprite_tag = "drake" - can_loaf = TRUE // VOREStation Edit: Taur Loafing - loaf_offset = 6 // VOREStation Edit: Taur Loafing + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 6 -/datum/sprite_accessory/tail/taur/ch/fatdrake - name = "Drake (Fat Taur dual-color)" +/datum/sprite_accessory/tail/taur/drake/fat + name = "Fat Drake (Taur)" icon_state = "fatdrake_s" extra_overlay = "fatdrake_markings" - icon_sprite_tag = "drake" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 6 + +/datum/sprite_accessory/tail/taur/drake/drake_vwag + name = "Drake (Taur, Fat vwag)" + icon_state = "drake_s" + extra_overlay = "drake_markings" + ani_state = "fatdrake_s" + extra_overlay_w = "fatdrake_markings" + can_loaf = FALSE /datum/sprite_accessory/tail/taur/otie name = "Otie (Taur)" @@ -437,6 +565,9 @@ extra_overlay2 = "otie_markings_2" suit_sprites = 'icons/mob/taursuits_otie_vr.dmi' icon_sprite_tag = "otie" + can_loaf = TRUE + icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' + loaf_offset = 5 /datum/sprite_accessory/tail/taur/alraune/alraune_2c name = "Alraune (dual color)" @@ -543,12 +674,14 @@ name = "Feline (wickedtemp) (Taur)" icon_state = "tempest_s" ckeys_allowed = list("wickedtemp") + can_loaf = FALSE //silencedmp5a5: Serdykov Antoz /datum/sprite_accessory/tail/taur/wolf/serdy name = "CyberSerdy (silencedmp5a5) (Taur)" icon_state = "serdy_s" ckeys_allowed = list("silencedmp5a5") + can_loaf = FALSE //liquidfirefly: Ariana Scol /datum/sprite_accessory/tail/taur/centipede @@ -605,7 +738,7 @@ msg_prey_grab_fail = "%owner steps down onto you with one of their vines, squishing you and forcing you onto the ground!" /datum/sprite_accessory/tail/taur/rat - name = "Rat (dual color)" + name = "Rat (Taur)" icon_state = "rat_s" extra_overlay = "rat_markings" clip_mask_state = "taur_clip_mask_rat" @@ -618,4 +751,163 @@ extra_overlay2 = "noodle_markings_2" suit_sprites = 'icons/mob/taursuits_noodle_vr.dmi' clip_mask_state = "taur_clip_mask_noodle" - icon_sprite_tag = "noodle" \ No newline at end of file + icon_sprite_tag = "noodle" + +/datum/sprite_accessory/tail/taur/sect_drone + name = "Sect Drone (Taur)" + icon_state = "sect_drone" + extra_overlay = "sect_drone_markings" + icon_sprite_tag = "sect_drone" + + msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!" + msg_prey_disarm_run = "%owner pushes you down to the ground with their leg!" + + msg_owner_disarm_walk = "You firmly push your leg down on %prey, painfully but harmlessly pinning them to the ground!" + msg_prey_disarm_walk = "%owner firmly pushes their leg down on you, quite painfully but harmlessly pinning you to the ground!" + + msg_owner_harm_walk = "You methodically place your leg down upon %prey's body, slowly applying pressure, crushing them against the floor!" + msg_prey_harm_walk = "%owner methodically places their leg upon your body, slowly applying pressure, crushing you against the floor!" + + msg_owner_grab_success = "You pin %prey down on the ground with your front leg before using your other leg to pick them up, trapping them between two of your front legs!" + msg_prey_grab_success = "%owner pins you down on the ground with their front leg before using their other leg to pick you up, trapping you between two of their front legs!" + + msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!" + msg_prey_grab_fail = "%owner steps down and squishes you with their leg, forcing you down to the ground!" + +/datum/sprite_accessory/tail/taur/sect_drone/fat + name = "Fat Sect Drone (Taur)" + icon_state = "fat_sect_drone" + extra_overlay = "fat_sect_drone_markings" + +/datum/sprite_accessory/tail/taur/sect_drone/drone_wag + name = "Sect Drone (Taur, Fat vwag)" + icon_state = "sect_drone" + extra_overlay = "sect_drone_markings" + ani_state = "fat_sect_drone" + extra_overlay_w = "fat_sect_drone_markings" + +/datum/sprite_accessory/tail/taur/giantspider_colorable//these are honestly better fit for vass icontypes whoops + name = "Giant Spider dual-color (Taur)" + icon_state = "giantspidertaur-colorable" + extra_overlay = "giantspidertaur-colorable-markings" + icon_sprite_tag = "giantspidertaur-colorable" + + msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!" + msg_prey_disarm_run = "%owner pushes you down to the ground with their leg!" + + msg_owner_disarm_walk = "You firmly push your leg down on %prey, painfully but harmlessly pinning them to the ground!" + msg_prey_disarm_walk = "%owner firmly pushes their leg down on you, quite painfully but harmlessly pinning you to the ground!" + + msg_owner_harm_walk = "You methodically place your leg down upon %prey's body, slowly applying pressure, crushing them against the floor!" + msg_prey_harm_walk = "%owner methodically places their leg upon your body, slowly applying pressure, crushing you against the floor!" + + msg_owner_grab_success = "You pin %prey down on the ground with your front leg before using your other leg to pick them up, trapping them between two of your front legs!" + msg_prey_grab_success = "%owner pins you down on the ground with their front leg before using their other leg to pick you up, trapping you between two of their front legs!" + + msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!" + msg_prey_grab_fail = "%owner steps down and squishes you with their leg, forcing you down to the ground!" + +/datum/sprite_accessory/tail/taur/carrierspider + name = "Carrier Spider (Taur)" + icon_state = "carrierspidertaur" + extra_overlay = null + icon_sprite_tag = "carrierspidertaur" + + msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!" + msg_prey_disarm_run = "%owner pushes you down to the ground with their leg!" + + msg_owner_disarm_walk = "You firmly push your leg down on %prey, painfully but harmlessly pinning them to the ground!" + msg_prey_disarm_walk = "%owner firmly pushes their leg down on you, quite painfully but harmlessly pinning you to the ground!" + + msg_owner_harm_walk = "You methodically place your leg down upon %prey's body, slowly applying pressure, crushing them against the floor!" + msg_prey_harm_walk = "%owner methodically places their leg upon your body, slowly applying pressure, crushing you against the floor!" + + msg_owner_grab_success = "You pin %prey down on the ground with your front leg before using your other leg to pick them up, trapping them between two of your front legs!" + msg_prey_grab_success = "%owner pins you down on the ground with their front leg before using their other leg to pick you up, trapping you between two of their front legs!" + + msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!" + msg_prey_grab_fail = "%owner steps down and squishes you with their leg, forcing you down to the ground!" + +/datum/sprite_accessory/tail/taur/giantspider + name = "Giant Spider (Taur)" + icon_state = "giantspidertaur" + extra_overlay = null + icon_sprite_tag = "giantspidertaur" + + msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!" + msg_prey_disarm_run = "%owner pushes you down to the ground with their leg!" + + msg_owner_disarm_walk = "You firmly push your leg down on %prey, painfully but harmlessly pinning them to the ground!" + msg_prey_disarm_walk = "%owner firmly pushes their leg down on you, quite painfully but harmlessly pinning you to the ground!" + + msg_owner_harm_walk = "You methodically place your leg down upon %prey's body, slowly applying pressure, crushing them against the floor!" + msg_prey_harm_walk = "%owner methodically places their leg upon your body, slowly applying pressure, crushing you against the floor!" + + msg_owner_grab_success = "You pin %prey down on the ground with your front leg before using your other leg to pick them up, trapping them between two of your front legs!" + msg_prey_grab_success = "%owner pins you down on the ground with their front leg before using their other leg to pick you up, trapping you between two of their front legs!" + + msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!" + msg_prey_grab_fail = "%owner steps down and squishes you with their leg, forcing you down to the ground!" + +/datum/sprite_accessory/tail/taur/phoronspider + name = "Phorogenic Spider (Taur)" + icon_state = "phoronspidertaur" + extra_overlay = null + icon_sprite_tag = "phoronspidertaur" + + msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!" + msg_prey_disarm_run = "%owner pushes you down to the ground with their leg!" + + msg_owner_disarm_walk = "You firmly push your leg down on %prey, painfully but harmlessly pinning them to the ground!" + msg_prey_disarm_walk = "%owner firmly pushes their leg down on you, quite painfully but harmlessly pinning you to the ground!" + + msg_owner_harm_walk = "You methodically place your leg down upon %prey's body, slowly applying pressure, crushing them against the floor!" + msg_prey_harm_walk = "%owner methodically places their leg upon your body, slowly applying pressure, crushing you against the floor!" + + msg_owner_grab_success = "You pin %prey down on the ground with your front leg before using your other leg to pick them up, trapping them between two of your front legs!" + msg_prey_grab_success = "%owner pins you down on the ground with their front leg before using their other leg to pick you up, trapping you between two of their front legs!" + + msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!" + msg_prey_grab_fail = "%owner steps down and squishes you with their leg, forcing you down to the ground!" + +/datum/sprite_accessory/tail/taur/sparkspider + name = "Voltaic Spider (Taur)" + icon_state = "sparkspidertaur" + extra_overlay = null + icon_sprite_tag = "sparkspidertaur" + + msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!" + msg_prey_disarm_run = "%owner pushes you down to the ground with their leg!" + + msg_owner_disarm_walk = "You firmly push your leg down on %prey, painfully but harmlessly pinning them to the ground!" + msg_prey_disarm_walk = "%owner firmly pushes their leg down on you, quite painfully but harmlessly pinning you to the ground!" + + msg_owner_harm_walk = "You methodically place your leg down upon %prey's body, slowly applying pressure, crushing them against the floor!" + msg_prey_harm_walk = "%owner methodically places their leg upon your body, slowly applying pressure, crushing you against the floor!" + + msg_owner_grab_success = "You pin %prey down on the ground with your front leg before using your other leg to pick them up, trapping them between two of your front legs!" + msg_prey_grab_success = "%owner pins you down on the ground with their front leg before using their other leg to pick you up, trapping you between two of their front legs!" + + msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!" + msg_prey_grab_fail = "%owner steps down and squishes you with their leg, forcing you down to the ground!" + +/datum/sprite_accessory/tail/taur/frostspider + name = "Frost Spider (Taur)" + icon_state = "frostspidertaur" + extra_overlay = null + icon_sprite_tag = "frostspidertaur" + + msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!" + msg_prey_disarm_run = "%owner pushes you down to the ground with their leg!" + + msg_owner_disarm_walk = "You firmly push your leg down on %prey, painfully but harmlessly pinning them to the ground!" + msg_prey_disarm_walk = "%owner firmly pushes their leg down on you, quite painfully but harmlessly pinning you to the ground!" + + msg_owner_harm_walk = "You methodically place your leg down upon %prey's body, slowly applying pressure, crushing them against the floor!" + msg_prey_harm_walk = "%owner methodically places their leg upon your body, slowly applying pressure, crushing you against the floor!" + + msg_owner_grab_success = "You pin %prey down on the ground with your front leg before using your other leg to pick them up, trapping them between two of your front legs!" + msg_prey_grab_success = "%owner pins you down on the ground with their front leg before using their other leg to pick you up, trapping you between two of their front legs!" + + msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!" + msg_prey_grab_fail = "%owner steps down and squishes you with their leg, forcing you down to the ground!" diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index e9ccadbf86..200a3ac43b 100644 --- a/code/modules/mob/new_player/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_vr.dm @@ -45,28 +45,28 @@ icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "serg_plain" - species_allowed = list(SPECIES_SERGAL) + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_SHADEKIN_YW, SPECIES_ALTEVIAN) //CHOMPEdit /datum/sprite_accessory/hair/sergal_medicore name = "Sergal Medicore" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "serg_medicore" - species_allowed = list(SPECIES_SERGAL) + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_SHADEKIN_YW, SPECIES_ALTEVIAN) //CHOMPEdit /datum/sprite_accessory/hair/sergal_tapered name = "Sergal Tapered" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "serg_tapered" - species_allowed = list(SPECIES_SERGAL) + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_SHADEKIN_YW, SPECIES_ALTEVIAN) //CHOMPEdit /datum/sprite_accessory/hair/sergal_fairytail name = "Sergal Fairytail" icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "serg_fairytail" - species_allowed = list(SPECIES_SERGAL) + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_SHADEKIN_YW, SPECIES_ALTEVIAN) //CHOMPEdit /datum/sprite_accessory/hair/braid name = "Floorlength Braid" diff --git a/code/modules/mob/new_player/sprite_accessories_wing.dm b/code/modules/mob/new_player/sprite_accessories_wing.dm index ded7a70937..3b13156b9d 100644 --- a/code/modules/mob/new_player/sprite_accessories_wing.dm +++ b/code/modules/mob/new_player/sprite_accessories_wing.dm @@ -151,3 +151,10 @@ desc = "" icon_state = "cyberdoe_s" do_colouration = 0 + +/datum/sprite_accessory/wing/mantisarms + name = "Mantis arms" + desc = "" + icon_state = "mantisarms_s" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/mob/new_player/sprite_accessories_wing_large_vr.dm b/code/modules/mob/new_player/sprite_accessories_wing_large_vr.dm index 0bfca21140..e516d6b085 100644 --- a/code/modules/mob/new_player/sprite_accessories_wing_large_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_wing_large_vr.dm @@ -11,4 +11,12 @@ name = "megamoth wings" icon_state = "megamoth" ani_state = "megamoth_open" - multi_dir = TRUE \ No newline at end of file + multi_dir = TRUE + +/datum/sprite_accessory/wing/large/megamothc + name = "megamoth wings (colorable)" + icon_state = "megacolor" + ani_state = "megacolor_open" + multi_dir = TRUE + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/mob/new_player/sprite_accessories_wing_vr.dm b/code/modules/mob/new_player/sprite_accessories_wing_vr.dm index fc04d43a42..c970beb4a3 100644 --- a/code/modules/mob/new_player/sprite_accessories_wing_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_wing_vr.dm @@ -129,6 +129,45 @@ extra_overlay = "harpywings_batmarkings" extra_overlay2 = "neckfur" +/datum/sprite_accessory/wing/harpyarmwings + name = "harpy arm wings, colorable" + desc = "" + icon_state = "harpyarmwings" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/harpyarmwings_alt + name = "harpy arm wings alt, colorable" + desc = "" + icon_state = "harpyarmwings_alt" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/harpyarmwings_alt_neckfur + name = "harpy arm wings alt & neckfur" + desc = "" + icon_state = "harpyarmwings_alt" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "neckfur" + +/datum/sprite_accessory/wing/harpyarmwings_bat + name = "harpy arm wings, bat" + desc = "" + icon_state = "harpyarmwings_bat" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "harpyarmwings_batmarkings" + +/datum/sprite_accessory/wing/harpyarmwings_bat_neckfur + name = "harpy arm wings, bat & neckfur" + desc = "" + icon_state = "harpyarmwings_bat" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "harpyarmwings_batmarkings" + extra_overlay2 = "neckfur" + /datum/sprite_accessory/wing/neckfur name = "neck fur" desc = "" @@ -237,3 +276,15 @@ color_blend_mode = ICON_MULTIPLY extra_overlay = "aeromorph_flat_1" extra_overlay2 = "aeromorph_flat_2" + +/datum/sprite_accessory/wing/teshbee + name = "Teshari bee wings" + desc = "" + icon = 'icons/mob/vore/wings_vr.dmi' + icon_state = "beewings_tesh" + +/datum/sprite_accessory/wing/teshdragonfly + name = "Teshari dragonfly wings" + desc = "" + icon = 'icons/mob/vore/wings_vr.dmi' + icon_state = "dragonfly_tesh" \ No newline at end of file diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index a43406eb48..c0a2a4b5e2 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -61,6 +61,8 @@ var/list/vis_objs = vis["objs"] for(var/mob/M as anything in vis_mobs) + if(isnewplayer(M)) + continue if(isobserver(M) && !(is_preference_enabled(/datum/client_preference/whisubtle_vis) || (isbelly(M.loc) && src == M.loc:owner)) && !M.client?.holder) //CHOMPEdit - Added the belly check so that ghosts in bellies can still see their pred's messages. spawn(0) M.show_message(undisplayed_message, 2) @@ -116,7 +118,7 @@ ///// PSAY ///// -/mob/verb/psay(message as text|null) +/mob/verb/psay(message as text) set category = "IC" set name = "Psay" set desc = "Talk to people affected by complete absorbed or dominate predator/prey." @@ -221,7 +223,7 @@ ///// PME ///// -/mob/verb/pme(message as text|null) +/mob/verb/pme(message as message) set category = "IC" set name = "Pme" set desc = "Emote to people affected by complete absorbed or dominate predator/prey." @@ -323,3 +325,51 @@ else //There wasn't anyone to send the message to, pred or prey, so let's just emote it instead and correct our psay just in case. M.forced_psay = FALSE M.me_verb(message) + +/mob/living/verb/player_narrate(message as message) + set category = "IC" + set name = "Narrate (Player)" + set desc = "Narrate an action or event! An alternative to emoting, for when your emote shouldn't start with your name!" + + if(src.client) + if(client.prefs.muted & MUTE_IC) + to_chat(src, "You cannot speak in IC (muted).") + return + if(!message) + message = tgui_input_text(usr, "Type a message to narrate.","Narrate") + message = sanitize_or_reflect(message,src) + if(!message) + return + if(stat == DEAD) + return say_dead(message) + if(stat) + to_chat(src, "You need to be concious to narrate: [message]") + return + message = "([name]) [message]" + + //Below here stolen from emotes + var/turf/T = get_turf(src) + + if(!T) return + + var/ourfreq = null + if(voice_freq > 0 ) + ourfreq = voice_freq + + if(client) + playsound(T, pick(emote_sound), 25, TRUE, falloff = 1 , is_global = TRUE, frequency = ourfreq, ignore_walls = FALSE, preference = /datum/client_preference/emote_sounds) + + var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,2,remote_ghosts = client ? TRUE : FALSE) + var/list/m_viewers = in_range["mobs"] + + for(var/mob/M as anything in m_viewers) + spawn(0) // It's possible that it could be deleted in the meantime, or that it runtimes. + if(M) + if(isobserver(M)) + message = "[message] ([ghost_follow_link(src, M)])" + if(isnewplayer(M)) + continue + if(M.stat == UNCONSCIOUS || M.sleeping > 0) + continue + to_chat(M, message) + log_emote(message, src) diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 04766a51e4..6f5ca2edc2 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -469,17 +469,17 @@ /////////////////// //Verbs for humans -/mob/proc/nsay(message as text|null) +/mob/proc/nsay(message as text) set name = "NSay" set desc = "Speak into your NIF's Soulcatcher." set category = "IC" src.nsay_act(message) -/mob/proc/nsay_act(message as text|null) +/mob/proc/nsay_act(message as text) to_chat(src, SPAN_WARNING("You must be a humanoid with a NIF implanted to use that.")) -/mob/living/carbon/human/nsay_act(message as text|null) +/mob/living/carbon/human/nsay_act(message as text) if(stat != CONSCIOUS) to_chat(src,SPAN_WARNING("You can't use NSay while unconscious.")) return @@ -499,17 +499,17 @@ var/sane_message = sanitize(message) SC.say_into(sane_message,src) -/mob/proc/nme(message as text|null) +/mob/proc/nme(message as message) set name = "NMe" set desc = "Emote into your NIF's Soulcatcher." set category = "IC" src.nme_act(message) -/mob/proc/nme_act(message as text|null) +/mob/proc/nme_act(message as message) to_chat(src, SPAN_WARNING("You must be a humanoid with a NIF implanted to use that.")) -/mob/living/carbon/human/nme_act(message as text|null) +/mob/living/carbon/human/nme_act(message as message) if(stat != CONSCIOUS) to_chat(src,SPAN_WARNING("You can't use NMe while unconscious.")) return @@ -574,7 +574,7 @@ QDEL_NULL(eyeobj) soulcatcher.notify_into("[src] ended AR projection.") -/mob/living/carbon/brain/caught_soul/verb/nsay_brain(message as text|null) +/mob/living/carbon/brain/caught_soul/verb/nsay_brain(message as text) set name = "NSay" set desc = "Speak into the NIF's Soulcatcher (circumventing AR speaking)." set category = "Soulcatcher" @@ -585,7 +585,7 @@ var/sane_message = sanitize(message) soulcatcher.say_into(sane_message,src,null) -/mob/living/carbon/brain/caught_soul/verb/nme_brain(message as text|null) +/mob/living/carbon/brain/caught_soul/verb/nme_brain(message as message) set name = "NMe" set desc = "Emote into the NIF's Soulcatcher (circumventing AR speaking)." set category = "Soulcatcher" diff --git a/code/modules/nifsoft/software/15_misc.dm b/code/modules/nifsoft/software/15_misc.dm index 1c6bfb2e5f..d2e07a679e 100644 --- a/code/modules/nifsoft/software/15_misc.dm +++ b/code/modules/nifsoft/software/15_misc.dm @@ -188,7 +188,7 @@ /datum/nifsoft/malware/activate() if((. = ..())) - to_chat(nif.human,"Runtime error in 15_misc.dm, line 189.") + to_chat(nif.human,"Runtime error in 15_misc.dm, line 191.") /datum/nifsoft/malware/install() if((. = ..())) diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm index 77d7a9436d..12213b9253 100644 --- a/code/modules/organs/robolimbs.dm +++ b/code/modules/organs/robolimbs.dm @@ -475,6 +475,25 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\ icon_state = "data-white" //VOREStation Edit var/company = "" +/datum/robolimb/wooden/teshari + company = "Morgan Trading Co - Teshari" + icon = 'icons/mob/human_races/cyberlimbs/prosthesis/wooden_teshari.dmi' + species_cannot_use = list(SPECIES_UNATHI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ZADDAT) + species_alternates = list(SPECIES_HUMAN = "Morgan Trading Co") + suggested_species = SPECIES_TESHARI + +/datum/robolimb/wooden/sif + company = "Morgan Trading Co - Sif wood" + desc = "A simplistic, metal-banded, wood-panelled prosthetic. This one is covered in Sivian wood!" + icon = 'icons/mob/human_races/cyberlimbs/prosthesis/wooden_sif.dmi' + +/datum/robolimb/wooden/sif/teshari + company = "Morgan Trading Co - Sif wood - Teshari" + icon = 'icons/mob/human_races/cyberlimbs/prosthesis/wooden_sif_teshari.dmi' + species_cannot_use = list(SPECIES_UNATHI, SPECIES_PROMETHEAN, SPECIES_DIONA, SPECIES_HUMAN, SPECIES_VOX, SPECIES_HUMAN_VATBORN, SPECIES_TAJ, SPECIES_SKRELL, SPECIES_ZADDAT) + species_alternates = list(SPECIES_HUMAN = "Morgan Trading Co") + suggested_species = SPECIES_TESHARI + /obj/item/weapon/disk/limb/New(var/newloc) ..() if(company) diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm index 37c625dc89..f8687c8c23 100644 --- a/code/modules/overmap/ships/computers/helm.dm +++ b/code/modules/overmap/ships/computers/helm.dm @@ -29,7 +29,7 @@ GLOBAL_LIST_EMPTY(all_waypoints) var/speedlimit = 1/(20 SECONDS) //top speed for autopilot, 5 var/accellimit = 0.001 //manual limiter for acceleration req_one_access = list(access_pilot) //VOREStation Edit - ai_control = FALSE //VOREStation Edit - AI/Borgs shouldn't really be flying off in ships without crew help + ai_control = TRUE //VOREStation Edit - AI/Borgs shouldn't really be flying off in ships without crew help // Chompstation Edit - Not an issue on this server, use of shuttles is extremely rare also . // fancy sprite /obj/machinery/computer/ship/helm/adv diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index 93c6f4a059..1b8da0c4c1 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -114,7 +114,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins if(!authenticated) return - + switch(action) if("send") if(copyitem) @@ -136,7 +136,11 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins return TRUE /obj/machinery/photocopier/faxmachine/attackby(obj/item/O as obj, mob/user as mob) - if(O.is_multitool() && panel_open) + if(istype(O, /obj/item/weapon/card/id) && !scan) + user.drop_from_inventory(O) + O.forceMove(src) + scan = O + else if(O.is_multitool() && panel_open) var/input = sanitize(tgui_input_text(usr, "What Department ID would you like to give this fax machine?", "Multitool-Fax Machine Interface", department)) if(!input) to_chat(usr, "No input found. Please hang up and try your call again.") @@ -252,12 +256,13 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins if(check_rights((R_ADMIN|R_MOD|R_EVENT),0,C)) to_chat(C,msg) C << 'sound/machines/printer.ogg' + sender.client << 'sound/machines/printer.ogg' //CHOMPEdit - The pain must be felt // VoreStation Edit Start var/faxid = export_fax(sent) message_chat_admins(sender, faxname, sent, faxid, font_colour) // VoreStation Edit End - + // Webhooks don't parse the HTML on the paper, so we gotta strip them out so it's still readable. var/summary = make_summary(sent) summary = paper_html_to_plaintext(summary) @@ -277,4 +282,3 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins "body" = summary ) ) - \ No newline at end of file diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index fb4299b6bf..1f63ba96c2 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -164,7 +164,7 @@ . += "You have to go closer if you want to read it." /obj/item/weapon/paper/proc/show_content(var/mob/user, var/forceshow=0) - if(!(istype(user, /mob/living/carbon/human) || istype(user, /mob/observer/dead) || istype(user, /mob/living/silicon) || user.universal_understand) && !forceshow) + if(!(forceshow || (istype(user, /mob/living/carbon/human) || istype(user, /mob/observer/dead) || istype(user, /mob/living/silicon) || (istype(user) && user.universal_understand)))) user << browse("[name][stars(info)][stamps]", "window=[name]") onclose(user, "[name]") else diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 34622b4e4b..f748baf6e8 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -261,11 +261,11 @@ GLOBAL_LIST_EMPTY(all_turbines) src.set_dir(turn(src.dir, 90)) -/obj/machinery/power/generator/power_spike() -// if(!effective_gen >= max_power / 2 && powernet) // Don't make a spike if we're not making a whole lot of power. -// return +/obj/machinery/power/generator/power_spike(var/announce_prob = 30) + if(!(effective_gen >= max_power / 2 && powernet)) // Don't make a spike if we're not making a whole lot of power. + return - var/list/powernet_union = powernet.nodes + var/list/powernet_union = powernet.nodes.Copy() for(var/obj/machinery/power/terminal/T in powernet.nodes) if(T.master && istype(T.master, /obj/machinery/power/smes)) var/obj/machinery/power/smes/S = T.master @@ -273,7 +273,7 @@ GLOBAL_LIST_EMPTY(all_turbines) var/found_grid_checker = FALSE for(var/obj/machinery/power/grid_checker/G in powernet_union) - G.power_failure(prob(30)) // If we found a grid checker, then all is well. + G.power_failure(announce_prob) // If we found a grid checker, then all is well. found_grid_checker = TRUE if(!found_grid_checker) // Otherwise lets break some stuff. spawn(1) diff --git a/code/modules/power/smes_vr.dm b/code/modules/power/smes_vr.dm index a333660a43..fe46cae7f0 100644 --- a/code/modules/power/smes_vr.dm +++ b/code/modules/power/smes_vr.dm @@ -32,3 +32,5 @@ /obj/machinery/power/smes/buildable/hybrid/process() charge += min(recharge_rate, capacity - charge) ..() + +//hey travis wake up \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index c97e7c7096..76569a825f 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -147,6 +147,108 @@ charge_cost = 480 //to compensate a bit for self-recharging cell_type = /obj/item/weapon/cell/device/weapon/recharge/captain battery_lock = 1 +/* var/remainingshots = 0 //you may get a limited number of shots regardless of the charge //CHOMPedit: no + var/failurechance = 0 //chance per shot of something going awry + +/obj/item/weapon/gun/energy/captain/Initialize() + //it's an antique and it's been sitting in a case, unmaintained, for who the hell knows how long - who knows what'll happen when you pull it out? + ..() + //first, we decide, does it have a different type of beam? 75% of just being a 40-damage laser, 15% of being less or 0, 10% of being better + projectile_type = pick(prob(1);/obj/item/projectile/beam/pulse, + prob(2);/obj/item/projectile/beam/heavylaser/cannon, + prob(2);/obj/item/projectile/beam/heavylaser, + prob(5);/obj/item/projectile/beam/sniper, + prob(45);/obj/item/projectile/beam, + prob(10);/obj/item/projectile/beam/cyan, + prob(10);/obj/item/projectile/beam/eluger, + prob(10);/obj/item/projectile/beam/imperial, + prob(10);/obj/item/projectile/beam/weaklaser, + prob(5);/obj/item/projectile/beam/practice) + //now, decide whether it has a shot limit and if so how many + if(prob(50)) + remainingshots = rand(1,40) + if(prob(50)) + failurechance = rand(1,5) + + //finally, update the description so it has a tell if it's gonna burn out on you + if(remainingshots || failurechance) + desc = "A rare weapon, produced by the Lunar Arms Company around 2105 - one of humanity's first wholly extra-terrestrial weapon designs. It's been reasonably well-preserved." + +/obj/item/weapon/gun/energy/captain/special_check(var/mob/user) + if(remainingshots) + remainingshots -= 1 + if(!remainingshots) //you've shot your load, sonny + burnout(user) + return 0 + else if(prob(failurechance)) + malfunction(user) + return 0 + return ..() + +/obj/item/weapon/gun/energy/captain/proc/burnout(var/mob/user) + //your gun is now rendered useless + projectile_type = /obj/item/projectile/beam/practice //just in case you somehow manage to get it to fire again, its beam type is set to one that sucks + power_supply.charge = 0 + power_supply.maxcharge = 1 //just to avoid div/0 runtimes + desc = "A rare weapon, produced by the Lunar Arms Company around 2105 - one of humanity's first wholly extra-terrestrial weapon designs. It looks to have completely burned out." + user.visible_message("\The [src] erupts in a shower of sparks!", "\the [src] bursts into a shower of sparks!") + var/turf/T = get_turf(src) + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(2, 1, T) + sparks.start() + update_icon() + +/obj/item/weapon/gun/energy/captain/proc/malfunction(var/mob/user) + var/screwup = rand(1,10) + switch(screwup) + if(1 to 5) //50% of just draining the battery and making future malfunctions more likely + power_supply.charge = 0 + var/turf/T = get_turf(src) + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(2, 1, T) + sparks.start() + update_icon() + user.visible_message("\The [src] shorts out!", "\the [src] shorts out!") + failurechance += rand(1,5) + return + if(6 to 7) //20% chance of weakening the beam type, possibly to uselessness + var/obj/item/projectile/beam/B = new projectile_type + switch(B.damage) + if(0) + return //can't weaken it any further + if(1 to 15) //weaklaser becomes practice + projectile_type = /obj/item/projectile/beam/practice + if(16 to 40) //regular becomes weaklaser + projectile_type = /obj/item/projectile/beam/weaklaser + if(41 to 50) //sniper becomes regular + projectile_type = /obj/item/projectile/beam + if(51 to 60) //heavy becomes sniper + projectile_type = /obj/item/projectile/beam/sniper + if(61 to 80) //cannon becomes heavy + projectile_type = /obj/item/projectile/beam/heavylaser + if(81 to 100) //pulse becomes cannon + projectile_type = /obj/item/projectile/beam/heavylaser/cannon + user.visible_message("\The [src] dims slightly!", "\the [src] dims slightly!") + return + if(8) //10% chance of reducing the number of shots you have left, or giving you a limit if there isn't one + if(!remainingshots) + remainingshots = rand(1,40) + else + remainingshots = min(1, round(remainingshots/2)) + user.visible_message("\The [src] lets out a faint pop.", "\the [src] lets out a faint pop.") + if(9) //10% chance of permanently reducing the cell's max charge + power_supply.maxcharge = power_supply.maxcharge/2 + power_supply.charge = min(power_supply.charge, power_supply.maxcharge) + user.visible_message("\The [src] sparks,letting off a puff of smoke!", "\the [src] sparks,letting off a puff of smoke!") + var/turf/T = get_turf(src) + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread() + sparks.set_up(2, 1, T) + sparks.start() + update_icon() + if(10) //10% chance of just straight-up breaking on the spot + burnout(user) + return +*/ /obj/item/weapon/gun/energy/lasercannon name = "laser cannon" diff --git a/code/modules/reagents/reactions/instant/instant_ch.dm b/code/modules/reagents/reactions/instant/instant_ch.dm index 931b0b8795..b3e2ab0cba 100644 --- a/code/modules/reagents/reactions/instant/instant_ch.dm +++ b/code/modules/reagents/reactions/instant/instant_ch.dm @@ -147,3 +147,28 @@ result = "phenethylamine" required_reagents = list("paroxetine" = 1, "benzilate" = 1) result_amount = 2 + +// Xenochem stuff +/decl/chemical_reaction/instant/xenolazarus // Moved here because upstream axed it and this file cannot conflict + name = "Discount Lazarus" + id = "discountlazarus" + result = null + required_reagents = list("monstertamer" = 5, "clonexadone" = 5) + +/decl/chemical_reaction/instant/xenolazarus/on_reaction(var/datum/reagents/holder, var/created_volume) //literally all this does is mash the regenerate button + if(ishuman(holder.my_atom)) + var/mob/living/carbon/human/H = holder.my_atom + if(H.stat == DEAD && (/mob/living/carbon/human/proc/reconstitute_form in H.verbs)) //no magical regen for non-regenners, and can't force the reaction on live ones + if(H.hasnutriment()) // make sure it actually has the conditions to revive + if(H.revive_ready >= 1) // if it's not reviving, start doing so + H.revive_ready = REVIVING_READY // overrides the normal cooldown + H.visible_message("[H] shudders briefly, then relaxes, faint movements stirring within.") + H.chimera_regenerate() + else if (/mob/living/carbon/human/proc/hatch in H.verbs)// already reviving, check if they're ready to hatch + H.chimera_hatch() + H.visible_message("

[H] violently convulses and then bursts open, revealing a new, intact copy in the pool of viscera.

") // Hope you were wearing waterproofs, doc... + H.adjustBrainLoss(10) // they're reviving from dead, so take 10 brainloss + else //they're already reviving but haven't hatched. Give a little message to tell them to wait. + H.visible_message("[H] stirs faintly, but doesn't appear to be ready to wake up yet.") + else + H.visible_message("[H] twitches for a moment, but remains still.") // no nutriment diff --git a/code/modules/reagents/reactions/instant/instant_vr.dm b/code/modules/reagents/reactions/instant/instant_vr.dm index adc3869294..ca91c19266 100644 --- a/code/modules/reagents/reactions/instant/instant_vr.dm +++ b/code/modules/reagents/reactions/instant/instant_vr.dm @@ -102,31 +102,6 @@ /////////////////////////////////////////////////////////////////////////////////// /// Miscellaneous Reactions -/decl/chemical_reaction/instant/xenolazarus - name = "Discount Lazarus" - id = "discountlazarus" - result = null - required_reagents = list("monstertamer" = 5, "clonexadone" = 5) - -/decl/chemical_reaction/instant/xenolazarus/on_reaction(var/datum/reagents/holder, var/created_volume) //literally all this does is mash the regenerate button - if(ishuman(holder.my_atom)) - var/mob/living/carbon/human/H = holder.my_atom - if(H.stat == DEAD && (/mob/living/carbon/human/proc/reconstitute_form in H.verbs)) //no magical regen for non-regenners, and can't force the reaction on live ones - if(H.hasnutriment()) // make sure it actually has the conditions to revive - if(H.revive_ready >= 1) // if it's not reviving, start doing so - H.revive_ready = REVIVING_READY // overrides the normal cooldown - H.visible_message("[H] shudders briefly, then relaxes, faint movements stirring within.") - H.chimera_regenerate() - else if (/mob/living/carbon/human/proc/hatch in H.verbs)// already reviving, check if they're ready to hatch - H.chimera_hatch() - H.visible_message("

[H] violently convulses and then bursts open, revealing a new, intact copy in the pool of viscera.

") // Hope you were wearing waterproofs, doc... - H.adjustBrainLoss(10) // they're reviving from dead, so take 10 brainloss - else //they're already reviving but haven't hatched. Give a little message to tell them to wait. - H.visible_message("[H] stirs faintly, but doesn't appear to be ready to wake up yet.") - else - H.visible_message("[H] twitches for a moment, but remains still.") // no nutriment - - /decl/chemical_reaction/instant/foam/softdrink required_reagents = list("cola" = 1, "mint" = 1) diff --git a/code/modules/reagents/reagent_containers/syringes_vr.dm b/code/modules/reagents/reagent_containers/syringes_vr.dm index 83c5bacaef..89d81d1f18 100644 --- a/code/modules/reagents/reagent_containers/syringes_vr.dm +++ b/code/modules/reagents/reagent_containers/syringes_vr.dm @@ -85,7 +85,7 @@ //Allow for capped syringes /obj/item/weapon/reagent_containers/syringe/update_icon() - cut_overlays(src) + cut_overlays() var/matrix/tf = matrix() if(isstorage(loc)) @@ -101,12 +101,11 @@ icon_state = "capped" return - var/list/new_overlays = list() var/rounded_vol = round(reagents.total_volume, round(reagents.maximum_volume / 3)) if(reagents.total_volume) filling = image(icon, src, "filler[rounded_vol]") filling.color = reagents.get_color() - new_overlays += filling + add_overlay(filling) if(ismob(loc)) var/injoverlay @@ -115,9 +114,8 @@ injoverlay = "draw" if (SYRINGE_INJECT) injoverlay = "inject" - new_overlays += injoverlay + add_overlay(injoverlay) - add_overlay(new_overlays) icon_state = "[rounded_vol]" item_state = "syringe_[rounded_vol]" diff --git a/code/modules/reagents/reagents/dispenser.dm b/code/modules/reagents/reagents/dispenser.dm index 8e7a5d1862..90d8ea9e2a 100644 --- a/code/modules/reagents/reagents/dispenser.dm +++ b/code/modules/reagents/reagents/dispenser.dm @@ -112,18 +112,15 @@ L.adjust_fire_stacks(amount / 15) /datum/reagent/ethanol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) //This used to do just toxin. That's boring. Let's make this FUN. - if(issmall(M)) removed *= 2 - var/strength_mod = 3 * M.species.alcohol_mod //Alcohol is 3x stronger when injected into the veins. - if(alien == IS_SKRELL) - strength_mod *= 5 - if(alien == IS_TAJARA) - strength_mod *= 1.25 - if(alien == IS_UNATHI) - strength_mod *= 0.75 - if(alien == IS_DIONA) - strength_mod = 0 + if(issmall(M)) + removed *= 2 + if(alien == IS_SLIME) - strength_mod *= 2 // VOREStation Edit - M.adjustToxLoss(removed) + M.adjustToxLoss(removed) //Sterilizing, if only by a little bit. Also already doubled above. + + var/strength_mod = 3 * M.species.chem_strength_alcohol //Alcohol is 3x stronger when injected into the veins. + if(!strength_mod) + return M.add_chemical_effect(CE_ALCOHOL, 1) var/effective_dose = dose * strength_mod * (1 + volume/60) //drinking a LOT will make you go down faster @@ -156,36 +153,32 @@ M.hallucination = max(M.hallucination, halluci*3) /datum/reagent/ethanol/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(issmall(M)) removed *= 2 + + if(issmall(M)) + removed *= 2 + if(!(M.species.allergens & allergen_type)) //assuming it doesn't cause a horrible reaction, we get the nutrition effects M.adjust_nutrition(nutriment_factor * removed) - var/strength_mod = 1 * M.species.alcohol_mod - if(alien == IS_SKRELL) - strength_mod *= 5 - if(alien == IS_TAJARA) - strength_mod *= 1.25 - if(alien == IS_UNATHI) - strength_mod *= 0.75 - if(alien == IS_DIONA) - strength_mod = 0 - if(alien == IS_SLIME) - strength_mod *= 2 // VOREStation Edit - M.adjustToxLoss(removed * 2) + + var/effective_dose = dose * M.species.chem_strength_alcohol + if(!effective_dose) + return M.add_chemical_effect(CE_ALCOHOL, 1) - if(dose * strength_mod >= strength) // Early warning + if(effective_dose >= strength) // Early warning M.make_dizzy(6) // It is decreased at the speed of 3 per tick - if(dose * strength_mod >= strength * 2) // Slurring + if(effective_dose >= strength * 2) // Slurring M.slurring = max(M.slurring, 30) - if(dose * strength_mod >= strength * 3) // Confusion - walking in random directions + if(effective_dose >= strength * 3) // Confusion - walking in random directions M.Confuse(20) - if(dose * strength_mod >= strength * 4) // Blurry vision + if(effective_dose >= strength * 4) // Blurry vision M.eye_blurry = max(M.eye_blurry, 10) - if(dose * strength_mod >= strength * 5) // Drowsyness - periodically falling asleep + if(effective_dose >= strength * 5) // Drowsyness - periodically falling asleep M.drowsyness = max(M.drowsyness, 20) - if(dose * strength_mod >= strength * 6) // Toxic dose + if(effective_dose >= strength * 6) // Toxic dose M.add_chemical_effect(CE_ALCOHOL_TOXIC, toxicity) - if(dose * strength_mod >= strength * 7) // Pass out + if(effective_dose >= strength * 7) // Pass out M.Paralyse(20) M.Sleeping(30) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 662295e578..a5e95899f5 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -1539,6 +1539,12 @@ if(trunk) trunk.linked = src // link the pipe trunk to self +/obj/structure/disposaloutlet/Destroy() + var/obj/structure/disposalpipe/trunk/trunk = locate() in loc + if(trunk && trunk.linked == src) + trunk.linked = null + return ..() + // expel the contents of the holder object, then delete it // called when the holder exits the outlet /obj/structure/disposaloutlet/proc/expel(var/obj/structure/disposalholder/H) diff --git a/code/modules/research/designs/precursor.dm b/code/modules/research/designs/precursor.dm index bb6e98353f..24f888f722 100644 --- a/code/modules/research/designs/precursor.dm +++ b/code/modules/research/designs/precursor.dm @@ -87,3 +87,7 @@ req_tech = list(TECH_MATERIAL = 7, TECH_BLUESPACE = 5, TECH_MAGNET = 6, TECH_PHORON = 3, TECH_ARCANE = 1, TECH_PRECURSOR = 2) build_path = /obj/random/janusmodule sort_string = "ZBBAA" + +/datum/design/item/precursor/janusmodule/Fabricate(var/newloc, var/fabricator) + var/type_to_spawn = pick(subtypesof(/obj/item/weapon/circuitboard/mecha/imperion)) + return new type_to_spawn(newloc) \ No newline at end of file diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm index 9901606b8b..ab4b3abba8 100644 --- a/code/modules/research/mechfab_designs.dm +++ b/code/modules/research/mechfab_designs.dm @@ -813,13 +813,21 @@ build_path = /obj/item/weapon/vehicle_assembly/spacebike /datum/design/item/mechfab/vehicle/quadbike_chassis - name = "Quadbike Chassis" - desc = "A space-bike's un-assembled frame." + name = "Quad bike Chassis" + desc = "A quad bike's un-assembled frame." id = "vehicle_chassis_quadbike" req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 6, TECH_MAGNET = 3, TECH_POWER = 2) materials = list(MAT_STEEL = 15000, MAT_SILVER = 3000, MAT_PLASTIC = 3000, MAT_OSMIUM = 1000) build_path = /obj/item/weapon/vehicle_assembly/quadbike +/datum/design/item/mechfab/vehicle/snowmobile_chassis + name = "Snowmobile Chassis" + desc = "A snowmobile's un-assembled frame." + id = "vehicle_chassis_snowmobile" + req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 6, TECH_MAGNET = 3, TECH_POWER = 2) + materials = list(MAT_STEEL = 12000, MAT_SILVER = 3000, MAT_PLASTIC = 3000, MAT_OSMIUM = 1000) + build_path = /obj/item/weapon/vehicle_assembly/snowmobile + /* * Rigsuits */ diff --git a/code/modules/resleeving/designer.dm b/code/modules/resleeving/designer.dm index 8dd854fa66..371974ec92 100644 --- a/code/modules/resleeving/designer.dm +++ b/code/modules/resleeving/designer.dm @@ -263,7 +263,7 @@ if("menu") menu = params["menu"] temp = "" - + if("href_conversion") PrefHrefMiddleware(params, usr) @@ -281,8 +281,8 @@ mannequin.delete_inventory(TRUE) update_preview_mob(mannequin) - COMPILE_OVERLAYS(mannequin) - + mannequin.ImmediateOverlayUpdate() + var/mutable_appearance/MA = new(mannequin) south_preview.appearance = MA south_preview.dir = SOUTH diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm index 562de3be08..28251d54d4 100644 --- a/code/modules/shuttles/shuttle_console.dm +++ b/code/modules/shuttles/shuttle_console.dm @@ -10,7 +10,7 @@ var/skip_act = FALSE var/tgui_subtemplate = "ShuttleControlConsoleDefault" - var/ai_control = FALSE //VOREStation Edit - AI/Borgs shouldn't really be flying off in ships without crew help + var/ai_control = TRUE //VOREStation Edit - AI/Borgs shouldn't really be flying off in ships without crew help //ChompStation Edit: Flying is better prevented by restricting the helm console if wanted. This is only an unnecessary nuisance that also breaks various other uses for the shuttle console. /obj/machinery/computer/shuttle_control/attack_hand(user as mob) if(..(user)) diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index 6a48eb198d..1a0bd6271b 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -8,6 +8,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/glue_bone + surgery_name = "Glue Bone" allowed_tools = list( /obj/item/weapon/surgical/bonegel = 100 ) @@ -52,6 +53,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/set_bone + surgery_name = "Set Bone" allowed_tools = list( /obj/item/weapon/surgical/bonesetter = 100 ) @@ -98,6 +100,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/mend_skull + surgery_name = "Mend Skull" allowed_tools = list( /obj/item/weapon/surgical/bonesetter = 100 ) @@ -139,6 +142,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/finish_bone + surgery_name = "Finish Mending Bone" allowed_tools = list( /obj/item/weapon/surgical/bonegel = 100 ) @@ -182,6 +186,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/clamp_bone + surgery_name = "Clamp Bone" allowed_tools = list( /obj/item/weapon/surgical/bone_clamp = 100 ) @@ -218,4 +223,4 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!" , \ "Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!") - affected.createwound(BRUISE, 5) \ No newline at end of file + affected.createwound(BRUISE, 5) diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index d69c456f7c..c172b9bc44 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -3,6 +3,7 @@ // GENERIC RIBCAGE SURGERY // ////////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased + surgery_name = "Open Encased" priority = 2 can_infect = 1 blood_level = 1 @@ -21,6 +22,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/saw + surgery_name = "Cut Bone" allowed_tools = list( /obj/item/weapon/surgical/circular_saw = 100, \ /obj/item/weapon/material/knife/machete/hatchet = 75 @@ -66,10 +68,11 @@ affected.fracture() /////////////////////////////////////////////////////////////// -// Rib Opening Surgery +// Bone Opening Surgery /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/retract + surgery_name = "Retract Bone" allowed_tools = list( /obj/item/weapon/surgical/retractor = 100 ) @@ -119,10 +122,11 @@ affected.fracture() /////////////////////////////////////////////////////////////// -// Rib Closing Surgery +// Retracted Bone Closing Surgery /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/close + surgery_name = "Close Retracted Bone" allowed_tools = list( /obj/item/weapon/surgical/retractor = 100, ) @@ -177,10 +181,11 @@ target.rupture_lung()*/ /////////////////////////////////////////////////////////////// -// Rib Mending Surgery +// Retracted Bone Mending Surgery /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/mend + surgery_name = "Mend Retracted Bone" allowed_tools = list( /obj/item/weapon/surgical/bonegel = 100 ) @@ -222,6 +227,7 @@ // Saw/Retractor/Gel Combi-open and close. /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/advancedsaw_open + surgery_name = "Advanced Cut Bone" allowed_tools = list( /obj/item/weapon/surgical/circular_saw/manager = 100 ) @@ -230,6 +236,7 @@ min_duration = 60 max_duration = 90 + excludes_steps = list(/datum/surgery_step/open_encased/saw) /datum/surgery_step/open_encased/advancedsaw_open/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) if (!hasorgans(target)) @@ -271,6 +278,7 @@ /datum/surgery_step/open_encased/advancedsaw_mend + surgery_name = "Advanced Mend Retracted Bone" allowed_tools = list( /obj/item/weapon/surgical/circular_saw/manager = 100 ) diff --git a/code/modules/surgery/external_repair.dm b/code/modules/surgery/external_repair.dm index 4f8707e82d..3698f2d1c4 100644 --- a/code/modules/surgery/external_repair.dm +++ b/code/modules/surgery/external_repair.dm @@ -3,6 +3,7 @@ // LIMB REPAIR SURGERY // ////////////////////////////////////////////////////////////////// /datum/surgery_step/repairflesh/ + surgery_name = "Repair Flesh" priority = 1 can_infect = 1 blood_level = 1 @@ -36,6 +37,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/repairflesh/scan_injury + surgery_name = "Scan Injury" allowed_tools = list( /obj/item/weapon/autopsy_scanner = 100, /obj/item/device/analyzer = 10 @@ -86,6 +88,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/repairflesh/repair_burns + surgery_name = "Repair Burns" allowed_tools = list( /obj/item/stack/medical/advanced/ointment = 100, /obj/item/stack/medical/ointment = 50, @@ -103,8 +106,6 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) if(affected.burn_stage < 1 || !(affected.burn_dam)) return 0 - if(affected.burn_dam < affected.brute_dam) - return 0 return 1 return 0 @@ -152,6 +153,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/repairflesh/repair_brute + surgery_name = "Repair Brute" allowed_tools = list( /obj/item/stack/medical/advanced/bruise_pack = 100, /obj/item/stack/medical/bruise_pack = 50, @@ -169,8 +171,6 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) if(affected.brute_stage < 1 || !(affected.brute_dam)) return 0 - if(affected.brute_dam < affected.burn_dam) - return 0 return 1 return 0 diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm index fc10ecfcca..9ecef80252 100644 --- a/code/modules/surgery/face.dm +++ b/code/modules/surgery/face.dm @@ -4,6 +4,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/face + surgery_name = "Facial Surgery" priority = 2 req_open = 0 can_infect = 0 @@ -23,6 +24,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/cut_face + surgery_name = "Cut Face" allowed_tools = list( /obj/item/weapon/surgical/scalpel = 100, \ /obj/item/weapon/material/knife = 75, \ @@ -57,6 +59,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/face/mend_vocal + surgery_name = "Mend Vocal Cords" allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, \ /obj/item/stack/cable_coil = 75, \ @@ -89,6 +92,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/face/fix_face + surgery_name = "Fix Face" allowed_tools = list( /obj/item/weapon/surgical/retractor = 100, \ /obj/item/weapon/material/kitchen/utensil/fork = 75 @@ -123,6 +127,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/face/cauterize + surgery_name = "Cauterize Face" allowed_tools = list( /obj/item/weapon/surgical/cautery = 100, \ /obj/item/clothing/mask/smokable/cigarette = 75, \ @@ -156,4 +161,4 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user]'s hand slips, leaving a small burn on [target]'s face with \the [tool]!", \ "Your hand slips, leaving a small burn on [target]'s face with \the [tool]!") - target.apply_damage(4, BURN, affected) \ No newline at end of file + target.apply_damage(4, BURN, affected) diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index d26ea6c0c1..8f25b42328 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -29,6 +29,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/cut_open + surgery_name = "Create Incision" allowed_tools = list( /obj/item/weapon/surgical/scalpel = 100, \ /obj/item/weapon/material/knife = 75, \ @@ -73,16 +74,18 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/cut_with_laser + surgery_name = "Create Bloodless Incision" allowed_tools = list( - /obj/item/weapon/surgical/scalpel/laser3 = 95, \ - /obj/item/weapon/surgical/scalpel/laser2 = 85, \ - /obj/item/weapon/surgical/scalpel/laser1 = 75, \ + /obj/item/weapon/surgical/scalpel/laser3 = 100, \ + /obj/item/weapon/surgical/scalpel/laser2 = 100, \ + /obj/item/weapon/surgical/scalpel/laser1 = 100, \ /obj/item/weapon/melee/energy/sword = 5 ) priority = 2 req_open = 0 min_duration = 90 max_duration = 110 + excludes_steps = list(/datum/surgery_step/generic/cut_open) /datum/surgery_step/generic/cut_with_laser/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) if(..()) @@ -98,13 +101,25 @@ /datum/surgery_step/generic/cut_with_laser/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] has made a bloodless incision on [target]'s [affected.name] with \the [tool].", \ - "You have made a bloodless incision on [target]'s [affected.name] with \the [tool].",) - //Could be cleaner ... affected.open = 1 affected.createwound(CUT, 1) - affected.organ_clamp() + var/clamp_chance = 0 //I hate this. Make all laser scalpels a /laser subtype and give them a clamp_chance var??? + if(istype(tool,/obj/item/weapon/surgical/scalpel/laser1)) + clamp_chance = 75 + if(istype(tool,/obj/item/weapon/surgical/scalpel/laser2)) + clamp_chance = 85 + if(istype(tool,/obj/item/weapon/surgical/scalpel/laser3)) + clamp_chance = 95 + if(clamp_chance) + affected.organ_clamp() + user.visible_message("[user] has made a bloodless incision on [target]'s [affected.name] with \the [tool].", \ + "You have made a bloodless incision on [target]'s [affected.name] with \the [tool].",) + else + user.visible_message("[user] has made an incision on [target]'s [affected.name] with \the [tool], but blood is still escaping from the wound.", \ + "You have made an incision on [target]'s [affected.name] with \the [tool], but blood is still coming from the wound..",) + //Could be cleaner ... + spread_germs_to_organ(affected, user) /datum/surgery_step/generic/cut_with_laser/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -119,6 +134,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/incision_manager + surgery_name = "Create Prepared Incision" allowed_tools = list( /obj/item/weapon/surgical/scalpel/manager = 100 ) @@ -127,6 +143,7 @@ req_open = 0 min_duration = 80 max_duration = 120 + excludes_steps = list(/datum/surgery_step/generic/cut_open) /datum/surgery_step/generic/incision_manager/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) if(..()) @@ -165,6 +182,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/clamp_bleeders + surgery_name = "Clamp Bleeders" allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, \ /obj/item/stack/cable_coil = 75, \ @@ -204,6 +222,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/retract_skin + surgery_name = "Retract Skin" allowed_tools = list( /obj/item/weapon/surgical/retractor = 100, \ /obj/item/weapon/material/kitchen/utensil/fork = 50 @@ -264,6 +283,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/cauterize + surgery_name = "Cauterize Incision" allowed_tools = list( /obj/item/weapon/surgical/cautery = 100, \ /obj/item/clothing/mask/smokable/cigarette = 75, \ @@ -305,6 +325,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/amputate + surgery_name = "Amputate Limb" allowed_tools = list( /obj/item/weapon/surgical/circular_saw = 100, \ /obj/item/weapon/material/knife/machete/hatchet = 75 diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 402cd0a262..c3c2496cfd 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -5,6 +5,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/cavity + surgery_name = "Cavity" priority = 1 /datum/surgery_step/cavity/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -46,6 +47,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/cavity/make_space + surgery_name = "Create Cavity" allowed_tools = list( /obj/item/weapon/surgical/surgicaldrill = 100, \ /obj/item/weapon/pen = 75, \ @@ -78,6 +80,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/cavity/close_space + surgery_name = "Close Cavity" priority = 2 allowed_tools = list( /obj/item/weapon/surgical/cautery = 100, \ @@ -112,6 +115,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/cavity/place_item + surgery_name = "Implant Object" priority = 0 allowed_tools = list(/obj/item = 100) @@ -175,6 +179,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/cavity/implant_removal + surgery_name = "Remove Implant" allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, \ /obj/item/weapon/material/kitchen/utensil/fork = 20 @@ -203,49 +208,54 @@ /datum/surgery_step/cavity/implant_removal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - var/time_to_remove = 0 // CHOMPEdit: Changes surgery pass/fail on prob to a timer. - if (affected.implants.len) - var/obj/item/obj = pick(affected.implants) + var/obj/item/obj = tgui_input_list(user, "Which embedded item do you wish to remove?", "Surgery Select", affected.implants) + if(isnull(obj)) //They clicked cancel. + user.visible_message("[user] takes \the [tool] out of [target]'s [affected.name].", \ + "You take \the [tool] out of the incision on [target]'s [affected.name]." ) + return + if(!do_mob(user, target, 1)) //They moved away + to_chat(user, "You must remain close to and keep focused on your patient to conduct surgery.") + user.visible_message("[user] fails to remove anything from [target]'s [affected.name] with \the [tool]!", \ + "You fail to remove the [obj] from [target]'s [affected.name]s with \the [tool]!" ) + return if(istype(obj,/obj/item/weapon/implant)) var/obj/item/weapon/implant/imp = obj - if (imp.islegal()) - time_to_remove += 10 SECONDS // CHOMPEdit: Changes surgery pass/fail on prob to a timer. - else - time_to_remove += 20 SECONDS // CHOMPEdit: Changes surgery pass/fail on prob to a timer. + if (!imp.islegal()) //ILLEGAL IMPLANT ALERT!!!!!!!!!! + user.visible_message("[user] seems to be intently working on something within [target]'s [affected.name] with \the [tool]!", \ + "You intently begin to take [obj] out of the incision on [target]'s [affected.name]s with \the [tool]!" ) + if(!do_after(user, min_duration, target)) + user.visible_message("[user] fails to remove anything from [target]'s [affected.name] with \the [tool]!", \ + "You fail to remove the [obj] from [target]'s [affected.name]s with \the [tool]!" ) + return + + + user.visible_message("[user] takes something out of the incision on [target]'s [affected.name] with \the [tool]!", \ + "You take [obj] out of the incision on [target]'s [affected.name]s with \the [tool]!" ) + affected.implants -= obj + if(!target.has_embedded_objects()) + target.clear_alert("embeddedobject") + + BITSET(target.hud_updateflag, IMPLOYAL_HUD) + + //Handle possessive brain borers. + if(istype(obj,/mob/living/simple_mob/animal/borer)) + var/mob/living/simple_mob/animal/borer/worm = obj + if(worm.controlling) + target.release_control() + worm.detatch() + worm.leave_host() else - time_to_remove += 10 SECONDS // CHOMPEdit: Changes surgery pass/fail on prob to a timer. This else is shrapnel and the like. - - if(do_after(user, time_to_remove)) // CHOMPEdit: Changes surgery pass/fail on prob to a timer. - user.visible_message("[user] takes something out of incision on [target]'s [affected.name] with \the [tool]!", \ - "You take [obj] out of incision on [target]'s [affected.name]s with \the [tool]!" ) - affected.implants -= obj - if(!target.has_embedded_objects()) - target.clear_alert("embeddedobject") - - BITSET(target.hud_updateflag, IMPLOYAL_HUD) - - //Handle possessive brain borers. - if(istype(obj,/mob/living/simple_mob/animal/borer)) - var/mob/living/simple_mob/animal/borer/worm = obj - if(worm.controlling) - target.release_control() - worm.detatch() - worm.leave_host() - else - obj.loc = get_turf(target) - obj.add_blood(target) - obj.update_icon() - if(istype(obj,/obj/item/weapon/implant)) - var/obj/item/weapon/implant/imp = obj - imp.imp_in = null - imp.implanted = 0 - else if(istype(tool,/obj/item/device/nif)){var/obj/item/device/nif/N = tool;N.unimplant(target)} //VOREStation Add - NIF support - else // CHOMPEdit: Shouldn't hit this anymore, but leaving in just-in-case. - user.visible_message("[user] removes \the [tool] from [target]'s [affected.name].", \ - "There's something inside [target]'s [affected.name], but you just missed it this time." ) + obj.loc = get_turf(target) + obj.add_blood(target) + obj.update_icon() + if(istype(obj,/obj/item/weapon/implant)) + var/obj/item/weapon/implant/imp = obj + imp.imp_in = null + imp.implanted = 0 + else if(istype(tool,/obj/item/device/nif)){var/obj/item/device/nif/N = tool;N.unimplant(target)} //VOREStation Add - NIF support else user.visible_message("[user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ "You could not find anything inside [target]'s [affected.name]." ) diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 8a25be5b51..56c0ccccc1 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -4,6 +4,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/limb/ + surgery_name = "Limb" priority = 3 // Must be higher than /datum/surgery_step/internal req_open = 0 can_infect = 0 @@ -22,6 +23,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/limb/attach + surgery_name = "Attach Limb" allowed_tools = list(/obj/item/organ/external = 100) min_duration = 50 @@ -81,6 +83,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/limb/connect + surgery_name = "Connect Limb" allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, \ /obj/item/stack/cable_coil = 75, \ @@ -120,6 +123,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/limb/mechanize + surgery_name = "Mechanize Limb" allowed_tools = list(/obj/item/robot_parts = 100) min_duration = 80 diff --git a/code/modules/surgery/neck.dm b/code/modules/surgery/neck.dm index 6b970ad4c2..5b59075612 100644 --- a/code/modules/surgery/neck.dm +++ b/code/modules/surgery/neck.dm @@ -4,6 +4,7 @@ ////////////////////////////////////////////////////////////////////// /datum/surgery_step/brainstem + surgery_name = "Brainstem" priority = 2 req_open = 1 can_infect = 1 @@ -23,6 +24,7 @@ ///////////////////////////// /datum/surgery_step/brainstem/mend_vessels + surgery_name = "Mend Vessels" priority = 1 allowed_tools = list( /obj/item/weapon/surgical/FixOVein = 100, @@ -57,6 +59,7 @@ ///////////////////////////// /datum/surgery_step/brainstem/drill_vertebrae + surgery_name = "Drill Vertebrae" priority = 3 //Do this instead of expanding the skull cavity allowed_tools = list( /obj/item/weapon/surgical/surgicaldrill = 100, @@ -100,6 +103,7 @@ ///////////////////////////// /datum/surgery_step/brainstem/clean_chips + surgery_name = "Remove Bone Chips" priority = 3 //Do this instead of picking around for implants. allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, @@ -139,6 +143,7 @@ ///////////////////////////// /datum/surgery_step/brainstem/mend_cord + surgery_name = "Mend Spinal Cord" priority = 1 //Do this after IB. allowed_tools = list( /obj/item/weapon/surgical/FixOVein = 100, @@ -179,6 +184,7 @@ ///////////////////////////// /datum/surgery_step/brainstem/mend_vertebrae + surgery_name = "Mend Vertebrae" priority = 3 //Do this instead of fixing bones. allowed_tools = list( /obj/item/weapon/surgical/bonegel = 100, @@ -217,6 +223,7 @@ ///////////////////////////// /datum/surgery_step/brainstem/realign_tissue + surgery_name = "Realign Tissue" priority = 3 //Do this instead of searching for objects in the skull. allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, diff --git a/code/modules/surgery/organ_ripper_vr.dm b/code/modules/surgery/organ_ripper_vr.dm new file mode 100644 index 0000000000..0fa8f751c5 --- /dev/null +++ b/code/modules/surgery/organ_ripper_vr.dm @@ -0,0 +1,232 @@ +// Ripper tool. This is only for harming the patient or (in organs_internal.dm) ripping out an organ. +// This means if you want to torture someone, do medical malpractice, or harm a fresh sleeve for teaching medical, you can. + +/datum/surgery_step/generic/ripper //This is the base which should never be seen. + surgery_name = "Ripper Tool" + + priority = 3 + + blood_level = 99 //Ripper sugery gets you super bloody. + + min_duration = 60 + max_duration = 80 + excludes_steps = list(/datum/surgery_step/generic/cut_open) //These things can already do the first step! + +/datum/surgery_step/generic/ripper/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/weapon/surgical/scalpel/ripper/tool) + + if (!..()) + return 0 + + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + if(!istype(tool)) //Only rippers can use the ripper! + return 0 + + if(affected.robotic >= ORGAN_ROBOT) //You can't damage robutts. + return 0 + + return affected && affected.open != 0 && target_zone != O_MOUTH //Have to cut them open at a minimum. + +/datum/surgery_step/generic/ripper/tear_vessel + surgery_name = "Tear Blood Vessel" + allowed_tools = list( + /obj/item/weapon/surgical/scalpel/ripper = 100 + ) + +/datum/surgery_step/generic/ripper/tear_vessel/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] starts ripping into [target] with \the [tool].", \ + "You start ripping into [target] with \the [tool].") + target.custom_pain("[user] is ripping into your [target.op_stage.current_organ]!", 100) + ..() + +/datum/surgery_step/generic/ripper/tear_vessel/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] has ripped [target]'s [affected] \the [tool], blood and viscera spraying everywhere!", \ + "You have ripped [target]'s [target.op_stage.current_organ] out with \the [tool], spraying blood all through the room!") + var/datum/wound/internal_bleeding/I = new (30) //splurt. New severed artery. + affected.wounds += I + affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1) + target.drip(30) //Lose a lot of blood. + new /obj/effect/gibspawner/human(target.loc,target.dna,target.species.flesh_color,target.species.blood_color) //SPLAT. + target.emote("scream") //Hope you put them under... + +/datum/surgery_step/generic/ripper/tear_vessel/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ + "Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") + affected.createwound(BRUISE, 20) //Only bruised...Sad. + + +//Break Bone +/datum/surgery_step/generic/ripper/break_bone + surgery_name = "Break Skeletal Structure" + allowed_tools = list( + /obj/item/weapon/surgical/scalpel/ripper = 100 + ) + +/datum/surgery_step/generic/ripper/break_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts violently shifting \the [tool] in [target]'s [affected.name]!", \ + "You start violently moving the [tool] in [target]'s [affected.name]!") + target.custom_pain("[user] is ripping into your [target.op_stage.current_organ]!", 100) + ..() + +/datum/surgery_step/generic/ripper/break_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] has destroyed the bones within [target]'s [affected] with \the [tool]", \ + "You have destroyed the bones in [target]'s [affected] with \the [tool]!") + affected.fracture() + affected.createwound(BRUISE, 20) + target.emote("scream") //Hope you put them under... + +/datum/surgery_step/generic/ripper/tear_vessel/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ + "Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") + affected.createwound(BRUISE, 20) + +//Mutilate Organ + +/datum/surgery_step/generic/ripper/destroy_organ + surgery_name = "Mutilate Organ" + allowed_tools = list( + /obj/item/weapon/surgical/scalpel/ripper = 100 + ) + +/datum/surgery_step/generic/ripper/destroy_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if (!..()) + return 0 + + var/list/removable_organs = list() + for(var/organ in target.internal_organs_by_name) + var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] + if(istype(I) && I.parent_organ == target_zone) + removable_organs |= organ + + if(!removable_organs.len) + return 0 + return ..() + +/datum/surgery_step/generic/ripper/destroy_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + var/list/removable_organs = list() + for(var/organ in target.internal_organs_by_name) + var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] + if(istype(I) && I.parent_organ == target_zone) + removable_organs |= organ + + var/organ_to_destroy = tgui_input_list(user, "Which organ do you want to mutilate?", "Organ Choice", removable_organs) + + if(!organ_to_destroy) //They decided to cancel. Let's slowly pull the tool back... + to_chat(user, "You decide against mutilating any organs.") + user.visible_message("[user] starts pulling their [tool] out from [target]'s [affected.name] with \the [tool].", \ + "You start pulling your \the [tool] out of [target]'s [affected.name].") + target.custom_pain("Someone's moving something around in your [affected.name]!", 100) + else if(organ_to_destroy) + target.op_stage.current_organ = organ_to_destroy + user.visible_message("[user] starts ripping into [target]'s [target.op_stage.current_organ] with \the [tool].", \ + "You start ripping [target]'s [target.op_stage.current_organ] with \the [tool].") + target.custom_pain("Someone's ripping out your [target.op_stage.current_organ]!", 100) + ..() + + +/datum/surgery_step/generic/ripper/destroy_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(!target.op_stage.current_organ) + user.visible_message("[user] has pulled their \the [tool] from [target]'s [affected.name].", \ + "You have pulled your [tool] out from [target]'s [affected].") + + // Damage the organ! + if(target.op_stage.current_organ) + user.visible_message("[user] has ripped [target]'s [target.op_stage.current_organ] out with \the [tool].", \ + "You have ripped [target]'s [target.op_stage.current_organ] out with \the [tool].") + var/obj/item/organ/O = target.internal_organs_by_name[target.op_stage.current_organ] + if(O && istype(O)) + O.take_damage(10) + target.op_stage.current_organ = null + new /obj/effect/gibspawner/human(target.loc,target.dna,target.species.flesh_color,target.species.blood_color) + target.emote("scream") + +/datum/surgery_step/generic/ripper/destroy_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ + "Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") + affected.createwound(BRUISE, 20) + +/////////////////////////////////////////////////////////////// +// Organ Ripping Surgery +/////////////////////////////////////////////////////////////// + +/datum/surgery_step/generic/ripper/rip_organ + surgery_name = "Rip Out Organ" + + allowed_tools = list( + /obj/item/weapon/surgical/scalpel/ripper = 100 + ) + + priority = 3 + + blood_level = 3 + + min_duration = 60 + max_duration = 80 + excludes_steps = list(/datum/surgery_step/generic/cut_open) + +/datum/surgery_step/generic/ripper/rip_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if (!..()) + return 0 + + var/list/removable_organs = list() + for(var/organ in target.internal_organs_by_name) + var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] + if(istype(I) && I.parent_organ == target_zone) + removable_organs |= organ + + if(!removable_organs.len) + return 0 + + return ..() + +/datum/surgery_step/generic/ripper/rip_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + var/list/removable_organs = list() + for(var/organ in target.internal_organs_by_name) + var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] + if(istype(I) && I.parent_organ == target_zone) + removable_organs |= organ + + var/organ_to_remove = tgui_input_list(user, "Which organ do you want to tear out?", "Organ Choice", removable_organs) + if(!organ_to_remove) //They decided to cancel. Let's slowly pull the tool back... + to_chat(user, "You decide against ripping out any organs.") + user.visible_message("[user] starts pulling their [tool] out from [target]'s [affected.name] with \the [tool].", \ + "You start pulling your \the [tool] out of [target]'s [affected.name].") + target.custom_pain("Someone's moving something around in your [affected.name]!", 100) + else if(organ_to_remove) + target.op_stage.current_organ = organ_to_remove + user.visible_message("[user] starts ripping [target]'s [target.op_stage.current_organ] out with \the [tool].", \ + "You start ripping [target]'s [target.op_stage.current_organ] out with \the [tool].") + target.custom_pain("Someone's ripping out your [target.op_stage.current_organ]!", 100) + ..() + +/datum/surgery_step/generic/ripper/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(!target.op_stage.current_organ) + user.visible_message("[user] has pulled their \the [tool] from [target]'s [affected.name].", \ + "You have pulled your [tool] out from [target]'s [affected].") + + if(target.op_stage.current_organ) + user.visible_message("[user] has ripped [target]'s [target.op_stage.current_organ] out with \the [tool].", \ + "You have ripped [target]'s [target.op_stage.current_organ] out with \the [tool].") + var/obj/item/organ/O = target.internal_organs_by_name[target.op_stage.current_organ] + if(O && istype(O)) + O.removed(user) + target.op_stage.current_organ = null + new /obj/effect/gibspawner/human(target.loc,target.dna,target.species.flesh_color,target.species.blood_color) + target.emote("scream") + +/datum/surgery_step/internal/rip_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ + "Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") + affected.createwound(BRUISE, 20) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index e5f49cc922..e92010f8d3 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -78,6 +78,8 @@ if(!(I.robotic >= ORGAN_ROBOT)) user.visible_message("[user] treats damage to [target]'s [I.name] with [tool_name].", \ "You treat damage to [target]'s [I.name] with [tool_name]." ) + if(I.organ_tag == O_BRAIN && I.status == ORGAN_DEAD && target.can_defib == 0) //Let people know they still got more work to get the brain back into working order. + to_chat(user, "You fix their [I] but the neurological structure is still heavily damaged and in need of repair.") I.damage = 0 I.status = 0 if(I.organ_tag == O_EYES) @@ -105,6 +107,81 @@ if(I && I.damage > 0) I.take_damage(dam_amt,0) + + + + + +//Robo internal organ fix. For when an organic has robotic limbs. +/datum/surgery_step/fix_organic_organ_robotic //For artificial organs + allowed_tools = list( + /obj/item/stack/nanopaste = 100, + /obj/item/stack/cable_coil = 75, + /obj/item/weapon/tool/wrench = 50, + /obj/item/weapon/storage/toolbox = 10 //Percussive Maintenance + ) + + min_duration = 70 + max_duration = 90 + +/datum/surgery_step/fix_organic_organ_robotic/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(!affected) return + var/is_organ_damaged = 0 + for(var/obj/item/organ/I in affected.internal_organs) + if(I.damage > 0 && (I.robotic >= ORGAN_ROBOT)) + is_organ_damaged = 1 + break + return affected.open != 3 && is_organ_damaged //Robots have their own code. + +/datum/surgery_step/fix_organic_organ_robotic/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + for(var/obj/item/organ/I in affected.internal_organs) + if(I && I.damage > 0) + if(I.robotic >= ORGAN_ROBOT) + user.visible_message("[user] starts mending the damage to [target]'s [I.name]'s mechanisms.", \ + "You start mending the damage to [target]'s [I.name]'s mechanisms." ) + + target.custom_pain("The pain in your [affected.name] is living hell!",1) + ..() + +/datum/surgery_step/fix_organic_organ_robotic/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + for(var/obj/item/organ/I in affected.internal_organs) + if(I && I.damage > 0) + if(I.robotic >= ORGAN_ROBOT) + user.visible_message("[user] repairs [target]'s [I.name] with [tool].", \ + "You repair [target]'s [I.name] with [tool]." ) + I.damage = 0 + if(I.organ_tag == O_EYES) + target.sdisabilities &= ~BLIND + +/datum/surgery_step/fix_organic_organ_robotic/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + user.visible_message("[user]'s hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!", \ + "Your hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!") + + target.adjustBruteLoss(5) + + for(var/obj/item/organ/I in affected.internal_organs) + if(I) + I.take_damage(rand(3,5),0) + + +//Robo limb fix end + + /////////////////////////////////////////////////////////////// // Organ Detaching Surgery /////////////////////////////////////////////////////////////// @@ -175,13 +252,14 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/internal/remove_organ + surgery_name = "Remove Organ" allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, \ /obj/item/weapon/material/kitchen/utensil/fork = 20 ) - allowed_procs = list(IS_WIRECUTTER = 75) + allowed_procs = list(IS_WIRECUTTER = 100) //FBP code also uses this, so let's be nice. Roboticists won't know to use hemostats. min_duration = 60 max_duration = 80 @@ -193,8 +271,19 @@ if(!istype(tool)) return 0 - target.op_stage.current_organ = null + var/list/removable_organs = list() + for(var/organ in target.internal_organs_by_name) + var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] + if(istype(I) && (I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) + removable_organs |= organ + if(!removable_organs.len) + return 0 + + return ..() + +/datum/surgery_step/internal/remove_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) var/list/removable_organs = list() for(var/organ in target.internal_organs_by_name) var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] @@ -202,28 +291,32 @@ removable_organs |= organ var/organ_to_remove = tgui_input_list(user, "Which organ do you want to remove?", "Organ Choice", removable_organs) - if(!organ_to_remove) - return 0 + if(!organ_to_remove) //They chose cancel! + to_chat(user, "You decide against preparing any organs for removal.") + user.visible_message("[user] starts pulling \the [tool] from [target]'s [affected]", \ + "You start pulling \the [tool] from [target]'s [affected].") target.op_stage.current_organ = organ_to_remove - return ..() -/datum/surgery_step/internal/remove_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user] starts removing [target]'s [target.op_stage.current_organ] with \the [tool].", \ "You start removing [target]'s [target.op_stage.current_organ] with \the [tool].") target.custom_pain("Someone's ripping out your [target.op_stage.current_organ]!", 100) ..() /datum/surgery_step/internal/remove_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] has removed [target]'s [target.op_stage.current_organ] with \the [tool].", \ - "You have removed [target]'s [target.op_stage.current_organ] with \the [tool].") + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(!target.op_stage.current_organ) //They chose to remove their tool instead. + user.visible_message("[user] has removed \the [tool] from [target]'s [affected].", \ + "You have removed \the [tool] from [target]'s [affected].") // Extract the organ! if(target.op_stage.current_organ) + user.visible_message("[user] has removed [target]'s [target.op_stage.current_organ] with \the [tool].", \ + "You have removed [target]'s [target.op_stage.current_organ] with \the [tool].") var/obj/item/organ/O = target.internal_organs_by_name[target.op_stage.current_organ] if(O && istype(O)) O.removed(user) - target.op_stage.current_organ = null + target.op_stage.current_organ = null /datum/surgery_step/internal/remove_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -364,65 +457,3 @@ user.visible_message("[user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!") affected.createwound(BRUISE, 20) - -/////////////////////////////////////////////////////////////// -// Organ Ripping Surgery -/////////////////////////////////////////////////////////////// - -/datum/surgery_step/internal/rip_organ - - allowed_tools = list( - /obj/item/weapon/surgical/scalpel/ripper = 100 - ) - - priority = 3 - - blood_level = 3 - - min_duration = 60 - max_duration = 80 - -/datum/surgery_step/internal/rip_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if (!..()) - return 0 - - if(!istype(tool)) - return 0 - - target.op_stage.current_organ = null - - var/list/removable_organs = list() - for(var/organ in target.internal_organs_by_name) - var/obj/item/organ/internal/I = target.internal_organs_by_name[organ] - if(istype(I) && I.parent_organ == target_zone) - removable_organs |= organ - - var/organ_to_remove = tgui_input_list(user, "Which organ do you want to remove?", "Organ Choice", removable_organs) - if(!organ_to_remove) - return 0 - - target.op_stage.current_organ = organ_to_remove - return ..() - -/datum/surgery_step/internal/rip_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] starts ripping [target]'s [target.op_stage.current_organ] out with \the [tool].", \ - "You start ripping [target]'s [target.op_stage.current_organ] out with \the [tool].") - target.custom_pain("Someone's ripping out your [target.op_stage.current_organ]!", 100) - ..() - -/datum/surgery_step/internal/rip_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] has ripped [target]'s [target.op_stage.current_organ] out with \the [tool].", \ - "You have ripped [target]'s [target.op_stage.current_organ] out with \the [tool].") - - // Extract the organ! - if(target.op_stage.current_organ) - var/obj/item/organ/O = target.internal_organs_by_name[target.op_stage.current_organ] - if(O && istype(O)) - O.removed(user) - target.op_stage.current_organ = null - -/datum/surgery_step/internal/rip_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ - "Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") - affected.createwound(BRUISE, 20) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 9cde26f240..c0c081e05b 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -8,6 +8,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/fix_vein + surgery_name = "Fix Vein" priority = 2 allowed_tools = list( /obj/item/weapon/surgical/FixOVein = 100, \ @@ -61,6 +62,7 @@ // Necrosis Surgery Step 1 /////////////////////////////////////////////////////////////// /datum/surgery_step/fix_dead_tissue //Debridement + surgery_name = "Remove Dead Tissue" priority = 2 allowed_tools = list( /obj/item/weapon/surgical/scalpel = 100, \ @@ -110,6 +112,7 @@ // Necrosis Surgery Step 2 /////////////////////////////////////////////////////////////// /datum/surgery_step/treat_necrosis + surgery_name = "Treat Necrosis" priority = 2 allowed_tools = list( /obj/item/weapon/reagent_containers/dropper = 100, @@ -187,6 +190,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/hardsuit + surgery_name = "Remove Hardsuit" allowed_tools = list( /obj/item/weapon/weldingtool = 80, /obj/item/weapon/surgical/circular_saw = 60, @@ -241,6 +245,7 @@ var/dehusk = 0 /datum/surgery_step/dehusk/ + surgery_name = "Dehusk" priority = 1 can_infect = 0 blood_level = 1 @@ -256,6 +261,7 @@ return target_zone == BP_TORSO && (HUSK in target.mutations) /datum/surgery_step/dehusk/structinitial + surgery_name = "Create Structure" allowed_tools = list( /obj/item/weapon/surgical/bioregen = 100 ) @@ -285,6 +291,7 @@ ..() /datum/surgery_step/dehusk/relocateflesh + surgery_name = "Relocate Flesh" allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, \ /obj/item/stack/cable_coil = 75, \ @@ -316,6 +323,7 @@ ..() /datum/surgery_step/dehusk/structfinish + surgery_name = "Finish Structure" allowed_tools = list( /obj/item/weapon/surgical/bioregen = 100, \ /obj/item/weapon/surgical/FixOVein = 30 @@ -357,6 +365,7 @@ ..() /datum/surgery_step/internal/detoxify + surgery_name = "Detoxify" blood_level = 1 allowed_tools = list(/obj/item/weapon/surgical/bioregen=100) min_duration = 90 @@ -385,4 +394,4 @@ "Your hand slips, failing to finish the surgery, and damaging [target] with \the [tool].") affected.createwound(CUT, 15) affected.createwound(BRUISE, 10) - ..() \ No newline at end of file + ..() diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 4f5d451bf8..14a37f39b4 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -4,6 +4,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/ + surgery_name = "Robotic Surgery" can_infect = 0 /datum/surgery_step/robotics/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -29,6 +30,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/unscrew_hatch + surgery_name = "Unscrew Hatch" allowed_tools = list( /obj/item/weapon/coin = 50, /obj/item/weapon/material/knife = 50 @@ -68,6 +70,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/open_hatch + surgery_name = "Open Hatch" allowed_tools = list( /obj/item/weapon/surgical/retractor = 100, /obj/item/weapon/material/kitchen/utensil = 50 @@ -105,6 +108,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/close_hatch + surgery_name = "Close Hatch" allowed_tools = list( /obj/item/weapon/surgical/retractor = 100, /obj/item/weapon/material/kitchen/utensil = 50 @@ -143,6 +147,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/repair_brute + surgery_name = "Repair Robotic Brute" allowed_tools = list( /obj/item/weapon/weldingtool = 100, /obj/item/weapon/pickaxe/plasmacutter = 50 @@ -188,6 +193,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/repair_burn + surgery_name = "Repair Robotic Burn" allowed_tools = list( /obj/item/stack/cable_coil = 100 ) @@ -236,6 +242,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/fix_organ_robotic //For artificial organs + surgery_name = "Fix Robotic Organ" allowed_tools = list( /obj/item/stack/nanopaste = 100, \ /obj/item/weapon/surgical/bonegel = 30, \ @@ -306,7 +313,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/detatch_organ_robotic - + surgery_name = "Detach Robotic Organ" allowed_tools = list( /obj/item/device/multitool = 100 ) @@ -321,23 +328,31 @@ if(affected.open < 3) return 0 - target.op_stage.current_organ = null + var/list/attached_organs = list() //Let's see if we have any organs able to be detached! + for(var/organ in target.internal_organs_by_name) + var/obj/item/organ/I = target.internal_organs_by_name[organ] + if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) + attached_organs |= organ - var/list/attached_organs = list() + if(!attached_organs.len) //No organs able to be detached! + return 0 + + return ..() + +/datum/surgery_step/robotics/detatch_organ_robotic/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/list/attached_organs = list() //Which organs can we detach? for(var/organ in target.internal_organs_by_name) var/obj/item/organ/I = target.internal_organs_by_name[organ] if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) attached_organs |= organ var/organ_to_remove = tgui_input_list(user, "Which organ do you want to prepare for removal?", "Organ Choice", attached_organs) - if(!organ_to_remove) - return 0 + if(!organ_to_remove) //They chose cancel! + to_chat(user, "You decide against preparing any organs for removal.") + return target.op_stage.current_organ = organ_to_remove - return ..() && organ_to_remove - -/datum/surgery_step/robotics/detatch_organ_robotic/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user] starts to decouple [target]'s [target.op_stage.current_organ] with \the [tool].", \ "You start to decouple [target]'s [target.op_stage.current_organ] with \the [tool]." ) ..() @@ -349,6 +364,7 @@ var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ] if(I && istype(I)) I.status |= ORGAN_CUT_AWAY + target.op_stage.current_organ = null /datum/surgery_step/robotics/detatch_organ_robotic/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user]'s hand slips, disconnecting \the [tool].", \ @@ -359,6 +375,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/attach_organ_robotic + surgery_name = "Attach Robotic Organ" allowed_procs = list(IS_SCREWDRIVER = 100) min_duration = 100 @@ -371,22 +388,33 @@ if(affected.open < 3) return 0 - target.op_stage.current_organ = null - - var/list/removable_organs = list() + var/list/attachable_organs = list() for(var/organ in target.internal_organs_by_name) var/obj/item/organ/I = target.internal_organs_by_name[organ] if(I && (I.status & ORGAN_CUT_AWAY) && (I.robotic >= ORGAN_ROBOT) && I.parent_organ == target_zone) - removable_organs |= organ + attachable_organs |= organ - var/organ_to_replace = tgui_input_list(user, "Which organ do you want to reattach?", "Organ Choice", removable_organs) - if(!organ_to_replace) + if(!attachable_organs.len) return 0 - target.op_stage.current_organ = organ_to_replace return ..() /datum/surgery_step/robotics/attach_organ_robotic/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + + var/list/attachable_organs = list() + for(var/organ in target.internal_organs_by_name) + var/obj/item/organ/I = target.internal_organs_by_name[organ] + if(I && (I.status & ORGAN_CUT_AWAY) && (I.robotic >= ORGAN_ROBOT) && I.parent_organ == target_zone) + attachable_organs |= organ + + var/organ_to_replace = tgui_input_list(user, "Which organ do you want to reattach?", "Organ Choice", attachable_organs) + if(!organ_to_replace) //They chose cancel! + to_chat(user, "You decide against reattaching any organs.") + return + + + target.op_stage.current_organ = organ_to_replace + user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \ "You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].") ..() @@ -398,6 +426,7 @@ var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ] if(I && istype(I)) I.status &= ~ORGAN_CUT_AWAY + target.op_stage.current_organ = null /datum/surgery_step/robotics/attach_organ_robotic/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user]'s hand slips, disconnecting \the [tool].", \ @@ -408,6 +437,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/install_mmi + surgery_name = "Install MMI" allowed_tools = list( /obj/item/device/mmi = 100 ) @@ -479,9 +509,11 @@ if(clean_name) var/okay = tgui_alert(target,"New name will be '[clean_name]', ok?", "Confirmation",list("Cancel","Ok")) if(okay == "Ok") - target.name = new_name - target.real_name = target.name - return + new_name = clean_name + + new_name = sanitizeName(new_name, allow_numbers = TRUE) + target.name = new_name + target.real_name = target.name /datum/surgery_step/robotics/install_mmi/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user]'s hand slips.", \ @@ -492,6 +524,7 @@ */ /datum/surgery_step/robotics/install_nymph + surgery_name = "Install Nymph" allowed_tools = list( /obj/item/weapon/holder/diona = 100 ) diff --git a/code/modules/surgery/slimes.dm b/code/modules/surgery/slimes.dm index e73633397a..84d697272c 100644 --- a/code/modules/surgery/slimes.dm +++ b/code/modules/surgery/slimes.dm @@ -3,6 +3,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/slime + surgery_name = "Slime Surgery" is_valid_target(mob/living/simple_mob/slime/target) return istype(target, /mob/living/simple_mob/slime/) @@ -12,6 +13,7 @@ /datum/surgery_step/slime/cut_flesh + surgery_name = "Cut Flesh" allowed_tools = list( /obj/item/weapon/surgical/scalpel = 100, \ /obj/item/weapon/material/knife = 75, \ @@ -40,6 +42,7 @@ /datum/surgery_step/slime/cut_innards + surgery_name = "Cut Innards" allowed_tools = list( /obj/item/weapon/surgical/scalpel = 100, \ /obj/item/weapon/material/knife = 75, \ @@ -68,6 +71,7 @@ /datum/surgery_step/slime/saw_core + surgery_name = "Remove Core" allowed_tools = list( /obj/item/weapon/surgical/circular_saw = 100, \ /obj/item/weapon/material/knife/machete/hatchet = 75 @@ -97,4 +101,4 @@ /datum/surgery_step/slime/saw_core/fail_step(mob/living/user, mob/living/simple_mob/slime/target, target_zone, obj/item/tool) var/datum/gender/T = gender_datums[user.get_visible_gender()] user.visible_message("[user]'s hand slips, causing [T.him] to miss the core!", \ - "Your hand slips, causing you to miss the core!") \ No newline at end of file + "Your hand slips, causing you to miss the core!") diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index e6e4554090..8c13af59d3 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -24,8 +24,13 @@ // evil infection stuff that will make everyone hate me var/can_infect = 0 - //How much blood this step can get on surgeon. 1 - hands, 2 - full body. + // How much blood this step can get on surgeon. 1 - hands, 2 - full body. var/blood_level = 0 + // What the surgery will be called in the rare event of multiple surgery steps being shown to the user. + var/surgery_name = "CONTACT A DEVELOPER TO NAME THIS STEP." + // If the surgery stops you from being able to perform another surgery. + var/list/excludes_steps = list() + //returns how well tool is suited for this step /datum/surgery_step/proc/tool_quality(obj/item/tool) @@ -134,49 +139,90 @@ if(!istype(M)) return 0 if (user.a_intent == I_HURT) //check for Hippocratic Oath + //Insert intentional hurt medical code here. return 0 var/zone = user.zone_sel.selecting if(zone in M.op_stage.in_progress) //Can't operate on someone repeatedly. to_chat(user, "You can't operate on this area while surgery is already in progress.") return 1 + var/obj/surface = M.get_surgery_surface(user) + if(!surface || !surface.surgery_odds) // If the surface has a chance of 0% surgery odds (ground), don't even bother trying to do surgery. + return 0 // This is meant to prevent the 'glass shard mouth 60 damage click' exploit. Also saves CPU by doing it here! + + var/list/datum/surgery_step/available_surgeries = list() for(var/datum/surgery_step/S in surgery_steps) //check if tool is right or close enough and if this step is possible if(S.tool_quality(src)) var/step_is_valid = S.can_use(user, M, zone, src) if(step_is_valid && S.is_valid_target(M)) - if(step_is_valid == SURGERY_FAILURE) // This is a failure that already has a message for failing. - return 1 - M.op_stage.in_progress += zone - S.begin_step(user, M, zone, src) //start on it - var/success = TRUE + if(step_is_valid == SURGERY_FAILURE) + continue + available_surgeries[S.surgery_name] = S //Adds the surgery name to the list and sets it equal to S. (Ex: "Cauterize" = surgery_step/cauterize) + continue - // Bad tools make it less likely to succeed. - if(!prob(S.tool_quality(src))) - success = FALSE + if(!available_surgeries.len) //No available surgeries. Failure. + return 0 - // Bad or no surface may mean failure as well. - var/obj/surface = M.get_surgery_surface() - if(!surface || !prob(surface.surgery_odds)) - success = FALSE + // Having trouble with an ASSOSCIATED LIST? or REMOVING SOMETHING FROM AN ASSOCIATED LIST? Look here for a quick guide, developed out of frustration. + // Note: This is an ultra edge case. Like, what is being done here is horrible and is so rare this should never happen again in the code. + // This block of code caused hours of suffering. - // Not staying still fails you too. - if(success) - var/calc_duration = rand(S.min_duration, S.max_duration) - if(!do_mob(user, M, calc_duration * toolspeed, zone, exclusive = TRUE)) - success = FALSE - to_chat(user, "You must remain close to and keep focused on your patient to conduct surgery.") + for(var/surgical_check_name in available_surgeries) // Get the name from available_surgeries. available_surgeries = list("NAME" = DATUM) + var/datum/surgery_step/surgical_check = available_surgeries[surgical_check_name] // We then get the datum. + if(isnull(surgical_check)) // This is here so it doesn't try to keep searching if the thing we're about to check has been deleted. + continue + if(surgical_check.excludes_steps.len) // We check for it's 'excluded_steps' list and see if it has anything in it. + for(var/removal_candidate_name in available_surgeries) // We then look in available_surgeries once again, grabbing the name. + var/datum/surgery_step/removal_candidate = available_surgeries[removal_candidate_name] // We then get the datum while searching. + if(is_path_in_list(removal_candidate.type, surgical_check.excludes_steps)) // We then check the datum and see if it's a path in the list that we want to remove. + available_surgeries -= removal_candidate_name // We then, finally, remove the surgery step. + // All of this just to make it so you are forced to do bloodless surgery with a laser scalpel. - if(success) - S.end_step(user, M, zone, src) - else - S.fail_step(user, M, zone, src) + if(M == user) // Once we determine if we can actually do a step at all, give a slight delay to self-surgery to confirm attempts. + to_chat(user, "You focus on attempting to perform surgery upon yourself.") + if(!do_after(user, 3 SECONDS, M)) + return 0 - M.op_stage.in_progress -= zone // Clear the in-progress flag. - if (ishuman(M)) - var/mob/living/carbon/human/H = M - H.update_surgery() - return 1 //don't want to do weapony things after surgery - return 0 + var/datum/surgery_step/selected_surgery + if(available_surgeries.len > 1) //More than one possible? Ask them which one. + selected_surgery = tgui_input_list(user, "Select which surgery step you wish to perform", "Surgery Select", available_surgeries) //Shows the name in the list. + else + selected_surgery = pick(available_surgeries) + + if(isnull(selected_surgery)) //They clicked 'cancel' + return 1 + selected_surgery = available_surgeries[selected_surgery] //Sets the name they selected to be the datum. + + M.op_stage.in_progress += zone + selected_surgery.begin_step(user, M, zone, src) //start on it + var/success = TRUE + + // Bad tools make it less likely to succeed. + if(!prob(selected_surgery.tool_quality(src))) + success = FALSE + + // Bad surface may mean failure as well. + if(!prob(surface.surgery_odds)) + success = FALSE + + // Not staying still fails you too. + if(success) + var/calc_duration = rand(selected_surgery.min_duration, selected_surgery.max_duration) + if(!do_mob(user, M, calc_duration * toolspeed, zone, exclusive = TRUE)) + success = FALSE + to_chat(user, "You must remain close to and keep focused on your patient to conduct surgery.") + + if(success) + selected_surgery.end_step(user, M, zone, src) + else + selected_surgery.fail_step(user, M, zone, src) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) //Gets rid of instakill mechanics. + + M.op_stage.in_progress -= zone // Clear the in-progress flag. + if (ishuman(M)) + var/mob/living/carbon/human/H = M + H.update_surgery() + return 1 //don't want to do weapony things after surgery /proc/sort_surgeries() var/gap = surgery_steps.len @@ -200,4 +246,4 @@ var/brainstem = 0 var/head_reattach = 0 var/current_organ = "organ" - var/list/in_progress = list() \ No newline at end of file + var/list/in_progress = list() diff --git a/code/modules/tgs/v5/chat_commands.dm b/code/modules/tgs/v5/chat_commands.dm index e43dfc1c31..3deb15f52c 100644 --- a/code/modules/tgs/v5/chat_commands.dm +++ b/code/modules/tgs/v5/chat_commands.dm @@ -8,6 +8,9 @@ var/afks = 0 var/active = 0 var/bellied = 0 +// var/map_name = "n/a" //CHOMP Remove we don't use this and it is causing problems with the dmb compiler. +// if(using_map && using_map.full_name) +// map_name = using_map.full_name for(var/X in GLOB.clients) var/client/C = X diff --git a/code/modules/turbolift/turbolift_map.dm b/code/modules/turbolift/turbolift_map.dm index a7262b36c4..ed32952320 100644 --- a/code/modules/turbolift/turbolift_map.dm +++ b/code/modules/turbolift/turbolift_map.dm @@ -71,9 +71,9 @@ door_y2 = ey + 1 light_x1 = ux + (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator - light_y1 = uy + (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator - light_x2 = ux + lift_size_x - (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator - light_y2 = uy + (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator + light_y1 = uy + (make_walls ? 2 : 1) //VOREStation edit: Wall-less elevator //CHOMPFixy + light_x2 = ex - (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator //CHOMPFixy + light_y2 = uy + (make_walls ? 2 : 1) //VOREStation edit: Wall-less elevator //CHOMPFixy if(SOUTH) @@ -89,14 +89,14 @@ light_x1 = ux + (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator light_y1 = uy + (make_walls ? 2 : 1) //VOREStation edit: Wall-less elevator - light_x2 = ux + lift_size_x - (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator - light_y2 = uy + lift_size_y - (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator + light_x2 = ex - (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator //CHOMPFixy + light_y2 = uy + (make_walls ? 2 : 1) //VOREStation edit: Wall-less elevator //CHOMPFixy if(EAST) - int_panel_x = ux+(make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator + int_panel_x = ux + (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator int_panel_y = uy + FLOOR(lift_size_y/2, 1) - ext_panel_x = ex+2 + ext_panel_x = ex + 2 ext_panel_y = ey door_x1 = ex + (make_walls ? 0 : 1) //VOREStation edit: Wall-less elevator @@ -104,16 +104,16 @@ door_x2 = ex + 1 door_y2 = ey - 1 - light_x1 = ux + (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator + light_x1 = ux + (make_walls ? 2 : 1) //VOREStation edit: Wall-less elevator //CHOMPFixy light_y1 = uy + (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator - light_x2 = ux + (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator - light_y2 = uy + lift_size_x - (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator + light_x2 = ux + (make_walls ? 2 : 1) //VOREStation edit: Wall-less elevator //CHOMPFixy + light_y2 = ey - (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator //CHOMPFixy if(WEST) - int_panel_x = ex-(make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator + int_panel_x = ex - (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator int_panel_y = uy + FLOOR(lift_size_y/2, 1) - ext_panel_x = ux-2 + ext_panel_x = ux - 2 ext_panel_y = uy door_x1 = ux - 1 @@ -121,10 +121,10 @@ door_x2 = ux - (make_walls ? 0 : 1) //VOREStation edit: Wall-less elevator door_y2 = ey - 1 - light_x1 = ux + lift_size_x - (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator + light_x1 = ex - (make_walls ? 2 : 1) //VOREStation edit: Wall-less elevator //CHOMPFixy light_y1 = uy + (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator - light_x2 = ux + lift_size_x - (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator - light_y2 = uy + lift_size_y - (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator + light_x2 = ex - (make_walls ? 2 : 1) //VOREStation edit: Wall-less elevator //CHOMPFixy + light_y2 = ey - (make_walls ? 1 : 0) //VOREStation edit: Wall-less elevator //CHOMPFixy // Generate each floor and store it in the controller datum. for(var/cz = uz;cz<=ez;cz++) diff --git a/code/modules/vchat/css/ss13styles.css b/code/modules/vchat/css/ss13styles.css index 9e792729be..19f63dc78e 100644 --- a/code/modules/vchat/css/ss13styles.css +++ b/code/modules/vchat/css/ss13styles.css @@ -200,6 +200,8 @@ h1.alert, h2.alert {color: #000000;} .inverted .blue {color: #6666FF;} .inverted .green {color: #44FF44;} +.pnarrate {color: #009AB2;} + /*BIG IMG.icon {width: 32px; height: 32px;}*/ img.icon {vertical-align: middle; max-height: 1em;} img.icon.bigicon {max-height: 32px;} diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index 5363814485..3859d13212 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -48,6 +48,7 @@ key = new key_type(src) var/image/I = new(icon = 'icons/obj/vehicles_vr.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs //VOREStation edit add_overlay(I) + update_icon() turn_off() //so engine verbs are correctly set /obj/vehicle/train/engine/Move(var/turf/destination) diff --git a/code/modules/vehicles/construction.dm b/code/modules/vehicles/construction.dm index bb0ca7cb0b..20adccd5f0 100644 --- a/code/modules/vehicles/construction.dm +++ b/code/modules/vehicles/construction.dm @@ -12,7 +12,6 @@ density = TRUE slowdown = 10 //It's a vehicle frame, what do you expect? w_class = 5 - pixel_x = -16 var/build_stage = 0 var/obj/item/weapon/cell/cell = null @@ -38,6 +37,7 @@ name = "all terrain vehicle assembly" desc = "The frame of an ATV." icon_state = "quad-frame" + pixel_x = -16 /obj/item/weapon/vehicle_assembly/quadbike/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) ..() @@ -143,11 +143,13 @@ user.drop_from_inventory(src) qdel(src) return + ..() /obj/item/weapon/vehicle_assembly/quadtrailer name = "all terrain trailer" desc = "The frame of a small trailer." icon_state = "quadtrailer-frame" + pixel_x = -16 /obj/item/weapon/vehicle_assembly/quadtrailer/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) ..() @@ -272,3 +274,104 @@ user.drop_from_inventory(src) qdel(src) return + +/* + * Snowmobile. + */ + +/obj/item/weapon/vehicle_assembly/snowmobile + name = "snowmobile assembly" + desc = "The frame of a snowmobile." + icon = 'icons/obj/vehicles.dmi' + icon_state = "snowmobile-frame" + +/obj/item/weapon/vehicle_assembly/snowmobile/attackby(var/obj/item/W as obj, var/mob/user as mob) + switch(build_stage) + if(0) + if(istype(W, /obj/item/stack/material/steel)) + var/obj/item/stack/material/steel/S = W + if (S.get_amount() < 6) + to_chat(user, "You need six sheets of steel to add treads to \the [src].") + return + to_chat(user, "You start to add treads to [src].") + if(do_after(user, 40) && build_stage == 0) + if(S.use(6)) + to_chat(user, "You add treads to \the [src].") + increase_step("tracked [initial(name)]") + return + + if(1) + if(istype(W, /obj/item/weapon/stock_parts/console_screen)) + user.drop_item() + qdel(W) + to_chat(user, "You add the lights to \the [src].") + increase_step() + return + + if(2) + if(istype(W, /obj/item/weapon/stock_parts/spring)) + user.drop_item() + qdel(W) + to_chat(user, "You add the control system to \the [src].") + increase_step() + return + + if(3) + if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if (C.get_amount() < 2) + to_chat(user, "You need two coils of wire to wire [src].") + return + to_chat(user, "You start to wire [src].") + if(do_after(user, 40) && build_stage == 3) + if(C.use(2)) + to_chat(user, "You wire \the [src].") + increase_step("wired [initial(name)]") + return + + if(4) + if(istype(W, /obj/item/weapon/cell)) + user.drop_item() + W.forceMove(src) + cell = W + to_chat(user, "You add the power supply to \the [src].") + increase_step("powered [initial(name)]") + return + + if(5) + if(istype(W, /obj/item/weapon/stock_parts/motor)) + user.drop_item() + qdel(W) + to_chat(user, "You add the motor to \the [src].") + increase_step() + return + + if(6) + if(istype(W, /obj/item/stack/material/plasteel)) + var/obj/item/stack/material/plasteel/PL = W + if (PL.get_amount() < 2) + to_chat(user, "You need two sheets of plasteel to add reinforcement to \the [src].") + return + to_chat(user, "You start to add reinforcement to [src].") + if(do_after(user, 40) && build_stage == 6) + if(PL.use(2)) + to_chat(user, "You add reinforcement to \the [src].") + increase_step("reinforced [initial(name)]") + return + + if(7) + if(W.is_wrench() || W.is_screwdriver()) + playsound(src, W.usesound, 50, 1) + to_chat(user, "You begin your finishing touches on \the [src].") + if(do_after(user, 20) && build_stage == 7) + playsound(src, W.usesound, 30, 1) + var/obj/vehicle/train/engine/quadbike/snowmobile/built/product = new(src) + to_chat(user, "You finish \the [product]") + product.loc = get_turf(src) + product.cell = cell + cell.forceMove(product) + cell = null + user.drop_from_inventory(src) + qdel(src) + return + ..() diff --git a/code/modules/vehicles/quad.dm b/code/modules/vehicles/quad.dm index c66b2987b0..00bedf8778 100644 --- a/code/modules/vehicles/quad.dm +++ b/code/modules/vehicles/quad.dm @@ -19,7 +19,9 @@ key_type = /obj/item/weapon/key/quadbike var/frame_state = "quad" //Custom-item proofing! + var/paint_base = 'icons/obj/vehicles_64x64.dmi' var/custom_frame = FALSE + var/datum/looping_sound/vehicle_engine/soundloop paint_color = "#ffffff" @@ -28,7 +30,10 @@ /obj/vehicle/train/engine/quadbike/New() cell = new /obj/item/weapon/cell/high(src) key = new key_type(src) + soundloop = new(list(src), FALSE) + . = ..() turn_off() + update_icon() /obj/vehicle/train/engine/quadbike/built/New() key = new key_type(src) @@ -38,6 +43,10 @@ paint_color = rgb(rand(1,255),rand(1,255),rand(1,255)) ..() +/obj/vehicle/train/engine/quadbike/Destroy() + QDEL_NULL(soundloop) + return ..() + /obj/item/weapon/key/quadbike name = "key" desc = "A keyring with a small steel key, and a blue fob reading \"ZOOM!\"." @@ -47,20 +56,28 @@ /obj/vehicle/train/engine/quadbike/Moved(atom/old_loc, direction, forced = FALSE) . = ..() //Move it move it, so we can test it test it. - if(!istype(loc, old_loc.type) && !istype(old_loc, loc.type)) //Did we move at all, and are we changing turf types? - if(istype(loc, /turf/simulated/floor/water)) - speed_mod = outdoors_speed_mod * 4 //It kind of floats due to its tires, but it is slow. - else if(istype(loc, /turf/simulated/floor/outdoors/rocks)) - speed_mod = initial(speed_mod) //Rocks are good, rocks are solid. - else if(istype(loc, /turf/simulated/floor/outdoors/dirt) || istype(loc, /turf/simulated/floor/outdoors/grass)) - speed_mod = outdoors_speed_mod //Dirt and grass are the outdoors bench mark. - else if(istype(loc, /turf/simulated/floor/outdoors/mud)) - speed_mod = outdoors_speed_mod * 1.5 //Gets us roughly 1. Mud may be fun, but it's not the best. - else if(istype(loc, /turf/simulated/floor/outdoors/snow)) - speed_mod = outdoors_speed_mod * 1.7 //Roughly a 1.25. Snow is coarse and wet and gets everywhere, especially your electric motors. - else - speed_mod = initial(speed_mod) - update_car(train_length, active_engines) + get_turf_speeds(old_loc) + handle_vehicle_icon() + +/obj/vehicle/train/engine/quadbike/proc/get_turf_speeds(atom/prev_loc) + // Same speed if turf type doesn't change + if(istype(loc, prev_loc.type) || istype(prev_loc, loc.type)) + return + if(istype(loc, /turf/simulated/floor/water)) + speed_mod = outdoors_speed_mod * 4 //It kind of floats due to its tires, but it is slow. + else if(istype(loc, /turf/simulated/floor/outdoors/rocks)) + speed_mod = initial(speed_mod) //Rocks are good, rocks are solid. + else if(istype(loc, /turf/simulated/floor/outdoors/dirt) || istype(loc, /turf/simulated/floor/outdoors/grass) || istype(loc, /turf/simulated/floor/outdoors/newdirt) || istype(loc, /turf/simulated/floor/outdoors/newdirt_nograss)) + speed_mod = outdoors_speed_mod //Dirt and grass are the outdoors bench mark. + else if(istype(loc, /turf/simulated/floor/outdoors/mud)) + speed_mod = outdoors_speed_mod * 1.5 //Gets us roughly 1. Mud may be fun, but it's not the best. + else if(istype(loc, /turf/simulated/floor/outdoors/snow)) + speed_mod = outdoors_speed_mod * 1.7 //Roughly a 1.25. Snow is coarse and wet and gets everywhere, especially your electric motors. + else + speed_mod = initial(speed_mod) + update_car(train_length, active_engines) + +/obj/vehicle/train/engine/quadbike/proc/handle_vehicle_icon() switch(dir) //Due to being a Big Boy sprite, it has to have special pixel shifting to look 'normal' when being driven. if(1) pixel_y = -6 @@ -71,7 +88,6 @@ if(8) pixel_y = 0 - /obj/vehicle/train/engine/quadbike/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/device/multitool) && open) var/new_paint = input(usr, "Please select paint color.", "Paint Color", paint_color) as color|null @@ -99,12 +115,12 @@ add_overlay(Overmob_color) return - var/image/Bodypaint = new(icon = 'icons/obj/vehicles_64x64.dmi', icon_state = "[frame_state]_a", layer = src.layer) + var/image/Bodypaint = new(icon = paint_base, icon_state = "[frame_state]_a", layer = src.layer) Bodypaint.color = paint_color add_overlay(Bodypaint) - var/image/Overmob = new(icon = 'icons/obj/vehicles_64x64.dmi', icon_state = "[frame_state]_overlay", layer = src.layer + 0.2) //over mobs - var/image/Overmob_color = new(icon = 'icons/obj/vehicles_64x64.dmi', icon_state = "[frame_state]_overlay_a", layer = src.layer + 0.2) //over the over mobs, gives the color. + var/image/Overmob = new(icon = paint_base, icon_state = "[frame_state]_overlay", layer = src.layer + 0.2) //over mobs + var/image/Overmob_color = new(icon = paint_base, icon_state = "[frame_state]_overlay_a", layer = src.layer + 0.2) //over the over mobs, gives the color. Overmob.plane = MOB_PLANE Overmob_color.plane = MOB_PLANE Overmob_color.color = paint_color @@ -152,6 +168,18 @@ var/turf/T = get_step(M, pick(throw_dirs)) M.throw_at(T, 1, 1, src) +/obj/vehicle/train/engine/quadbike/turn_on() + ..() + if(on) + src.visible_message("\The [src] rumbles to life.", "You hear something rumble deeply.") + soundloop.start() + +/obj/vehicle/train/engine/quadbike/turn_off() + if(on) + src.visible_message("\The [src] putters before turning off.", "You hear something putter slowly.") + soundloop.stop() + ..() + /* * Trailer bits and bobs. */ diff --git a/code/modules/vehicles/snowmobile.dm b/code/modules/vehicles/snowmobile.dm new file mode 100644 index 0000000000..dd45207fea --- /dev/null +++ b/code/modules/vehicles/snowmobile.dm @@ -0,0 +1,82 @@ +/obj/vehicle/train/engine/quadbike/snowmobile + name = "snowmobile" + desc = "An electric snowmobile for traversing snow and ice with ease! Other terrain, not so much." + description_info = "Use ctrl-click to quickly toggle the engine if you're adjacent. Alt-click to quickly remove keys. Click-drag yourself or another person to mount as a passenger (passengers can't drive!)." + icon = 'icons/obj/vehicles.dmi' + icon_state = "snowmobile" + + load_item_visible = 1 + speed_mod = 0.6 //Speed on non-specially-defined tiles + car_limit = 0 //No trailers. + max_buckled_mobs = 2 + active_engines = 1 + key_type = /obj/item/key/snowmobile + outdoors_speed_mod = 0.7 //The general 'outdoors' speed. I.E., the general difference you'll be at when driving outside on ideal terrain (...Snow) + frame_state = "snowmobile" //Custom-item proofing! + paint_base = 'icons/obj/vehicles.dmi' + pixel_x = 0 + latch_on_start = 0 + + var/riding_datum_type = /datum/riding/snowmobile + +/obj/item/key/snowmobile + name = "key" + desc = "A keyring with a small steel key, and an ice-blue fob reading \"CHILL\"." + icon = 'icons/obj/vehicles.dmi' + icon_state = "sno_keys" + w_class = ITEMSIZE_TINY + +/obj/vehicle/train/engine/quadbike/snowmobile/random/Initialize() + paint_color = rgb(rand(1,255),rand(1,255),rand(1,255)) + . = ..() + +/obj/vehicle/train/engine/quadbike/snowmobile/Initialize() + . = ..() + riding_datum = new riding_datum_type(src) + +/obj/vehicle/train/engine/quadbike/snowmobile/built/Initialize() + dir = 2 //To match the under construction frame + . = ..() + +/obj/vehicle/train/engine/quadbike/snowmobile/get_turf_speeds(atom/prev_loc) + // Same speed if turf type doesn't change + if(istype(loc, prev_loc.type) || istype(prev_loc, loc.type)) + return + if(istype(loc, /turf/simulated/floor/water)) + speed_mod = outdoors_speed_mod * 6 //Well that was a stupid idea wasn't it? + else if(istype(loc, /turf/simulated/floor/outdoors/rocks)) + speed_mod = initial(speed_mod) * 1.5 //Rocks are hard, hard and skids don't mix so you're relying on the treads. Basically foot speed. + else if(istype(loc, /turf/simulated/floor/outdoors/dirt) || istype(loc, /turf/simulated/floor/outdoors/grass) || istype(loc, /turf/simulated/floor/outdoors/newdirt) || istype(loc, /turf/simulated/floor/outdoors/newdirt_nograss)) + speed_mod = outdoors_speed_mod //Dirt and grass aren't strictly what this is designed for but its a baseline. + else if(istype(loc, /turf/simulated/floor/outdoors/mud)) + speed_mod = outdoors_speed_mod * 1.4 //Workable, not great though. + else if(istype(loc, /turf/simulated/floor/outdoors/snow) || istype(loc, /turf/simulated/floor/outdoors/ice)) + speed_mod = outdoors_speed_mod * 0.8 //Now we're talking! + else + speed_mod = initial(speed_mod) + update_car(train_length, active_engines) + +/obj/vehicle/train/engine/quadbike/snowmobile/handle_vehicle_icon() + return + +//Required for the riding datum to behave: +/obj/vehicle/train/engine/quadbike/snowmobile/MouseDrop_T(var/atom/movable/C, var/mob/user as mob) + if(ismob(C)) + if(C in buckled_mobs) + user_unbuckle_mob(C, user) + else + user_buckle_mob(C, user) + else + ..(C, user) + +/obj/vehicle/train/engine/quadbike/snowmobile/attack_hand(var/mob/user as mob) + if(user == load) + unload(load, user) + to_chat(user, "You unbuckle yourself from \the [src].") + return + if(user in buckled_mobs) + unbuckle_mob(user) + return + else if(!load && load(user, user)) + to_chat(user, "You buckle yourself to \the [src].") + return diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index 67fc0735a3..a92b9828f6 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -13,6 +13,7 @@ var/active_engines = 0 var/train_length = 0 + var/latch_on_start = 1 var/obj/vehicle/train/lead var/obj/vehicle/train/tow @@ -25,7 +26,8 @@ /obj/vehicle/train/Initialize() . = ..() for(var/obj/vehicle/train/T in orange(1, src)) - latch(T, null) + if(latch_on_start) + latch(T, null) /obj/vehicle/train/Move() var/old_loc = get_turf(src) @@ -156,7 +158,7 @@ return if (T.tow) - if(user) + if(user) to_chat(user, "[T] is already towing something.") return diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index b9eada1d12..2989dcad63 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -197,12 +197,17 @@ return FALSE if(powered && cell.charge < charge_use) return FALSE + if(on) + return FALSE on = 1 + playsound(src, 'sound/machines/vehicle/ignition.ogg', 50, 1, -3) set_light(initial(light_range)) update_icon() return TRUE /obj/vehicle/proc/turn_off() + if(!on) + return FALSE if(!mechanical) return FALSE on = 0 diff --git a/code/modules/vore/eating/belly_obj_ch.dm b/code/modules/vore/eating/belly_obj_ch.dm index 1c92a4e601..b475d67d49 100644 --- a/code/modules/vore/eating/belly_obj_ch.dm +++ b/code/modules/vore/eating/belly_obj_ch.dm @@ -80,8 +80,14 @@ //"Marking addition" = DM_FLAG_VORESPRITE_MARKING ) - var/affects_vore_sprites = TRUE + var/affects_vore_sprites = FALSE var/count_absorbed_prey_for_sprite = TRUE + var/absorbed_multiplier = 1 + var/count_liquid_for_sprite = FALSE + var/liquid_multiplier = 1 + var/count_items_for_sprite = FALSE + var/item_multiplier = 1 + var/health_impacts_size = TRUE var/resist_triggers_animation = TRUE var/size_factor_for_sprite = 1 var/belly_sprite_to_affect = "stomach" @@ -99,7 +105,32 @@ var/belly_fullness = 0 for(var/mob/living/M in src) if(count_absorbed_prey_for_sprite || !M.absorbed) - belly_fullness += M.size_multiplier + var/fullness_to_add = M.size_multiplier + fullness_to_add *= M.mob_size / 20 + if(M.absorbed) + fullness_to_add *= absorbed_multiplier + if(health_impacts_size) + fullness_to_add *= M.health / M.getMaxHealth() + belly_fullness += fullness_to_add + if(count_liquid_for_sprite) + belly_fullness += (reagents.total_volume / 100) * liquid_multiplier + if(count_items_for_sprite) + for(var/obj/item/I in src) + var/fullness_to_add = 0 + if(I.w_class == ITEMSIZE_TINY) + fullness_to_add = ITEMSIZE_COST_TINY + else if(I.w_class == ITEMSIZE_SMALL) + fullness_to_add = ITEMSIZE_COST_SMALL + else if(I.w_class == ITEMSIZE_NORMAL) + fullness_to_add = ITEMSIZE_COST_NORMAL + else if(I.w_class == ITEMSIZE_LARGE) + fullness_to_add = ITEMSIZE_COST_LARGE + else if(I.w_class == ITEMSIZE_HUGE) + fullness_to_add = ITEMSIZE_COST_HUGE + else + fullness_to_add = ITEMSIZE_COST_NO_CONTAINER + fullness_to_add /= 32 + belly_fullness += fullness_to_add * item_multiplier belly_fullness *= size_factor_for_sprite return belly_fullness @@ -130,6 +161,8 @@ owner.nutrition -= gen_cost for(var/reagent in generated_reagents) reagents.add_reagent(reagent, generated_reagents[reagent]) + if(count_liquid_for_sprite) + owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. //////////////////////////// REAGENT_DIGEST //////////////////////// diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 3048af712f..d6493b3842 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -55,6 +55,8 @@ var/next_emote = 0 // When we're supposed to print our next emote, as a world.time var/selective_preference = DM_DIGEST // Which type of selective bellymode do we default to? var/special_entrance_sound // CHOMPEdit: Mob specific custom entry sound set by mob's init_vore when applicable + var/slow_digestion = FALSE // CHOMPEdit: Gradual corpse digestion + var/slow_brutal = FALSE // CHOMPEdit: Gradual corpse digestion: Stumpy's Special // Generally just used by AI var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location @@ -69,7 +71,7 @@ //Actual full digest modes var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ABSORB,DM_DRAIN,DM_SELECT,DM_UNABSORB,DM_HEAL,DM_SHRINK,DM_GROW,DM_SIZE_STEAL,DM_EGG) //Digest mode addon flags - var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS, "Muffles" = DM_FLAG_THICKBELLY, "Affect Worn Items" = DM_FLAG_AFFECTWORN, "Jams Sensors" = DM_FLAG_JAMSENSORS, "Complete Absorb" = DM_FLAG_FORCEPSAY) + var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS, "Muffles" = DM_FLAG_THICKBELLY, "Affect Worn Items" = DM_FLAG_AFFECTWORN, "Jams Sensors" = DM_FLAG_JAMSENSORS, "Complete Absorb" = DM_FLAG_FORCEPSAY, "Slow Body Digestion" = DM_FLAG_SLOWBODY) //CHOMPEdit //Item related modes var/tmp/static/list/item_digest_modes = list(IM_HOLD,IM_DIGEST_FOOD,IM_DIGEST,IM_DIGEST_PARALLEL) @@ -258,6 +260,12 @@ "vore_sprite_flags", "affects_vore_sprites", "count_absorbed_prey_for_sprite", + "absorbed_multiplier", + "count_liquid_for_sprite", + "liquid_multiplier", + "count_items_for_sprite", + "item_multiplier", + "health_impacts_size", "resist_triggers_animation", "size_factor_for_sprite", "belly_sprite_to_affect", @@ -266,7 +274,9 @@ "autotransferlocation", "autotransfer_enabled", "autotransfer_min_amount", - "autotransfer_max_amount", //CHOMP end of variables from CHOMP + "autotransfer_max_amount", + "slow_digestion", + "slow_brutal", //CHOMP end of variables from CHOMP "egg_type", "save_digest_mode" ) @@ -311,7 +321,8 @@ return //Someone dropping something (or being stripdigested) //Generic entered message - to_chat(owner,"[thing] slides into your [lowertext(name)].") + if(!owner.mute_entry) //CHOMPEdit + to_chat(owner,"[thing] slides into your [lowertext(name)].") //Sound w/ antispam flag setting if(vore_sound && !recent_sound) @@ -353,6 +364,8 @@ //Stop AI processing in bellies if(M.ai_holder) M.ai_holder.go_sleep() + else if(count_items_for_sprite) //CHOMPEdit - If this is enabled also update fullness for non-living things + owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. if(istype(thing, /obj/item/capture_crystal)) //CHOMPEdit: Capture crystal occupant gets to see belly text too. var/obj/item/capture_crystal/CC = thing if(CC.bound_mob && desc) @@ -381,6 +394,8 @@ if((L.stat != DEAD) && L.ai_holder) L.ai_holder.go_wake() if(isitem(thing) && !isbelly(thing.loc)) //CHOMPEdit: Digest stage effects. Don't bother adding overlays to stuff that won't make it back out. + if(count_items_for_sprite) //CHOMPEdit - If this is enabled also update fullness for non-living things + owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. var/obj/item/I = thing if(I.gurgled) I.cut_overlay(gurgled_overlays[I.gurgled_color]) //No double-overlay for worn items. @@ -1299,6 +1314,12 @@ dupe.vore_sprite_flags = vore_sprite_flags dupe.affects_vore_sprites = affects_vore_sprites dupe.count_absorbed_prey_for_sprite = count_absorbed_prey_for_sprite + dupe.absorbed_multiplier = absorbed_multiplier + dupe.count_liquid_for_sprite = count_liquid_for_sprite + dupe.liquid_multiplier = liquid_multiplier + dupe.count_items_for_sprite = count_items_for_sprite + dupe.item_multiplier = item_multiplier + dupe.health_impacts_size = health_impacts_size dupe.resist_triggers_animation = resist_triggers_animation dupe.size_factor_for_sprite = size_factor_for_sprite dupe.belly_sprite_to_affect = belly_sprite_to_affect @@ -1307,7 +1328,9 @@ dupe.autotransferlocation = autotransferlocation dupe.autotransfer_enabled = autotransfer_enabled dupe.autotransfer_min_amount = autotransfer_min_amount - dupe.autotransfer_max_amount = autotransfer_max_amount //CHOMP end of variables from CHOMP + dupe.autotransfer_max_amount = autotransfer_max_amount + dupe.slow_digestion = slow_digestion + dupe.slow_brutal = slow_brutal //CHOMP end of variables from CHOMP dupe.belly_fullscreen = belly_fullscreen dupe.disable_hud = disable_hud diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm index ce45aeada3..b55843a96c 100644 --- a/code/modules/vore/eating/bellymodes_datum_vr.dm +++ b/code/modules/vore/eating/bellymodes_datum_vr.dm @@ -29,15 +29,20 @@ GLOBAL_LIST_INIT(digest_modes, list()) //Person just died in guts! if(L.stat == DEAD) - if(L.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(!L.digestion_in_progress) //CHOMPEdit Start + if(L.is_preference_enabled(/datum/client_preference/digestion_noises)) + if(!B.fancy_vore) + SEND_SOUND(L, sound(get_sfx("classic_death_sounds"))) + else + SEND_SOUND(L, sound(get_sfx("fancy_death_prey"))) + B.handle_digestion_death(L) if(!B.fancy_vore) - SEND_SOUND(L, sound(get_sfx("classic_death_sounds"))) - else - SEND_SOUND(L, sound(get_sfx("fancy_death_prey"))) - B.handle_digestion_death(L) - if(!B.fancy_vore) - return list("to_update" = TRUE, "soundToPlay" = sound(get_sfx("classic_death_sounds"))) - return list("to_update" = TRUE, "soundToPlay" = sound(get_sfx("fancy_death_pred"))) + return list("to_update" = TRUE, "soundToPlay" = sound(get_sfx("classic_death_sounds"))) + return list("to_update" = TRUE, "soundToPlay" = sound(get_sfx("fancy_death_pred"))) + else + B.handle_digestion_death(L) + if(!L) + return //CHOMPEdit End //CHOMPEDIT: Parasitic digestion immunity hook, used to be a synx istype check but this is more optimized. if(L.parasitic) @@ -47,11 +52,14 @@ GLOBAL_LIST_INIT(digest_modes, list()) L.adjust_nutrition(paratox) L.adjustBruteLoss(-paratox*2) //Should automaticaly clamp to 0 L.adjustFireLoss(-paratox*2) //Should automaticaly clamp to 0 + if(B.health_impacts_size) //CHOMPEdit - Health probably changed so... + B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. return //CHOMPedit end // Deal digestion damage (and feed the pred) + var/old_health = L.health; //CHOMPEdit - Store old health for the hard crit calculation var/old_brute = L.getBruteLoss() var/old_burn = L.getFireLoss() var/old_oxy = L.getOxyLoss() @@ -62,15 +70,22 @@ GLOBAL_LIST_INIT(digest_modes, list()) L.adjustOxyLoss(B.digest_oxy) L.adjustToxLoss(B.digest_tox) L.adjustCloneLoss(B.digest_clone) + //CHOMPEdit start - Send a message when a prey-thing enters hard crit. + if(iscarbon(L) && old_health > 0 && L.health <= 0) + to_chat(B.owner, "You feel [L] go still within your [lowertext(B.name)].") + //CHOMPEdit end var/actual_brute = L.getBruteLoss() - old_brute var/actual_burn = L.getFireLoss() - old_burn var/actual_oxy = L.getOxyLoss() - old_oxy var/actual_tox = L.getToxLoss() - old_tox var/actual_clone = L.getCloneLoss() - old_clone var/damage_gain = (actual_brute + actual_burn + actual_oxy/2 + actual_tox + actual_clone*2)*(B.nutrition_percent / 100) - + if(B.slow_digestion) //CHOMPEdit + damage_gain = damage_gain * 0.5 var/offset = (1 + ((L.weight - 137) / 137)) // 130 pounds = .95 140 pounds = 1.02 var/difference = B.owner.size_multiplier / L.size_multiplier + if(B.health_impacts_size) //CHOMPEdit - Health probably changed so... + B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. if(isrobot(B.owner)) if(B.reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && B.reagents.total_volume < B.reagents.maximum_volume) //CHOMPedit start: digestion producing reagents var/mob/living/silicon/robot/R = B.owner @@ -127,6 +142,7 @@ GLOBAL_LIST_INIT(digest_modes, list()) /datum/digest_mode/drain/shrink/process_mob(obj/belly/B, mob/living/L) if(L.size_multiplier > B.shrink_grow_size) L.resize(L.size_multiplier - 0.01) // Shrink by 1% per tick + B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. . = ..() /datum/digest_mode/grow @@ -136,6 +152,7 @@ GLOBAL_LIST_INIT(digest_modes, list()) /datum/digest_mode/grow/process_mob(obj/belly/B, mob/living/L) if(L.size_multiplier < B.shrink_grow_size) L.resize(L.size_multiplier + 0.01) // Shrink by 1% per tick + B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. /datum/digest_mode/drain/sizesteal id = DM_SIZE_STEAL @@ -144,6 +161,7 @@ GLOBAL_LIST_INIT(digest_modes, list()) if(L.size_multiplier > B.shrink_grow_size && B.owner.size_multiplier < 2) //Grow until either pred is large or prey is small. B.owner.resize(B.owner.size_multiplier + 0.01) //Grow by 1% per tick. L.resize(L.size_multiplier - 0.01) //Shrink by 1% per tick + B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. . = ..() /datum/digest_mode/heal @@ -161,11 +179,15 @@ GLOBAL_LIST_INIT(digest_modes, list()) if(O.brute_dam > 0 || O.burn_dam > 0) //Making sure healing continues until fixed. O.heal_damage(0.5, 0.5, 0, 1) // Less effective healing as able to fix broken limbs B.owner.adjust_nutrition(-5) // More costly for the pred, since metals and stuff + if(B.health_impacts_size) //CHOMPEdit - Health probably changed so... + B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. if(L.health < L.maxHealth) L.adjustToxLoss(-2) L.adjustOxyLoss(-2) L.adjustCloneLoss(-1) B.owner.adjust_nutrition(-1) // Normal cost per old functionality + if(B.health_impacts_size) //CHOMPEdit - Health probably changed so... + B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. if(B.owner.nutrition > 90 && (L.health < L.maxHealth) && !H.isSynthetic()) L.adjustBruteLoss(-2.5) L.adjustFireLoss(-2.5) @@ -173,6 +195,8 @@ GLOBAL_LIST_INIT(digest_modes, list()) L.adjustOxyLoss(-5) L.adjustCloneLoss(-1.25) B.owner.adjust_nutrition(-2) + if(B.health_impacts_size) //CHOMPEdit - Health probably changed so... + B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. if(L.nutrition <= 400) L.adjust_nutrition(1) else if(B.owner.nutrition > 90 && (L.nutrition <= 400)) @@ -251,6 +275,7 @@ GLOBAL_LIST_INIT(digest_modes, list()) /datum/digest_mode/selective //unselectable, "smart" digestion mode for mobs only id = DM_SELECT + noise_chance = 50 /datum/digest_mode/selective/process_mob(obj/belly/B, mob/living/L) @@ -286,3 +311,37 @@ GLOBAL_LIST_INIT(digest_modes, list()) else tempmode = GLOB.digest_modes[DM_DRAIN] // Otherwise drain. return tempmode.process_mob(B, L) + +/datum/digest_mode/selective/proc/get_selective_mode(obj/belly/B, mob/living/L) + var/tempmode = DM_HOLD // Default to Hold in case of big oof fallback + //if not absorbed, see if they're food + switch(L.selective_preference) // First, we respect prey prefs + if(DM_DIGEST) + if(L.digestable) + tempmode = DM_DIGEST // They want to be digested and can be, Digest + else + tempmode = DM_DRAIN // They want to be digested but can't be! Drain. + if(DM_ABSORB) + if(L.absorbable) + tempmode = DM_ABSORB // They want to be absorbed and can be. Absorb. + else + tempmode = DM_DRAIN // They want to be absorbed but can't be! Drain. + if(DM_DRAIN) + tempmode = DM_DRAIN // They want to be drained. Drain. + if(DM_DEFAULT) + switch(B.selective_preference) // They don't actually care? Time for our own preference. + if(DM_DIGEST) + if(L.digestable) + tempmode = DM_DIGEST // We prefer digestion and they're digestible? Digest + else if(L.absorbable) + tempmode = DM_ABSORB // If not digestible, are they absorbable? Then absorb. + else + tempmode = DM_DRAIN // Otherwise drain. + if(DM_ABSORB) + if(L.absorbable) + tempmode = DM_ABSORB // We prefer absorption and they're absorbable? Absorb. + else if(L.digestable) + tempmode = DM_DIGEST // If not absorbable, are they digestible? Then digest. + else + tempmode = DM_DRAIN // Otherwise drain. + return tempmode diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 9146c76f51..3147b04ffd 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -161,12 +161,8 @@ to_chat(M, "[formatted_message]") else if (digest_mode == DM_SELECT) - if (M.digestable) - EL = emote_lists[DM_DIGEST] - else if (M.absorbable) - EL = emote_lists[DM_ABSORB] - else - EL = emote_lists[DM_HOLD] + var/datum/digest_mode/selective/DM_S = GLOB.digest_modes[DM_SELECT] + EL = emote_lists[DM_S.get_selective_mode(src, M)] else if(digest_mode == DM_DIGEST && !M.digestable) EL = emote_lists[DM_HOLD] // Use Hold's emote list if we're indigestible @@ -298,6 +294,33 @@ return did_an_item /obj/belly/proc/handle_digestion_death(mob/living/M) + if(slow_digestion) //CHOMPAdd Start: Gradual corpse digestion + if(!M.digestion_in_progress) + M.digestion_in_progress = TRUE + if(M.health > -36 || (ishuman(M) && M.health > -136)) + to_chat(M, "(Your predator has enabled gradual body digestion. Stick around for a second round of churning to reach the true finisher.)") + if(M.health < M.maxHealth * -1) //Siplemobs etc + if(ishuman(M)) + if(M.health < (M.maxHealth * -1) -100) //Spacemans can go much deeper. Jank but maxHealth*-2 doesn't work with flat standard -100hp death threshold. + if(slow_brutal) + var/mob/living/carbon/human/P = M + var/vitals_only = TRUE + for(var/obj/item/organ/external/E in P.organs) + if(!E.vital) + vitals_only = FALSE + if(!LAZYLEN(E.children)) + E.droplimb(TRUE, DROPLIMB_EDGE) + qdel(E) + break + continue + if(vitals_only) + M.digestion_in_progress = FALSE + else + M.digestion_in_progress = FALSE + else + M.digestion_in_progress = FALSE + if(M.digestion_in_progress) + return //CHOMPAdd End var/digest_alert_owner = pick(digest_messages_owner) var/digest_alert_prey = pick(digest_messages_prey) var/compensation = M.maxHealth / 5 //Dead body bonus. diff --git a/code/modules/vore/eating/contaminate_vr.dm b/code/modules/vore/eating/contaminate_vr.dm index 10d852ee86..9321f2b2df 100644 --- a/code/modules/vore/eating/contaminate_vr.dm +++ b/code/modules/vore/eating/contaminate_vr.dm @@ -80,20 +80,6 @@ var/list/gurgled_overlays = list( else ..() -////////////// -// Special things that happen when wet -////////////// -/obj/item/weapon/storage/box/open(mob/user as mob) - if(gurgled) - to_chat(usr, "The soggy box falls apart in your hands.") - var/turf/T = get_turf(src) - for(var/obj/item/I in contents) - remove_from_storage(I, T) - new/obj/effect/decal/cleanable/molten_item(T) - qdel(src) - return - ..() - ////////////// // Special handling of gurgle_contaminate ////////////// diff --git a/code/modules/vore/eating/living_ch.dm b/code/modules/vore/eating/living_ch.dm index 047edbdf7a..e74336cf49 100644 --- a/code/modules/vore/eating/living_ch.dm +++ b/code/modules/vore/eating/living_ch.dm @@ -6,7 +6,7 @@ var/vore_footstep_volume = 0 //Variable volume for a mob, updated every 5 steps where a footstep hasnt occurred. var/vore_footstep_chance = 0 var/vore_footstep_volume_cooldown = 0 //goes up each time a step isnt heard, and will proc update of list of viable bellies to determine the most filled and loudest one to base audio on. - + var/mute_entry = FALSE //Toggleable vorgan entry logs. var/parasitic = FALSE //Digestion immunity and nutrition leeching variable // CHOMP vore icons refactor (Now on living) @@ -111,7 +111,7 @@ set desc = "Transfer liquid from an organ to another or stomach, or into another person or container." set popup_menu = FALSE - if(!checkClickCooldown() || incapacitated(INCAPACITATION_ALL)) + if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT)) return FALSE var/mob/living/user = usr @@ -154,6 +154,8 @@ user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] into their [lowertext(TB.name)].") add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s [TB]") //Bonus for staff so they can see if people have abused transfer and done pref breaks RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_VORE, 1, 0, TB) + if(RTB.count_liquid_for_sprite || TB.count_liquid_for_sprite) + update_fullness() else if(TR.receive_reagents == FALSE) to_chat(user, "This person's prefs dont allow that!") @@ -176,6 +178,10 @@ RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_VORE, 1, 0, TB) add_attack_logs(user,TR,"Transfered reagents from [TG]'s [RTB] to [TR]'s [TB]") //Bonus for staff so they can see if people have abused transfer and done pref breaks + if(RTB.count_liquid_for_sprite) + update_fullness() + if(TB.count_liquid_for_sprite) + TR.update_fullness() if("Stomach") @@ -191,6 +197,8 @@ user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [lowertext(RTB.name)] into their stomach.") RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_INGEST, 1, 0, null) add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s Stomach") + if(RTB.count_liquid_for_sprite) + update_fullness() else if(TR.receive_reagents == FALSE) to_chat(user, "This person's prefs dont allow that!") @@ -204,6 +212,8 @@ RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_INGEST, 1, 0, null) add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s Stomach") //Bonus for staff so they can see if people have abused transfer and done pref breaks + if(RTB.count_liquid_for_sprite) + update_fullness() if("Container") var/list/choices = list() @@ -222,10 +232,14 @@ RTB.reagents.vore_trans_to_con(T, transfer_amount, 1, 0) add_attack_logs(user, T,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to a [T]") //Bonus for staff so they can see if people have abused transfer and done pref breaks + if(RTB.count_liquid_for_sprite) + update_fullness() if("Floor") if(RTB.reagentid == "water") return var/amount_removed = RTB.reagents.remove_any(transfer_amount) + if(RTB.count_liquid_for_sprite) + update_fullness() var/puddle_amount = round(amount_removed/5) if(puddle_amount == 0) @@ -270,3 +284,9 @@ return TRUE to_chat(src, "There is no suitable belly for rubs.") return FALSE + +/mob/living/proc/mute_entry() + set name = "Mute Vorgan Entrance" + set category = "Preferences" + set desc = "Mute the chatlog messages when something enters a vore belly." + mute_entry = !mute_entry diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 2bc2c70898..1be038d66d 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -51,6 +51,7 @@ var/selective_preference = DM_DEFAULT // Preference for selective bellymode var/appendage_color = "#e03997" //Default pink. Used for the 'long_vore' trait. var/appendage_alt_setting = FALSE // Dictates if 'long_vore' user pulls prey to them or not. 1 = user thrown towards target. + var/digestion_in_progress = FALSE // CHOMPEdit: Gradual corpse gurgles var/regen_sounds = list( 'sound/effects/mob_effects/xenochimera/regen_1.ogg', 'sound/effects/mob_effects/xenochimera/regen_2.ogg', @@ -425,7 +426,7 @@ if(!istype(tasted)) return - if(!checkClickCooldown() || incapacitated(INCAPACITATION_ALL)) + if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT)) //CHOMPEdit return setClickCooldown(DEFAULT_ATTACK_COOLDOWN) @@ -465,7 +466,7 @@ if(!istype(smelled)) return - if(!checkClickCooldown() || incapacitated(INCAPACITATION_ALL)) + if(!checkClickCooldown() || incapacitated(INCAPACITATION_KNOCKOUT)) //CHOMPEdit return setClickCooldown(DEFAULT_ATTACK_COOLDOWN) @@ -513,7 +514,7 @@ muffled = FALSE //Removes Muffling forceMove(get_turf(src)) //Just move me up to the turf, let's not cascade through bellies, there's been a problem, let's just leave. for(var/mob/living/simple_mob/SA in range(10)) - SA.prey_excludes[src] = world.time + LAZYSET(SA.prey_excludes, src, world.time) log_and_message_admins("[key_name(src)] used the OOC escape button to get out of [key_name(B.owner)] ([B.owner ? "JMP" : "null"])") B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. @@ -796,7 +797,7 @@ if(istype(I, /obj/item/device/paicard)) var/obj/item/device/paicard/palcard = I var/mob/living/silicon/pai/pocketpal = palcard.pai - if(!pocketpal.devourable) + if(pocketpal && (!pocketpal.devourable)) to_chat(src, "\The [pocketpal] doesn't allow you to eat it.") return @@ -1055,6 +1056,14 @@ set desc = "Switch sharp/fuzzy scaling for current mob." appearance_flags ^= PIXEL_SCALE fuzzy = !fuzzy + update_transform() //CHOMPEdit + +/mob/living/proc/center_offset() //CHOMPAdd + set name = "Switch center offset mode" + set category = "Preferences" + set desc = "Switch sprite center offset to fix even/odd symmetry." + offset_override = !offset_override + update_transform() /mob/living/examine(mob/user, infix, suffix) . = ..() diff --git a/code/modules/vore/eating/simple_animal_vr.dm b/code/modules/vore/eating/simple_animal_vr.dm index 57750679f9..7f11b715cc 100644 --- a/code/modules/vore/eating/simple_animal_vr.dm +++ b/code/modules/vore/eating/simple_animal_vr.dm @@ -1,7 +1,7 @@ ///////////////////// Simple Animal ///////////////////// /mob/living/simple_mob var/swallowTime = (3 SECONDS) //How long it takes to eat its prey in 1/10 of a second. The default is 3 seconds. - var/list/prey_excludes = list() //For excluding people from being eaten. + var/list/prey_excludes = null //For excluding people from being eaten. /mob/living/simple_mob/insidePanel() //CHOMPedit: On-demand belly loading. if(vore_active && !voremob_loaded) @@ -107,8 +107,8 @@ user.visible_message("[user] swats [src] with [O]!") release_vore_contents() for(var/mob/living/L in living_mobs(0)) //add everyone on the tile to the do-not-eat list for a while - if(!(L in prey_excludes)) // Unless they're already on it, just to avoid fuckery. - prey_excludes += L + if(!(LAZYFIND(prey_excludes, L))) // Unless they're already on it, just to avoid fuckery. + LAZYSET(prey_excludes, L, world.time) addtimer(CALLBACK(src, .proc/removeMobFromPreyExcludes, weakref(L)), 5 MINUTES) else if(istype(O, /obj/item/device/healthanalyzer)) var/healthpercent = health/maxHealth*100 @@ -119,8 +119,7 @@ /mob/living/simple_mob/proc/removeMobFromPreyExcludes(weakref/target) if(isweakref(target)) var/mob/living/L = target.resolve() - if(L) - LAZYREMOVE(prey_excludes, L) + LAZYREMOVE(prey_excludes, L) // It's fine to remove a null from the list if we couldn't resolve L /mob/living/simple_mob/proc/nutrition_heal() set name = "Nutrition Heal" diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index f9f80c2ed2..ce7a438a16 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -203,6 +203,12 @@ //CHOMP add: vore sprite options "affects_voresprite" = selected.affects_vore_sprites, "absorbed_voresprite" = selected.count_absorbed_prey_for_sprite, + "absorbed_multiplier" = selected.absorbed_multiplier, + "liquid_voresprite" = selected.count_liquid_for_sprite, + "liquid_multiplier" = selected.liquid_multiplier, + "item_voresprite" = selected.count_items_for_sprite, + "item_multiplier" = selected.item_multiplier, + "health_voresprite" = selected.health_impacts_size, "resist_animation" = selected.resist_triggers_animation, "voresprite_size_factor" = selected.size_factor_for_sprite, "belly_sprite_to_affect" = selected.belly_sprite_to_affect, @@ -1000,6 +1006,9 @@ return FALSE host.vore_selected.mode_flags ^= host.vore_selected.mode_flag_list[toggle_addon] host.vore_selected.items_preserved.Cut() //Re-evaltuate all items in belly on + host.vore_selected.slow_digestion = FALSE //CHOMPAdd + if(host.vore_selected.mode_flags & DM_FLAG_SLOWBODY) //CHOMPAdd + host.vore_selected.slow_digestion = TRUE //CHOMPAdd . = TRUE if("b_item_mode") var/list/menu_list = host.vore_selected.item_digest_modes.Copy() @@ -1552,11 +1561,41 @@ host.vore_selected.count_absorbed_prey_for_sprite = !host.vore_selected.count_absorbed_prey_for_sprite host.update_fullness() . = TRUE + if("b_absorbed_multiplier") //CHOMP Addition + var/absorbed_multiplier_input = input(user, "Set the impact absorbed prey's size have on your vore sprite. 1 means no scaling, 0.5 means absorbed prey count half as much, 2 means absorbed prey count double. (Range from 0.1 - 3)", "Absorbed Multiplier") as num|null + if(!isnull(absorbed_multiplier_input)) + host.vore_selected.absorbed_multiplier = CLAMP(absorbed_multiplier_input, 0.1, 3) + host.update_fullness() + . = TRUE + if("b_count_liquid_for_sprites") //CHOMP Addition + host.vore_selected.count_liquid_for_sprite = !host.vore_selected.count_liquid_for_sprite + host.update_fullness() + . = TRUE + if("b_liquid_multiplier") //CHOMP Addition + var/liquid_multiplier_input = input(user, "Set the impact amount of liquid reagents will have on your vore sprite. 1 means a belly with 100 reagents of fluid will count as 1 normal sized prey-thing's worth, 0.5 means liquid counts half as much, 2 means liquid counts double. (Range from 0.1 - 10)", "Liquid Multiplier") as num|null + if(!isnull(liquid_multiplier_input)) + host.vore_selected.liquid_multiplier = CLAMP(liquid_multiplier_input, 0.1, 10) + host.update_fullness() + . = TRUE + if("b_count_items_for_sprites") //CHOMP Addition + host.vore_selected.count_items_for_sprite = !host.vore_selected.count_items_for_sprite + host.update_fullness() + . = TRUE + if("b_item_multiplier") //CHOMP Addition + var/item_multiplier_input = input(user, "Set the impact items will have on your vore sprite. 1 means a belly with 8 normal-sized items will count as 1 normal sized prey-thing's worth, 0.5 means items count half as much, 2 means items count double. (Range from 0.1 - 10)", "Item Multiplier") as num|null + if(!isnull(item_multiplier_input)) + host.vore_selected.item_multiplier = CLAMP(item_multiplier_input, 0.1, 10) + host.update_fullness() + . = TRUE + if("b_health_impacts_size") //CHOMP Addition + host.vore_selected.health_impacts_size = !host.vore_selected.health_impacts_size + host.update_fullness() + . = TRUE if("b_resist_animation") //CHOMP Addition host.vore_selected.resist_triggers_animation = !host.vore_selected.resist_triggers_animation . = TRUE if("b_size_factor_sprites") //CHOMP Addition - var/size_factor_input = input(user, "Set the impact prey's size have on your vore sprite. 1 means no scaling, 0.5 means prey count half as much, 2 means prey count double. (Range from 0.1 - 3)", "Size Factor") as num|null + var/size_factor_input = input(user, "Set the impact all belly content's collective size has on your vore sprite. 1 means no scaling, 0.5 means content counts half as much, 2 means contents count double. (Range from 0.1 - 3)", "Size Factor") as num|null if(!isnull(size_factor_input)) host.vore_selected.size_factor_for_sprite = CLAMP(size_factor_input, 0.1, 3) host.update_fullness() diff --git a/code/modules/vore/fluffstuff/custom_boxes_vr.dm b/code/modules/vore/fluffstuff/custom_boxes_vr.dm index 70a1e99b45..0ae6d2d440 100644 --- a/code/modules/vore/fluffstuff/custom_boxes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_boxes_vr.dm @@ -226,6 +226,14 @@ /obj/item/clothing/head/fluff/nikki, /obj/item/clothing/under/skirt/outfit/fluff/nikki, /obj/item/clothing/shoes/fluff/nikki) + +// DefiintelyNotARock:Aku Zoles +/obj/item/weapon/storage/secure/briefcase/dealer + name = "Aku's Dealer briefcase" + desc = "A slick black briefcase with a digital lock." + starts_with = list( + /obj/item/weapon/spacecasinocash/c1000 = 3, + /obj/item/weapon/storage/dicecup/loaded = 3) /* Swimsuits, for general use, to avoid arriving to work with your swimsuit. diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm index db45b0bc46..d57456b463 100644 --- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm @@ -2477,5 +2477,56 @@ Departamental Swimsuits, for general use desc = "Cerise's hard-won belt from her glory days. Her skill might have waned since then, but her renown lives on." icon_state = "champion" item_state = null // i swear to god this works - hatterhat - + icon_override = 'icons/vore/custom_onmob_vr.dmi' + +//Sudate: Shea Corbett +/obj/item/clothing/under/fluff/greek_dress + name = "mytilenean dress" + desc = "It's a breezy, colorful two-part dress woven from linen, with the top consisting of white linen, and the skirt of rougher, sturdy fabric. It's adorned with a yellow belt and embroidered stripes in the hem, and blue highlights at the sleeves. More notably, however, it exposes the wearer's chest entirely." + + icon = 'icons/vore/custom_clothes_vr.dmi' + icon_state = "greek_dress" + worn_state = "greek_dress" + rolled_sleeves = 0 + rolled_down = 0 + + icon_override = 'icons/vore/custom_clothes_vr.dmi' + item_state = "greek_dress" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + +//JadeManique: Freyr +/obj/item/clothing/mask/fluff/freyr_mask + name = "Freyr's Mask" + desc = "A pristine white mask with antlers. Its silky to the touch, like porcelain!" + icon = 'icons/vore/custom_clothes_vr.dmi' + icon_state = "freyrmask" + icon_override = 'icons/vore/custom_onmob_vr.dmi' + item_state = "freyrmask_mob" + item_state_slots = null + body_parts_covered = FACE + flags_inv = HIDEFACE + item_flags = FLEXIBLEMATERIAL + +//codeme: Perrin Kade +/obj/item/clothing/shoes/fluff/gildedshoes_perrin + name = "gilded shoes" + desc = "Black shoes with gilding, revealing and comfortable for any wearer!" + + icon_state = "perrinshoes" + icon = 'icons/vore/custom_clothes_vr.dmi' + icon_override = 'icons/vore/custom_onmob_vr.dmi' + +/obj/item/clothing/under/fluff/gildedrobe_perrin + name = "gilded robe" + desc = "Black robe with gilding, revealing and comfortable for any wearer!" + + icon = 'icons/vore/custom_clothes_vr.dmi' + icon_state = "perrinrobes" + worn_state = "perrinrobes_s" + rolled_sleeves = 0 + rolled_down = 0 + + icon_override = 'icons/vore/custom_onmob_vr.dmi' + item_state = "perrinrobes_s" + body_parts_covered = UPPER_TORSO|LOWER_TORSO End CHOMP Removal*/ diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 97c97fb0ce..1334de6bb5 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -1449,8 +1449,7 @@ End CHOMP Removal*/ M.add_language(LANGUAGE_ECHOSONG) to_chat(M,"LANGUAGES - INITIALISED") -//thedavestdave Lucky -///I know this is pretty bodgey but if it stupid and it works it isn't stupid +//thedavestdave - Lucky /obj/item/clothing/suit/armor/combat/crusader_costume/lucky icon = 'icons/vore/custom_clothes_vr.dmi' icon_state = "luck" @@ -1516,3 +1515,42 @@ End CHOMP Removal*/ icon = 'icons/vore/custom_items_vr.dmi' item_icons = list(slot_l_hand_str = 'icons/vore/custom_items_left_hand_vr.dmi', slot_r_hand_str = 'icons/vore/custom_items_right_hand_vr.dmi') icon_state = "kyuholotar" + +//Pandora029 - Seona Young +/obj/item/toy/plushie/fluff/seona_mofuorb + name = "comically oversized fox-orb plushie" + desc = "A humongous & adorable Largo© brand stuffed-toy that resembles a mix of slime and absurdly fluffy fox. It's colored white largely, with the tips of it's fox-like ears and tail transitioning to a nice pink-ish color. Comes complete with reactive expressions, according to the label." + icon = 'icons/vore/custom_items_vr.dmi' + icon_state = "pandorba" + pokephrase = "Gecker!" + attack_verb = list("fluffed", "fwomped", "fuwa'd", "squirmshed") + +/obj/item/toy/plushie/fluff/seona_mofuorb/attack_self(mob/user as mob) + if(stored_item && opened && !searching) + searching = TRUE + if(do_after(user, 10)) + to_chat(user, "You find \icon[stored_item] [stored_item] in [src]!") + stored_item.forceMove(get_turf(src)) + stored_item = null + searching = FALSE + return + else + searching = FALSE + + if(world.time - last_message <= 5 SECONDS) + return + if(user.a_intent == I_HELP) + user.visible_message("\The [user] hugs [src]!","You hug [src]!") + icon_state = "pandorba" + else if (user.a_intent == I_HURT) + user.visible_message("\The [user] punches [src]!","You punch [src]!") + icon_state = "pandorba_h" + else if (user.a_intent == I_GRAB) + user.visible_message("\The [user] attempts to strangle [src]!","You attempt to strangle [src]!") + icon_state = "pandorba_g" + else + user.visible_message("\The [user] pokes [src].","You poke [src].") + icon_state = "pandorba_d" + playsound(src, 'sound/items/drop/plushie.ogg', 25, 0) + visible_message("[src] says, \"[pokephrase]\"") + last_message = world.time diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index 8abb3d7c0d..076f6b86ce 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -5,6 +5,8 @@ var/step_mechanics_pref = TRUE // Allow participation in macro-micro step mechanics var/pickup_pref = TRUE // Allow participation in macro-micro pickup mechanics var/pickup_active = TRUE // Toggle whether your help intent picks up micros or pets them + var/center_offset = 0.5 // Center offset for uneven scaling symmetry. //CHOMPEdit + var/offset_override = FALSE // Pref toggle for center offset. //CHOMPEdit // Define holder_type on types we want to be scoop-able /mob/living/carbon/human @@ -28,9 +30,11 @@ /mob/living/update_icons() . = ..() ASSERT(!ishuman(src)) + if(fuzzy || offset_override) //CHOMPEdit + center_offset = 0 //CHOMPEdit var/matrix/M = matrix() M.Scale(size_multiplier * icon_scale_x, size_multiplier * icon_scale_y) - M.Translate(0, (vis_height/2)*(size_multiplier-1)) + M.Translate(center_offset * size_multiplier * icon_scale_x, (vis_height/2)*(size_multiplier-1)) //CHOMPEdit transform = M /** @@ -103,8 +107,12 @@ var/datum/species/S = H.species special_x = S.icon_scale_x special_y = S.icon_scale_y + if(fuzzy || offset_override) //CHOMPEdit Start + center_offset = 0 + else + center_offset = S.center_offset resize.Scale(new_size * icon_scale_x * special_x, new_size * icon_scale_y * special_y) //Change the size of the matrix - resize.Translate(0, (vis_height/2) * (new_size - 1)) //Move the player up in the tile so their feet align with the bottom + resize.Translate(center_offset * size_multiplier * icon_scale_x * special_x, (vis_height/2) * (new_size - 1)) //Move the player up in the tile so their feet align with the bottom //CHOMPEdit End animate(src, transform = resize, time = duration) //Animate the player resizing if(aura_animation) diff --git a/code/modules/vore/smoleworld/smoleworld_vr.dm b/code/modules/vore/smoleworld/smoleworld_vr.dm index 0ea518d99a..4bd8d65506 100644 --- a/code/modules/vore/smoleworld/smoleworld_vr.dm +++ b/code/modules/vore/smoleworld/smoleworld_vr.dm @@ -17,7 +17,9 @@ /turf/simulated/floor/smole/Entered(atom/A) if(isliving(A)) var/mob/living/L = A - if(L.hovering) // Flying things shouldn't make footprints. + if(L.hovering || L.flying) // Flying things shouldn't make footprints. + if(L.flying) + L.adjust_nutrition(-0.5) return ..() if(L.get_effective_size(FALSE) <= RESIZE_NORMAL) return ..() diff --git a/code/modules/whitelist/whitelist.dm b/code/modules/whitelist/whitelist.dm new file mode 100644 index 0000000000..2bc269acf7 --- /dev/null +++ b/code/modules/whitelist/whitelist.dm @@ -0,0 +1,100 @@ +/client/var/list/whitelists = null + + +// Prints the client's whitelist entries +/client/verb/print_whitelist() + set name = "Show Whitelist Entries" + set desc = "Print the set of things you're whitelisted for." + set category = "OOC" + + to_chat(src, "You are whitelisted for:") + to_chat(src, jointext(get_whitelists_list(), "\n")) + +/client/proc/get_whitelists_list() + . = list() + if(src.whitelists == null) + src.whitelists = load_whitelist(src.ckey) + for(var/key in src.whitelists) + try + . += initial(initial(key:name)) + catch() + . += key + + +/proc/load_whitelist(var/key) + var/filename = "data/player_saves/[copytext(ckey(key),1,2)]/[ckey(key)]/whitelist.json" + try + // Check the player-specific whitelist file, if it exists. + if(fexists(filename)) + // Load the whitelist entries from file, or empty string if empty.` + . = list() + for(var/T in json_decode(file2text(filename) || "")) + T = text2path(T) + if(!ispath(T)) + continue + .[T] = TRUE + + // Something was removing an entry from the whitelist and interrupted mid-overwrite. + else if(fexists(filename + ".tmp") && fcopy(filename + ".tmp", filename)) + . = load_whitelist(key) + if(!fdel(filename + ".tmp")) + error("Exception when deleting tmp whitelist file [filename].tmp") + + // Whitelist file doesn't exist, so they aren't whitelisted for anything. Create the file. + else if(fexists("data/player_saves/[copytext(ckey(key),1,2)]/[ckey(key)]/preferences.sav")) + text2file("", filename) + . = list() + + catch(var/exception/E) + error("Exception when loading whitelist file [filename]: [E]") + + +// Returns true if the specified path is in the player's whitelists, false otw. +/client/proc/is_whitelisted(var/path) + if(istext(path)) + path = text2path(path) + if(!ispath(path)) + return + // If it hasn't already been loaded, load it. + if(src.whitelists == null) + src.whitelists = load_whitelist(src.ckey) + return src.whitelists[path] + + +/proc/is_alien_whitelisted(mob/M, var/datum/species/species) + //They are admin or the whitelist isn't in use + if(whitelist_overrides(M)) + return TRUE + + //You did something wrong + if(!M || !species) + return FALSE + + //The species isn't even whitelisted + if(!(species.spawn_flags & SPECIES_IS_WHITELISTED)) + return TRUE + + var/client/C = (!isclient(M)) ? M.client : M + return C.is_whitelisted(species.type) + + +/proc/is_lang_whitelisted(mob/M, var/datum/language/language) + //They are admin or the whitelist isn't in use + if(whitelist_overrides(M)) + return TRUE + + var/client/C = (!isclient(M)) ? M.client : M + + //You did something wrong + if(!istype(C) || !istype(language)) + return FALSE + + //The language isn't even whitelisted + if(!(language.flags & WHITELISTED)) + return TRUE + + return C.is_whitelisted(language.type) + + +/proc/whitelist_overrides(mob/M) + return !config.usealienwhitelist || check_rights(R_ADMIN|R_EVENT, 0, M) diff --git a/code/modules/xenobio/items/slime_objects.dm b/code/modules/xenobio/items/slime_objects.dm index 90012d7548..9556bd72de 100644 --- a/code/modules/xenobio/items/slime_objects.dm +++ b/code/modules/xenobio/items/slime_objects.dm @@ -141,9 +141,10 @@ light_range = 6 on = 1 //Bio-luminesence has one setting, on. power_use = 0 + light_system = STATIC_LIGHT -/obj/item/device/flashlight/slime/New() - ..() +/obj/item/device/flashlight/slime/Initialize() + .=..() set_light(light_range, light_power, light_color) /obj/item/device/flashlight/slime/update_brightness() @@ -215,4 +216,4 @@ description = "A slimy liquid, with very compelling smell. Extremely nutritious." color = "#FABA3A" nutriment_factor = 30 - taste_description = "slimy nectar" \ No newline at end of file + taste_description = "slimy nectar" diff --git a/code/stylesheet.dm b/code/stylesheet.dm index cb7c05e828..a48216e5b0 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -141,5 +141,7 @@ BIG IMG.icon {width: 32px; height: 32px;} .blue {color: #0000FF;} .green {color: #00DD00;} +.pnarrate {color: #009AB2;} + "} diff --git a/icons/_nanomaps/southern_cross_nanomap_z3.png b/icons/_nanomaps/southern_cross_nanomap_z3.png index f609628e54..6e255c9d5b 100644 Binary files a/icons/_nanomaps/southern_cross_nanomap_z3.png and b/icons/_nanomaps/southern_cross_nanomap_z3.png differ diff --git a/icons/inventory/accessory/item.dmi b/icons/inventory/accessory/item.dmi index aa939635c3..254e388c57 100644 Binary files a/icons/inventory/accessory/item.dmi and b/icons/inventory/accessory/item.dmi differ diff --git a/icons/inventory/accessory/mob.dmi b/icons/inventory/accessory/mob.dmi index 7774d2ab7b..e6bac630bd 100644 Binary files a/icons/inventory/accessory/mob.dmi and b/icons/inventory/accessory/mob.dmi differ diff --git a/icons/inventory/eyes/item_vr.dmi b/icons/inventory/eyes/item_vr.dmi index eee1bd9bfc..cc158df7ad 100644 Binary files a/icons/inventory/eyes/item_vr.dmi and b/icons/inventory/eyes/item_vr.dmi differ diff --git a/icons/inventory/eyes/mob.dmi b/icons/inventory/eyes/mob.dmi index f2fdd8a45f..60edef888f 100644 Binary files a/icons/inventory/eyes/mob.dmi and b/icons/inventory/eyes/mob.dmi differ diff --git a/icons/inventory/eyes/mob_vr.dmi b/icons/inventory/eyes/mob_vr.dmi index f19fed9626..2a413394e9 100644 Binary files a/icons/inventory/eyes/mob_vr.dmi and b/icons/inventory/eyes/mob_vr.dmi differ diff --git a/icons/inventory/face/mob_vr_teshari.dmi b/icons/inventory/face/mob_vr_teshari.dmi index 5a549885c7..4bf3353c7a 100644 Binary files a/icons/inventory/face/mob_vr_teshari.dmi and b/icons/inventory/face/mob_vr_teshari.dmi differ diff --git a/icons/inventory/head/mob_vr.dmi b/icons/inventory/head/mob_vr.dmi index 2da016ca45..52e3a4121f 100644 Binary files a/icons/inventory/head/mob_vr.dmi and b/icons/inventory/head/mob_vr.dmi differ diff --git a/icons/inventory/head/mob_vr_teshari.dmi b/icons/inventory/head/mob_vr_teshari.dmi index 4ebb53d2d8..7616f26095 100644 Binary files a/icons/inventory/head/mob_vr_teshari.dmi and b/icons/inventory/head/mob_vr_teshari.dmi differ diff --git a/icons/inventory/suit/item_vr.dmi b/icons/inventory/suit/item_vr.dmi index fb17453b3c..2ec42eea27 100644 Binary files a/icons/inventory/suit/item_vr.dmi and b/icons/inventory/suit/item_vr.dmi differ diff --git a/icons/inventory/suit/mob_vr.dmi b/icons/inventory/suit/mob_vr.dmi index eb19cb108c..8743a62765 100644 Binary files a/icons/inventory/suit/mob_vr.dmi and b/icons/inventory/suit/mob_vr.dmi differ diff --git a/icons/inventory/uniform/mob_vr.dmi b/icons/inventory/uniform/mob_vr.dmi index fb8ffe188e..eeca09d7c0 100644 Binary files a/icons/inventory/uniform/mob_vr.dmi and b/icons/inventory/uniform/mob_vr.dmi differ diff --git a/icons/mob/custom_synthetic_vr.dmi b/icons/mob/custom_synthetic_vr.dmi index efd3e24386..2d127ddc64 100644 Binary files a/icons/mob/custom_synthetic_vr.dmi and b/icons/mob/custom_synthetic_vr.dmi differ diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi index c2a93c7338..e281001d1b 100644 Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ diff --git a/icons/mob/human_face_alt.dmi b/icons/mob/human_face_alt.dmi index 6d02bc14bf..6811bb8fd6 100644 Binary files a/icons/mob/human_face_alt.dmi and b/icons/mob/human_face_alt.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/prosthesis/wooden_sif.dmi b/icons/mob/human_races/cyberlimbs/prosthesis/wooden_sif.dmi new file mode 100644 index 0000000000..0382fefc63 Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/prosthesis/wooden_sif.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/prosthesis/wooden_sif_teshari.dmi b/icons/mob/human_races/cyberlimbs/prosthesis/wooden_sif_teshari.dmi new file mode 100644 index 0000000000..1dacb0c81e Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/prosthesis/wooden_sif_teshari.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/prosthesis/wooden_teshari.dmi b/icons/mob/human_races/cyberlimbs/prosthesis/wooden_teshari.dmi new file mode 100644 index 0000000000..b3e408fc06 Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/prosthesis/wooden_teshari.dmi differ diff --git a/icons/mob/human_races/markings.dmi b/icons/mob/human_races/markings.dmi index 4aa72bc137..08a8e126c8 100644 Binary files a/icons/mob/human_races/markings.dmi and b/icons/mob/human_races/markings.dmi differ diff --git a/icons/mob/human_races/markings_ch.dmi b/icons/mob/human_races/markings_ch.dmi index abff58fe74..02eac76358 100644 Binary files a/icons/mob/human_races/markings_ch.dmi and b/icons/mob/human_races/markings_ch.dmi differ diff --git a/icons/mob/human_races/markings_vr.dmi b/icons/mob/human_races/markings_vr.dmi index ee1c196b37..b2b50f1d69 100644 Binary files a/icons/mob/human_races/markings_vr.dmi and b/icons/mob/human_races/markings_vr.dmi differ diff --git a/icons/mob/human_races/markings_yw.dmi b/icons/mob/human_races/markings_yw.dmi index b6650f5402..62e529c549 100644 Binary files a/icons/mob/human_races/markings_yw.dmi and b/icons/mob/human_races/markings_yw.dmi differ diff --git a/icons/mob/human_races/r_def_skrell.dmi b/icons/mob/human_races/r_def_skrell.dmi index 7b24ba3b4d..5224f7dd59 100644 Binary files a/icons/mob/human_races/r_def_skrell.dmi and b/icons/mob/human_races/r_def_skrell.dmi differ diff --git a/icons/mob/human_races/r_skrell.dmi b/icons/mob/human_races/r_skrell.dmi index 05e51ca0da..cf99d43e60 100644 Binary files a/icons/mob/human_races/r_skrell.dmi and b/icons/mob/human_races/r_skrell.dmi differ diff --git a/icons/mob/items/lefthand_suits.dmi b/icons/mob/items/lefthand_suits.dmi index fd2c56a4c5..301bbc3ff3 100644 Binary files a/icons/mob/items/lefthand_suits.dmi and b/icons/mob/items/lefthand_suits.dmi differ diff --git a/icons/mob/items/righthand_suits.dmi b/icons/mob/items/righthand_suits.dmi index d710deb759..83c7e7b777 100644 Binary files a/icons/mob/items/righthand_suits.dmi and b/icons/mob/items/righthand_suits.dmi differ diff --git a/icons/mob/robots_vr.dmi b/icons/mob/robots_vr.dmi index fab80dec2d..2432498e71 100644 Binary files a/icons/mob/robots_vr.dmi and b/icons/mob/robots_vr.dmi differ diff --git a/icons/mob/vore.dmi b/icons/mob/vore.dmi index 884e241c18..4265bd359f 100644 Binary files a/icons/mob/vore.dmi and b/icons/mob/vore.dmi differ diff --git a/icons/mob/vore/ears_ch.dmi b/icons/mob/vore/ears_ch.dmi index bc0b6d7639..02b20c340e 100644 Binary files a/icons/mob/vore/ears_ch.dmi and b/icons/mob/vore/ears_ch.dmi differ diff --git a/icons/mob/vore/ears_vr.dmi b/icons/mob/vore/ears_vr.dmi index 571eb90e24..e38d45d4ca 100644 Binary files a/icons/mob/vore/ears_vr.dmi and b/icons/mob/vore/ears_vr.dmi differ diff --git a/icons/mob/vore/tails_ch.dmi b/icons/mob/vore/tails_ch.dmi index ba1c5b6103..4d16a9e2dd 100644 Binary files a/icons/mob/vore/tails_ch.dmi and b/icons/mob/vore/tails_ch.dmi differ diff --git a/icons/mob/vore/tails_vr.dmi b/icons/mob/vore/tails_vr.dmi index 74b8d5fe60..9227fbcd6a 100644 Binary files a/icons/mob/vore/tails_vr.dmi and b/icons/mob/vore/tails_vr.dmi differ diff --git a/icons/mob/vore/taurs_ch.dmi b/icons/mob/vore/taurs_ch.dmi index 80e5a06e69..4a0659efdb 100644 Binary files a/icons/mob/vore/taurs_ch.dmi and b/icons/mob/vore/taurs_ch.dmi differ diff --git a/icons/mob/vore/taurs_vr.dmi b/icons/mob/vore/taurs_vr.dmi index 8ae4803803..4498dc2629 100644 Binary files a/icons/mob/vore/taurs_vr.dmi and b/icons/mob/vore/taurs_vr.dmi differ diff --git a/icons/mob/vore/taurs_vr_loaf.dmi b/icons/mob/vore/taurs_vr_loaf.dmi new file mode 100644 index 0000000000..835225049d Binary files /dev/null and b/icons/mob/vore/taurs_vr_loaf.dmi differ diff --git a/icons/mob/vore/wings96_vr.dmi b/icons/mob/vore/wings96_vr.dmi index f7dc2e61f8..57ced407cb 100644 Binary files a/icons/mob/vore/wings96_vr.dmi and b/icons/mob/vore/wings96_vr.dmi differ diff --git a/icons/mob/vore/wings_vr.dmi b/icons/mob/vore/wings_vr.dmi index 68432f86f2..dfc875b987 100644 Binary files a/icons/mob/vore/wings_vr.dmi and b/icons/mob/vore/wings_vr.dmi differ diff --git a/icons/mob/widerobot_trauma_vr.dmi b/icons/mob/widerobot_trauma_vr.dmi index c5694be909..29e76453ea 100644 Binary files a/icons/mob/widerobot_trauma_vr.dmi and b/icons/mob/widerobot_trauma_vr.dmi differ diff --git a/icons/obj/bureaucracy_vr.dmi b/icons/obj/bureaucracy_vr.dmi new file mode 100644 index 0000000000..2b27fee277 Binary files /dev/null and b/icons/obj/bureaucracy_vr.dmi differ diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi index d252119e97..df626a05ba 100644 Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ diff --git a/icons/obj/device_vr.dmi b/icons/obj/device_vr.dmi index 1a1c28af56..43f6610782 100644 Binary files a/icons/obj/device_vr.dmi and b/icons/obj/device_vr.dmi differ diff --git a/icons/obj/flags.dmi b/icons/obj/flags.dmi new file mode 100644 index 0000000000..36f624b645 Binary files /dev/null and b/icons/obj/flags.dmi differ diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index f1637aca4b..d302c760fc 100644 Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ diff --git a/icons/obj/furniture.dmi b/icons/obj/furniture.dmi index 64227b0b20..485cc6a46e 100644 Binary files a/icons/obj/furniture.dmi and b/icons/obj/furniture.dmi differ diff --git a/icons/obj/furniture_vr.dmi b/icons/obj/furniture_vr.dmi index 8be008ba02..5f79c3df6a 100644 Binary files a/icons/obj/furniture_vr.dmi and b/icons/obj/furniture_vr.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index 42ce468bce..3e4b9152ad 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ diff --git a/icons/obj/machines/shielding.dmi b/icons/obj/machines/shielding.dmi index 42087073d3..b6fc1b59f2 100644 Binary files a/icons/obj/machines/shielding.dmi and b/icons/obj/machines/shielding.dmi differ diff --git a/icons/obj/machines/shielding_vr.dmi b/icons/obj/machines/shielding_vr.dmi index 195192b1c8..f9538ea570 100644 Binary files a/icons/obj/machines/shielding_vr.dmi and b/icons/obj/machines/shielding_vr.dmi differ diff --git a/icons/obj/soap.dmi b/icons/obj/soap.dmi new file mode 100644 index 0000000000..23a7bf2394 Binary files /dev/null and b/icons/obj/soap.dmi differ diff --git a/icons/obj/sofas.dmi b/icons/obj/sofas.dmi index b8ef1d5c0a..cca4eb803e 100644 Binary files a/icons/obj/sofas.dmi and b/icons/obj/sofas.dmi differ diff --git a/icons/obj/stacks.dmi b/icons/obj/stacks.dmi index 9c3cf31f09..8ade0ce4ae 100644 Binary files a/icons/obj/stacks.dmi and b/icons/obj/stacks.dmi differ diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi index 6379879df7..271ba8f180 100644 Binary files a/icons/obj/vehicles.dmi and b/icons/obj/vehicles.dmi differ diff --git a/icons/turf/catwalks.dmi b/icons/turf/catwalks.dmi index 20c5e1f4d9..7ff2c50a35 100644 Binary files a/icons/turf/catwalks.dmi and b/icons/turf/catwalks.dmi differ diff --git a/icons/vore/custom_clothes_vr.dmi b/icons/vore/custom_clothes_vr.dmi index 78fa46a05c..7c03befdfa 100644 Binary files a/icons/vore/custom_clothes_vr.dmi and b/icons/vore/custom_clothes_vr.dmi differ diff --git a/icons/vore/custom_items_vr.dmi b/icons/vore/custom_items_vr.dmi index 76707a55fb..d502efb78c 100644 Binary files a/icons/vore/custom_items_vr.dmi and b/icons/vore/custom_items_vr.dmi differ diff --git a/icons/vore/custom_onmob_vr.dmi b/icons/vore/custom_onmob_vr.dmi index e90afae8d4..b401831f62 100644 Binary files a/icons/vore/custom_onmob_vr.dmi and b/icons/vore/custom_onmob_vr.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 55e6cdb5aa..b44b9331fa 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -268,7 +268,7 @@ macro "macro" elem name = "TAB" command = ".winset \"mainwindow.macro=hotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true\"" - elem + elem name = "Shift" command = "KeyDown Shift" elem @@ -492,7 +492,7 @@ macro "hotkeymode" elem name = "TAB" command = ".winset \"mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true\"" - elem + elem name = "Shift" command = "KeyDown Shift" elem diff --git a/maps/cynosure/cynosure-2.dmm b/maps/cynosure/cynosure-2.dmm index d38f4e7d6d..95bc2a15d1 100644 --- a/maps/cynosure/cynosure-2.dmm +++ b/maps/cynosure/cynosure-2.dmm @@ -45225,6 +45225,9 @@ /obj/effect/floor_decal/steeldecal/steel_decals_central5{ dir = 1 }, +/obj/vehicle/train/engine/quadbike/snowmobile/random{ + dir = 1 + }, /turf/simulated/floor/tiled/old_tile/gray, /area/surface/station/garage) "uBP" = ( diff --git a/maps/groundbase/gb-z1.dmm b/maps/groundbase/gb-z1.dmm index e4673f4a1e..5ecfeebc18 100644 --- a/maps/groundbase/gb-z1.dmm +++ b/maps/groundbase/gb-z1.dmm @@ -118,6 +118,7 @@ lel dir = 8; pixel_x = 30 }, +/obj/item/device/ticket_printer, /turf/simulated/floor/tiled/dark, /area/groundbase/security/equipment) "aq" = ( @@ -492,9 +493,6 @@ lel "bq" = ( /obj/machinery/vending/wardrobe/atmosdrobe, /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/sign/scenery/fakefireaxe{ - pixel_y = 32 - }, /turf/simulated/floor/tiled, /area/groundbase/engineering/atmos/monitoring) "br" = ( @@ -1346,6 +1344,8 @@ lel /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, +/obj/item/device/ticket_printer, +/obj/item/device/ticket_printer, /turf/simulated/floor/tiled/dark, /area/groundbase/security/briefing) "dp" = ( @@ -4009,6 +4009,7 @@ lel /obj/machinery/light{ dir = 8 }, +/obj/item/device/ticket_printer, /turf/simulated/floor/tiled/dark, /area/groundbase/security/equipment) "jZ" = ( @@ -6884,6 +6885,7 @@ lel /obj/machinery/camera/network/security{ dir = 4 }, +/obj/item/device/ticket_printer, /turf/simulated/floor/tiled/dark, /area/groundbase/security/equipment) "qR" = ( @@ -8045,6 +8047,7 @@ lel /obj/item/weapon/book/manual/security_space_law, /obj/item/gunbox/warden, /obj/structure/closet/secure_closet/warden, +/obj/item/device/ticket_printer, /turf/simulated/floor/tiled/dark, /area/groundbase/security/warden) "tx" = ( @@ -11094,6 +11097,7 @@ lel /obj/machinery/light{ dir = 4 }, +/obj/item/device/ticket_printer, /turf/simulated/floor/tiled/dark, /area/groundbase/security/equipment) "Au" = ( @@ -11852,6 +11856,7 @@ lel /obj/machinery/firealarm{ dir = 4 }, +/obj/item/device/ticket_printer, /turf/simulated/floor/tiled/dark, /area/groundbase/security/equipment) "Co" = ( @@ -13941,6 +13946,11 @@ lel /obj/structure/cable/yellow{ icon_state = "0-4" }, +<<<<<<< HEAD +======= +/obj/random/paicard, +/obj/item/device/ticket_printer, +>>>>>>> 58c370688b... Merge pull request #14119 from Very-Soft/ticket_printer /turf/simulated/floor/tiled/dark, /area/groundbase/security/hos) "Hw" = ( @@ -16259,6 +16269,7 @@ lel /obj/structure/cable/yellow{ icon_state = "0-4" }, +/obj/item/device/ticket_printer, /turf/simulated/floor/tiled/dark, /area/groundbase/security/equipment) "MS" = ( @@ -20989,6 +21000,7 @@ lel pixel_x = 2; pixel_y = 3 }, +/obj/item/device/ticket_printer, /turf/simulated/floor/tiled/dark, /area/groundbase/security/detective) "YO" = ( diff --git a/maps/groundbase/gb-z3.dmm b/maps/groundbase/gb-z3.dmm index fe9bade7d6..88cbfaf5bb 100644 --- a/maps/groundbase/gb-z3.dmm +++ b/maps/groundbase/gb-z3.dmm @@ -7,9 +7,6 @@ lol /area/groundbase/exploration/equipment) "ab" = ( /obj/machinery/suit_cycler/medical, -/obj/structure/sign/scenery/fakefireaxe{ - pixel_y = 32 - }, /turf/simulated/floor/tiled/white, /area/groundbase/medical/paramedic) "ak" = ( diff --git a/maps/offmap_vr/om_ships/lunaship.dm b/maps/offmap_vr/om_ships/lunaship.dm new file mode 100644 index 0000000000..26ff0e54eb --- /dev/null +++ b/maps/offmap_vr/om_ships/lunaship.dm @@ -0,0 +1,100 @@ +// Compile in the map for CI testing if we're testing compileability of all the maps +#if MAP_TEST +#include "lunaship.dmm" +#endif + +// Map template for spawning the shuttle +/datum/map_template/om_ships/lunaship + name = "OM Ship - LUNA" + desc = "It's LUNA! As a spaceship." + mappath = 'lunaship.dmm' + +/area/lunaship + requires_power = 1 + has_gravity = 1 + flags = RAD_SHIELDED + +/area/lunaship/cockpit + name = "LUNA - Control Core" +/area/lunaship/office + name = "LUNA - Office" +/area/lunaship/hallway_port + name = "LUNA - Port EVA" +/area/lunaship/hallway_starboard + name = "LUNA - Starboard EVA" +/area/lunaship/park + name = "LUNA - Park" +/area/lunaship/bar + name = "LUNA - Bar" +/area/lunaship/medical + name = "LUNA - Medical" +/area/lunaship/robotics_bay + name = "LUNA - Robotics Bay" +/area/lunaship/engineering + name = "LUNA - Engineering" +/area/luna/flight_boat_dock + name = "LUNA - Boat Dock" + requires_power = 0 + +/area/shuttle/luna_ship_boat + name = "LUNA - Ship's Boat" + requires_power = 1 + dynamic_lighting = 1 + base_turf = /turf/simulated/floor/reinforced + +/obj/effect/shuttle_landmark/premade/luna_near_fore + name = "Near ISV LUNA (Fore)" + landmark_tag = "luna_near_fore" + +/obj/effect/shuttle_landmark/premade/luna_near_fore_port + name = "Near ISV LUNA (Fore-Port)" + landmark_tag = "luna_near_fore_port" + +/obj/effect/shuttle_landmark/premade/luna_near_fore_star + name = "Near ISV LUNA (Fore-Starboard)" + landmark_tag = "luna_near_fore_star" + +/obj/effect/shuttle_landmark/premade/luna_near_aft + name = "Near ISV LUNA (Aft)" + landmark_tag = "luna_near_aft" + +/obj/effect/shuttle_landmark/premade/luna_near_aft_port + name = "Near ISV LUNA (Aft-Port)" + landmark_tag = "luna_near_aft_port" + +/obj/effect/shuttle_landmark/premade/luna_near_aft_star + name = "Near ISV LUNA (Aft-Starboard)" + landmark_tag = "luna_near_aft_star" + +/obj/effect/shuttle_landmark/premade/luna_wing_port + name = "ISV LUNA (Port Wingtip)" + landmark_tag = "luna_wing_star" + +/obj/effect/shuttle_landmark/premade/luna_wing_star + name = "ISV LUNA (Starboard Wingtip)" + landmark_tag = "luna_wing_star" + + +/turf/simulated/floor/water/indoors/surfluid + name = "surfluid pool" + desc = "A pool of inky-black fluid that shimmers oddly in the light if hit just right." + description_info = "Surfluid is a protean's main method of production, using swarms of nanites to process raw materials into finished products at the cost of immense amounts of energy." + color = "#222222" + outdoors = OUTDOORS_NO + reagent_type = "liquid_protean" + +// The 'ship' +/obj/effect/overmap/visitable/ship/lunaship + name = "ISV LUNA" + desc = "Experimental multifunction vessel. Friendly IFF detected." + icon_state = "moe_frigate" + scanner_desc = @{"[i]Registration[/i]: LUNA +[i]Class[/i]: Large Corvette - Multifunctional +[i]Transponder[/i]: Transmitting [CIV], non-hostile. +[b]Notice[/b]: Automated vessel. Abnormal energy emissions detected. "} + color = "#00aaff" //Bluey + vessel_mass = 2000 + vessel_size = SHIP_SIZE_SMALL + initial_generic_waypoints = list("luna_near_fore_port", "luna_near_fore_star", "luna_near_aft_port", "luna_near_aft_star", "luna_near_fore", "luna_wing_port", "luna_wing_star", "luna_near_aft") + fore_dir = NORTH + known = FALSE \ No newline at end of file diff --git a/maps/offmap_vr/om_ships/lunaship.dmm b/maps/offmap_vr/om_ships/lunaship.dmm new file mode 100644 index 0000000000..b74098afa2 --- /dev/null +++ b/maps/offmap_vr/om_ships/lunaship.dmm @@ -0,0 +1,6924 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ab" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"ad" = ( +/turf/simulated/wall/tgmc/durawall, +/area/lunaship/park) +"af" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/lunaship/hallway_starboard) +"al" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/item/device/perfect_tele/alien{ + desc = "An enhanced device that allows one to teleport people and objects across large distances."; + name = "advanced translocator" + }, +/obj/item/weapon/card/id/event/polymorphic/altcard{ + access = list(777) + }, +/turf/simulated/floor/wood, +/area/lunaship/office) +"aF" = ( +/obj/structure/hull_corner, +/turf/space, +/area/space) +"aL" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"aQ" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/park) +"aV" = ( +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 8 + }, +/obj/machinery/power/apc/hyper{ + alarms_hidden = 1; + dir = 8; + pixel_x = -25; + req_access = list(777) + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/cyan, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"aY" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techmaint, +/area/lunaship/hallway_starboard) +"bj" = ( +/turf/space/internal_edge/top, +/area/lunaship/park) +"bp" = ( +/obj/machinery/computer/ship/navigation/telescreen, +/turf/simulated/wall/tgmc/durawall, +/area/lunaship/bar) +"bx" = ( +/obj/structure/bed/chair/sofa/right/purp, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"by" = ( +/obj/structure/hull_corner/long_vert{ + dir = 9 + }, +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/space, +/area/space) +"bD" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"bF" = ( +/obj/machinery/media/jukebox, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"bK" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_starboard) +"bP" = ( +/turf/space/internal_edge/top, +/area/lunaship/cockpit) +"bU" = ( +/turf/space/internal_edge/topright, +/area/lunaship/cockpit) +"cj" = ( +/obj/structure/hull_corner/long_vert{ + dir = 6 + }, +/turf/space, +/area/space) +"cx" = ( +/turf/space/internal_edge/left, +/area/lunaship/park) +"cK" = ( +/obj/structure/bed/chair/sofa/purp, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"cM" = ( +/obj/effect/floor_decal/milspec_sterile/green/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"cQ" = ( +/turf/simulated/wall/tgmc/durawall, +/area/lunaship/engineering) +"cU" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet/turcarpet, +/area/lunaship/office) +"dl" = ( +/obj/structure/hull_corner/long_vert{ + dir = 6 + }, +/obj/structure/lattice, +/turf/space, +/area/space) +"do" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/cyan{ + icon_state = "0-2" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/eris/white/gray_platform, +/area/lunaship/engineering) +"dB" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/techfloor/orange/corner{ + dir = 8 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"dN" = ( +/obj/machinery/atmospherics/portables_connector{ + piping_layer = 3 + }, +/obj/machinery/portable_atmospherics/canister/empty, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"ew" = ( +/obj/machinery/body_scanconsole{ + dir = 4 + }, +/obj/effect/floor_decal/milspec_sterile/green/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"eE" = ( +/turf/simulated/floor/water/indoors/surfluid, +/area/lunaship/engineering) +"eO" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"fc" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/eris/steel/bar_flat, +/area/lunaship/bar) +"fd" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_starboard) +"fv" = ( +/obj/structure/table/darkglass, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"fE" = ( +/obj/structure/table/darkglass, +/obj/machinery/chemical_dispenser/bar_alc/full{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"fT" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/eris/white/gray_platform, +/area/lunaship/engineering) +"gc" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"gj" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/eris/steel/bar_flat, +/area/lunaship/bar) +"gl" = ( +/obj/machinery/sleep_console{ + dir = 2; + pixel_x = -1 + }, +/obj/effect/floor_decal/milspec_sterile/green/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"gp" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/water/deep/indoors, +/area/lunaship/park) +"gC" = ( +/turf/simulated/floor/outdoors/grass/heavy{ + outdoors = 0 + }, +/area/lunaship/park) +"gI" = ( +/obj/structure/hull_corner/long_vert{ + dir = 10 + }, +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/space, +/area/space) +"gT" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"gY" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/lunaship/office) +"gZ" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/water/deep/indoors, +/area/lunaship/park) +"he" = ( +/obj/machinery/sleeper, +/obj/effect/floor_decal/milspec_sterile/green/half{ + dir = 9 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"hr" = ( +/turf/simulated/floor/water/indoors/surfluid, +/area/lunaship/cockpit) +"hs" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"hu" = ( +/obj/machinery/recharge_station, +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 9 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"hA" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"hH" = ( +/obj/machinery/power/apc/hyper{ + alarms_hidden = 1; + dir = 1; + pixel_y = 25; + req_access = list(777) + }, +/obj/machinery/power/terminal{ + dir = 1; + icon_state = "term" + }, +/obj/structure/cable/cyan{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/park) +"hR" = ( +/obj/effect/floor_decal/milspec/color/black/half, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"ih" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techmaint, +/area/lunaship/hallway_port) +"ik" = ( +/obj/effect/overmap/visitable/ship/lunaship, +/turf/space, +/area/space) +"il" = ( +/turf/space/internal_edge/topright, +/area/lunaship/park) +"in" = ( +/obj/structure/bed/chair/bar_stool, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"iq" = ( +/obj/structure/bed/chair/sofa/corner/purp, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"iu" = ( +/obj/machinery/power/apc/hyper{ + alarms_hidden = 1; + dir = 8; + pixel_x = -25; + req_access = list(777) + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/cyan{ + icon_state = "0-4" + }, +/turf/simulated/floor/carpet/turcarpet, +/area/lunaship/office) +"iv" = ( +/obj/effect/floor_decal/milspec_sterile/green/corner{ + dir = 4 + }, +/obj/machinery/power/apc/hyper{ + alarms_hidden = 1; + dir = 4; + pixel_x = 25; + req_access = list(777) + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/cyan, +/turf/simulated/floor/tiled/milspec/sterile{ + opacity = 1 + }, +/area/lunaship/medical) +"iw" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"ix" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector{ + piping_layer = 1 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"iA" = ( +/obj/structure/hull_corner{ + dir = 8 + }, +/turf/space, +/area/space) +"iB" = ( +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 5 + }, +/obj/machinery/autolathe, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"iK" = ( +/obj/effect/shuttle_landmark/premade/luna_near_aft_star, +/turf/space, +/area/space) +"iN" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"iQ" = ( +/obj/structure/bed/chair/bar_stool, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/steel/bar_flat, +/area/lunaship/bar) +"jd" = ( +/turf/simulated/wall/tgmc/durawall, +/area/lunaship/cockpit) +"jz" = ( +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"jF" = ( +/turf/space/internal_edge/bottom, +/area/lunaship/cockpit) +"jG" = ( +/turf/simulated/floor/wood, +/area/lunaship/office) +"jK" = ( +/obj/effect/floor_decal/milspec_sterile/green/half{ + dir = 8 + }, +/obj/structure/table/glass, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"jQ" = ( +/obj/machinery/power/apc/hyper{ + alarms_hidden = 1; + dir = 8; + pixel_x = -25; + req_access = list(777) + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/cyan{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_starboard) +"jT" = ( +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"kd" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"ku" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/outdoors/grass/heavy{ + outdoors = 0 + }, +/area/lunaship/park) +"kF" = ( +/obj/effect/floor_decal/milspec_sterile/green/half{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"kI" = ( +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"kL" = ( +/obj/effect/floor_decal/milspec_sterile/green/half{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"kM" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/firstaid/adv, +/obj/structure/closet/walllocker/medical/west, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/storage/firstaid/toxin, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/effect/floor_decal/milspec_sterile/green/half{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"kZ" = ( +/obj/item/device/radio/beacon, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"lb" = ( +/obj/machinery/power/shield_generator/upgraded{ + field_radius = 20; + initial_shield_modes = 2113; + req_one_access = 777; + target_radius = 18 + }, +/obj/structure/cable/cyan, +/obj/structure/cable/cyan{ + icon_state = "0-8" + }, +/obj/structure/railing/grey, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"lm" = ( +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 6 + }, +/obj/machinery/mecha_part_fabricator{ + req_access = list() + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"ls" = ( +/obj/effect/floor_decal/techfloor/corner, +/obj/effect/floor_decal/techfloor/corner{ + dir = 9 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"lI" = ( +/obj/effect/floor_decal/milspec/color/orange/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/engineering) +"lP" = ( +/obj/structure/table/darkglass, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"lW" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor/corner, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"lZ" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"mf" = ( +/obj/structure/table/steel, +/obj/item/weapon/storage/belt/utility/chief/full, +/obj/item/weapon/storage/belt/utility/chief/full{ + pixel_y = 5 + }, +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 6 + }, +/obj/item/device/lightreplacer, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"mj" = ( +/turf/space/internal_edge/topleft, +/area/lunaship/cockpit) +"mm" = ( +/obj/machinery/telecomms/allinone, +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"mp" = ( +/obj/machinery/optable{ + name = "Robotics Operating Table" + }, +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 6 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"mr" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/wood, +/area/lunaship/office) +"mx" = ( +/obj/structure/hull_corner/long_vert{ + dir = 6 + }, +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/space, +/area/space) +"mV" = ( +/obj/effect/shuttle_landmark/premade/luna_near_fore_star, +/turf/space, +/area/space) +"na" = ( +/obj/structure/bed/chair/sofa/purp{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"nc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/effect/floor_decal/milspec_sterile/green/half{ + dir = 9 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"ng" = ( +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"nn" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/eris/steel/bar_flat, +/area/lunaship/bar) +"nr" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"ns" = ( +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"ny" = ( +/obj/effect/floor_decal/milspec/color/blue/half{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_port) +"nC" = ( +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/space, +/area/space) +"nM" = ( +/obj/structure/closet/crate/bin{ + anchored = 1; + density = 0; + name = "trash bin"; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_port) +"nZ" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/carpet/turcarpet, +/area/lunaship/office) +"oc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"od" = ( +/obj/machinery/button/remote/airlock{ + dir = 4; + id = "luna_private_bed"; + name = "Door Lock"; + pixel_x = -25 + }, +/turf/simulated/floor/wood, +/area/lunaship/office) +"oj" = ( +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/space, +/area/space) +"oD" = ( +/turf/space/internal_edge/left, +/area/lunaship/cockpit) +"oG" = ( +/turf/simulated/floor/tiled/eris/steel/bar_flat, +/area/lunaship/bar) +"oS" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/structure/table/woodentable, +/obj/item/modular_computer/laptop/preset/custom_loadout/elite, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/lunaship/office) +"pj" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/office) +"px" = ( +/obj/structure/lattice, +/obj/machinery/power/pointdefense{ + id_tag = "luna_ship_pd" + }, +/obj/structure/cable/cyan{ + icon_state = "0-2" + }, +/turf/space, +/area/space) +"pN" = ( +/obj/structure/dancepole{ + pixel_y = 16 + }, +/turf/simulated/floor/tiled/eris/steel/bar_light, +/area/lunaship/bar) +"pO" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_port) +"pR" = ( +/obj/structure/table/woodentable, +/obj/machinery/alarm/alarms_hidden{ + dir = 4; + pixel_x = -26 + }, +/obj/item/weapon/implanter, +/obj/item/weapon/implant/organ/limbaugment/upperarm/blade, +/turf/simulated/floor/wood, +/area/lunaship/office) +"pT" = ( +/obj/structure/hull_corner/long_vert{ + dir = 9 + }, +/turf/space, +/area/space) +"pV" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/wall/rpshull, +/area/space) +"qn" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"qx" = ( +/obj/structure/hull_corner/long_vert{ + dir = 6 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/space, +/area/space) +"qz" = ( +/turf/simulated/wall/tgmc/durawall, +/area/space) +"qB" = ( +/obj/item/device/defib_kit/jumper_kit, +/obj/structure/table/steel, +/obj/item/weapon/storage/firstaid/surgery, +/obj/structure/closet/walllocker_double/east, +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 6 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"qI" = ( +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"rh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_starboard) +"rn" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/rpshull, +/area/space) +"rv" = ( +/obj/structure/closet/walllocker_double/west, +/obj/fiftyspawner/phoron, +/obj/fiftyspawner/uranium, +/obj/fiftyspawner/diamond, +/obj/fiftyspawner/osmium, +/obj/fiftyspawner/mhydrogen, +/obj/fiftyspawner/gold, +/obj/fiftyspawner/silver, +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 9 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"rA" = ( +/obj/structure/hull_corner/long_vert{ + dir = 6 + }, +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/space, +/area/space) +"rB" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/park) +"rD" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/turcarpet, +/area/lunaship/office) +"rK" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/lunaship/hallway_port) +"rX" = ( +/obj/effect/floor_decal/milspec_sterile/green/corner{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/device/paicard/sleevecard, +/obj/item/device/paicard/sleevecard, +/obj/item/device/sleevemate{ + pixel_y = -5 + }, +/obj/item/device/sleevemate, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"rZ" = ( +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"sa" = ( +/obj/machinery/light/floortube, +/obj/structure/table/bench/wooden, +/turf/simulated/floor/outdoors/grass/heavy{ + outdoors = 0 + }, +/area/lunaship/park) +"si" = ( +/turf/space, +/area/space) +"sx" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"sC" = ( +/turf/simulated/wall/tgmc/durawall, +/area/lunaship/medical) +"sD" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/carpet/turcarpet, +/area/lunaship/office) +"sN" = ( +/obj/machinery/ntnet_relay, +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"sT" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/lunaship/hallway_starboard) +"sU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"sV" = ( +/obj/effect/floor_decal/milspec/color/orange/corner, +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/engineering) +"sW" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/milspec/color/black/corner, +/obj/effect/floor_decal/milspec/color/black/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"sZ" = ( +/obj/item/weapon/soap/nanotrasen, +/obj/effect/floor_decal/milspec_sterile/green/corner{ + dir = 4 + }, +/obj/structure/closet/walllocker/medical/east, +/obj/item/weapon/soap/nanotrasen, +/obj/item/weapon/soap/nanotrasen, +/obj/machinery/light, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"tf" = ( +/obj/effect/shuttle_landmark/premade/luna_wing_port, +/turf/space, +/area/space) +"th" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/lunaship/hallway_port) +"tl" = ( +/obj/structure/hull_corner/long_vert{ + dir = 10 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/space, +/area/space) +"tm" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"ts" = ( +/obj/machinery/vending/nifsoft_shop, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/lunaship/office) +"tB" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/water/indoors/surfluid, +/area/lunaship/engineering) +"tW" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/rpshull, +/area/space) +"ui" = ( +/obj/machinery/vending/medical{ + dir = 4 + }, +/obj/effect/floor_decal/milspec_sterile/green/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"um" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/rpshull, +/area/space) +"uq" = ( +/turf/space/internal_edge/right, +/area/lunaship/park) +"uQ" = ( +/obj/structure/bed/chair/bay/comfy/purple, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"uS" = ( +/turf/simulated/wall/tgmc/durawall, +/area/lunaship/hallway_port) +"uW" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"ve" = ( +/turf/simulated/wall/tgmc/durawall, +/area/lunaship/bar) +"vi" = ( +/obj/structure/table/darkglass, +/obj/machinery/chemical_dispenser/bar_soft/full{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"vs" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/medical) +"vt" = ( +/obj/effect/floor_decal/milspec_sterile/green/half, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"vw" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"vy" = ( +/obj/effect/floor_decal/milspec_sterile/green/half{ + dir = 6 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"vB" = ( +/obj/machinery/computer/teleporter{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"vD" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techmaint, +/area/lunaship/hallway_starboard) +"vE" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"vO" = ( +/obj/machinery/portable_atmospherics/canister/empty, +/obj/machinery/atmospherics/portables_connector{ + piping_layer = 3 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"vQ" = ( +/obj/structure/closet/walllocker_double/west, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/durasteel, +/obj/fiftyspawner/plasteel, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/titanium, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"vU" = ( +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/space, +/area/space) +"vW" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"wd" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_starboard) +"wy" = ( +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"wK" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/firstaid/combat, +/obj/item/weapon/storage/firstaid/bonemed, +/obj/item/weapon/storage/firstaid/clotting, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/closet/walllocker/medical/west, +/obj/effect/floor_decal/milspec_sterile/green/corner{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"wM" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/rpshull, +/area/space) +"wZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"xa" = ( +/obj/effect/floor_decal/milspec/color/blue/half{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_starboard) +"xd" = ( +/obj/effect/shuttle_landmark/premade/luna_wing_star, +/turf/space, +/area/space) +"xg" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_port) +"xj" = ( +/obj/structure/undies_wardrobe{ + anchored = 1 + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/carpet/turcarpet, +/area/lunaship/office) +"xv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_port) +"xJ" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/carpet/turcarpet, +/area/lunaship/office) +"yh" = ( +/obj/machinery/power/apc/hyper{ + alarms_hidden = 1; + dir = 4; + pixel_x = 25; + req_access = list(777) + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/cyan{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"yl" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/rpshull, +/area/space) +"yw" = ( +/obj/machinery/alarm/alarms_hidden{ + dir = 4; + pixel_x = -26 + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"yB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"yH" = ( +/obj/structure/bed/chair/sofa/left/purp{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"yL" = ( +/obj/effect/floor_decal/milspec/color/blue/half{ + dir = 6 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_port) +"yQ" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1; + icon_state = "map_on"; + name = "gas pump - waste - scrubbers" + }, +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"yX" = ( +/obj/structure/railing/grey, +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"zl" = ( +/obj/structure/fans/hardlight, +/turf/simulated/floor/tiled/eris/steel/panels, +/area/lunaship/hallway_starboard) +"zm" = ( +/obj/effect/shuttle_landmark/premade/luna_near_aft, +/turf/space, +/area/space) +"zp" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_port) +"zr" = ( +/obj/effect/floor_decal/milspec_sterile/green/half{ + dir = 4 + }, +/obj/structure/closet/walllocker/medical/east, +/obj/item/clothing/gloves/sterile/nitrile, +/obj/item/clothing/gloves/sterile/nitrile, +/obj/item/clothing/gloves/sterile/nitrile, +/obj/item/weapon/storage/belt/medical, +/obj/item/weapon/storage/belt/medical, +/obj/item/weapon/storage/belt/medical, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"zB" = ( +/obj/machinery/teleport/station, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"zE" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"zG" = ( +/obj/structure/hull_corner/long_vert{ + dir = 10 + }, +/turf/space, +/area/space) +"zJ" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/steel/bar_flat, +/area/lunaship/bar) +"zW" = ( +/obj/effect/floor_decal/techfloor/orange/corner{ + dir = 1 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"Aa" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + opacity = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"Ad" = ( +/obj/structure/lattice, +/obj/machinery/power/pointdefense{ + id_tag = "luna_ship_pd" + }, +/obj/structure/cable/cyan, +/turf/space, +/area/space) +"Ag" = ( +/turf/simulated/floor/water/deep/indoors, +/area/lunaship/park) +"Ak" = ( +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"Ao" = ( +/obj/structure/table/darkglass, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"Ar" = ( +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"As" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + opacity = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"AR" = ( +/obj/structure/fans/hardlight, +/turf/simulated/floor/tiled/eris/steel/panels, +/area/lunaship/hallway_port) +"AS" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/bluedouble, +/turf/simulated/floor/wood, +/area/lunaship/office) +"Ba" = ( +/turf/simulated/floor/tiled/techmaint, +/area/lunaship/hallway_port) +"Bd" = ( +/obj/structure/fans/hardlight, +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/eris/steel/panels, +/area/lunaship/hallway_port) +"Bg" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"BT" = ( +/obj/effect/floor_decal/techfloor/corner, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"Ca" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"Cf" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/space, +/area/space) +"Cw" = ( +/obj/effect/floor_decal/milspec/color/blue/half{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_starboard) +"CA" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/lunaship/hallway_port) +"CJ" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/rpshull, +/area/space) +"Dm" = ( +/obj/machinery/mech_recharger{ + icon = 'icons/turf/shuttle_alien_blue.dmi' + }, +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"Dt" = ( +/obj/structure/hull_corner/long_vert{ + dir = 10 + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/space, +/area/space) +"Du" = ( +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, +/turf/simulated/wall/rpshull, +/area/space) +"DJ" = ( +/obj/machinery/door/airlock/angled_tgmc{ + id_tag = "luna_private_bed"; + name = "bedroom" + }, +/turf/simulated/floor/wood, +/area/lunaship/office) +"DP" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/cyan{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/eris/white/gray_platform, +/area/lunaship/engineering) +"Ee" = ( +/obj/effect/floor_decal/milspec_sterile/green/half{ + dir = 9 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"Eg" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/lunaship/hallway_starboard) +"Ez" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"EF" = ( +/turf/simulated/wall/tgmc/durawall, +/area/lunaship/robotics_bay) +"EG" = ( +/obj/structure/table/bench/wooden, +/turf/simulated/floor/outdoors/grass/heavy{ + outdoors = 0 + }, +/area/lunaship/park) +"EH" = ( +/turf/simulated/floor/water/indoors/surfluid, +/area/lunaship/robotics_bay) +"EK" = ( +/obj/effect/floor_decal/milspec_sterile/green/half{ + dir = 4 + }, +/obj/structure/sink{ + dir = 4; + pixel_x = 12; + pixel_y = -5 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"EP" = ( +/obj/machinery/computer/ship/engines{ + req_one_access = list(777) + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"EQ" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/space, +/area/space) +"ER" = ( +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/space, +/area/space) +"EZ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/eris/white/gray_platform, +/area/lunaship/engineering) +"Fb" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"Fh" = ( +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"Fs" = ( +/obj/structure/hull_corner{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/space, +/area/space) +"FU" = ( +/obj/effect/floor_decal/milspec_sterile/green/half, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"FV" = ( +/obj/structure/closet/crate/bin{ + anchored = 1; + density = 0; + name = "trash bin"; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_starboard) +"Ge" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/wall/rpshull, +/area/space) +"Gn" = ( +/obj/structure/hull_corner{ + dir = 1 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/space, +/area/space) +"Gu" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/wall/rpshull, +/area/space) +"GI" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced/airless, +/area/space) +"GP" = ( +/obj/structure/railing/grey, +/obj/machinery/pointdefense_control{ + id_tag = "luna_ship_pd"; + req_one_access = 777 + }, +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"GQ" = ( +/obj/machinery/light/floortube{ + dir = 8 + }, +/obj/structure/table/bench/wooden, +/turf/simulated/floor/outdoors/grass/heavy{ + outdoors = 0 + }, +/area/lunaship/park) +"GT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"GY" = ( +/obj/machinery/power/apc/hyper{ + alarms_hidden = 1; + dir = 4; + pixel_x = 25; + req_access = list(777) + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/cyan{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_port) +"Hf" = ( +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/space, +/area/space) +"Hh" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_starboard) +"Hv" = ( +/obj/structure/flora/tree/jungle_small{ + pixel_x = -38; + pixel_y = 7 + }, +/turf/simulated/floor/outdoors/grass/heavy{ + outdoors = 0 + }, +/area/lunaship/park) +"Hz" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_port) +"HC" = ( +/obj/structure/table/steel, +/obj/item/device/flashlight/lamp, +/turf/simulated/floor/wood, +/area/lunaship/office) +"HR" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"HW" = ( +/obj/structure/closet/walllocker_double/north{ + dir = 4; + pixel_x = 32; + pixel_y = 0 + }, +/obj/machinery/computer/ship/navigation/telescreen{ + pixel_y = 23 + }, +/turf/simulated/floor/wood, +/area/lunaship/office) +"Ia" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_starboard) +"Ih" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/water/indoors/surfluid, +/area/lunaship/robotics_bay) +"Iv" = ( +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/space, +/area/space) +"Iz" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/machinery/power/smes/buildable/hybrid{ + input_attempt = 1; + input_level = 250000; + input_level_max = 250000; + output_level = 190000 + }, +/obj/structure/cable/cyan{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/eris/white/gray_platform, +/area/lunaship/engineering) +"IJ" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 8 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"Jn" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/wall/rpshull, +/area/space) +"Jv" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"JK" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/park) +"JM" = ( +/obj/machinery/vending/boozeomat{ + density = 0; + req_access = null; + req_log_access = null + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"JT" = ( +/obj/structure/hull_corner/long_vert{ + dir = 10 + }, +/obj/structure/lattice, +/turf/space, +/area/space) +"JW" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/medical) +"Ke" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"Kn" = ( +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"KH" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + dir = 4 + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/bar) +"KQ" = ( +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"KX" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/alarm/alarms_hidden{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"KY" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/reinforced/airless, +/area/space) +"Lo" = ( +/obj/effect/floor_decal/milspec/color/orange/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/engineering) +"LA" = ( +/obj/effect/floor_decal/milspec/color/black/corner, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"LI" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/table/darkglass, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"LS" = ( +/obj/structure/lattice, +/turf/space, +/area/space) +"Mb" = ( +/obj/effect/floor_decal/milspec/color/orange/half{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/engineering) +"Mw" = ( +/turf/simulated/floor/tiled/milspec, +/area/lunaship/park) +"Mx" = ( +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/space, +/area/space) +"MM" = ( +/turf/space/internal_edge/bottomleft, +/area/lunaship/cockpit) +"MV" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"MX" = ( +/obj/machinery/mecha_part_fabricator/pros{ + req_access = list() + }, +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"Nf" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"No" = ( +/turf/simulated/floor/tiled/milspec, +/area/lunaship/bar) +"Np" = ( +/obj/effect/floor_decal/milspec/color/orange/half{ + dir = 8 + }, +/obj/machinery/alarm/alarms_hidden{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/engineering) +"NH" = ( +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_port) +"NQ" = ( +/turf/space/internal_edge/topleft, +/area/lunaship/park) +"NR" = ( +/obj/machinery/atmospherics/binary/pump/on{ + name = "gas pump - air - distro"; + piping_layer = 1 + }, +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"NS" = ( +/obj/structure/closet/walllocker_double/east, +/obj/item/device/nif/protean, +/obj/item/device/nif/protean, +/obj/item/device/nif/protean, +/obj/item/organ/internal/nano/orchestrator, +/obj/item/organ/internal/nano/orchestrator, +/obj/item/organ/internal/nano/orchestrator, +/obj/item/organ/internal/nano/refactory, +/obj/item/organ/internal/nano/refactory, +/obj/item/organ/internal/nano/refactory, +/obj/item/device/mmi/digital/posibrain/nano, +/obj/item/device/mmi/digital/posibrain/nano, +/obj/item/device/mmi/digital/posibrain/nano, +/turf/simulated/floor/wood, +/area/lunaship/office) +"Oa" = ( +/obj/effect/shuttle_landmark/premade/luna_near_fore_port, +/turf/space, +/area/space) +"Oo" = ( +/obj/structure/closet/walllocker_double/east, +/obj/item/capture_crystal/master, +/obj/item/capture_crystal/great, +/obj/item/capture_crystal/great, +/obj/item/capture_crystal/ultra, +/obj/item/capture_crystal/ultra, +/obj/item/capture_crystal, +/obj/item/capture_crystal, +/obj/item/capture_crystal, +/obj/item/capture_crystal, +/turf/simulated/floor/wood, +/area/lunaship/office) +"OG" = ( +/obj/structure/closet/wardrobe, +/obj/item/weapon/storage/part_replacer/adv/discount_bluespace, +/obj/item/weapon/stock_parts/capacitor/omni, +/obj/item/weapon/stock_parts/capacitor/omni, +/obj/item/weapon/stock_parts/capacitor/omni, +/obj/item/weapon/stock_parts/capacitor/omni, +/obj/item/weapon/stock_parts/capacitor/omni, +/obj/item/weapon/stock_parts/manipulator/omni, +/obj/item/weapon/stock_parts/manipulator/omni, +/obj/item/weapon/stock_parts/manipulator/omni, +/obj/item/weapon/stock_parts/manipulator/omni, +/obj/item/weapon/stock_parts/manipulator/omni, +/obj/item/weapon/stock_parts/matter_bin/omni, +/obj/item/weapon/stock_parts/matter_bin/omni, +/obj/item/weapon/stock_parts/matter_bin/omni, +/obj/item/weapon/stock_parts/matter_bin/omni, +/obj/item/weapon/stock_parts/matter_bin/omni, +/obj/item/weapon/stock_parts/scanning_module/omni, +/obj/item/weapon/stock_parts/scanning_module/omni, +/obj/item/weapon/stock_parts/scanning_module/omni, +/obj/item/weapon/stock_parts/scanning_module/omni, +/obj/item/weapon/stock_parts/scanning_module/omni, +/obj/item/weapon/stock_parts/micro_laser/omni, +/obj/item/weapon/stock_parts/micro_laser/omni, +/obj/item/weapon/stock_parts/micro_laser/omni, +/obj/item/weapon/stock_parts/micro_laser/omni, +/obj/item/weapon/stock_parts/micro_laser/omni, +/turf/simulated/floor/wood, +/area/lunaship/office) +"OH" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_port) +"OK" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_port) +"OQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"OX" = ( +/turf/space/internal_edge/right, +/area/lunaship/cockpit) +"Pe" = ( +/obj/machinery/power/apc/hyper{ + alarms_hidden = 1; + dir = 8; + pixel_x = -25; + req_access = list(777) + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/cyan, +/obj/machinery/power/quantumpad, +/obj/structure/railing/grey, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"PJ" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/office) +"PL" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"PS" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced/airless, +/area/space) +"PU" = ( +/obj/effect/shuttle_landmark/premade/luna_near_aft_port, +/turf/space, +/area/space) +"PY" = ( +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"Qa" = ( +/obj/machinery/ion_engine{ + dir = 1 + }, +/turf/simulated/wall/rpshull, +/area/lunaship/engineering) +"Qp" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"Qs" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/cable/cyan{ + icon_state = "0-4" + }, +/obj/machinery/power/rtg/kugelblitz{ + pixel_y = 10 + }, +/turf/simulated/floor/tiled/eris/white/gray_platform, +/area/lunaship/engineering) +"Qu" = ( +/obj/machinery/shipsensors{ + dir = 1; + range = 3.5 + }, +/obj/effect/floor_decal/industrial/warning/full, +/obj/structure/cable/cyan, +/turf/simulated/floor/reinforced/airless, +/area/lunaship/engineering) +"QF" = ( +/obj/machinery/teleport/hub, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"QP" = ( +/turf/simulated/floor/tiled/techmaint, +/area/lunaship/hallway_starboard) +"QU" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"Rd" = ( +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_starboard) +"Rf" = ( +/obj/machinery/light/floortube{ + dir = 4 + }, +/obj/structure/table/bench/wooden, +/turf/simulated/floor/outdoors/grass/heavy{ + outdoors = 0 + }, +/area/lunaship/park) +"Ri" = ( +/turf/simulated/wall/tgmc/durawall, +/area/lunaship/office) +"RA" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"RI" = ( +/obj/structure/table/steel, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_y = 5 + }, +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"RO" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"RQ" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 6 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"RS" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"RX" = ( +/obj/machinery/atmospherics/pipe/tank/air/full, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"Sy" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/white/gray_platform, +/area/lunaship/engineering) +"SC" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/eris/steel/bar_flat, +/area/lunaship/bar) +"SF" = ( +/turf/simulated/floor/carpet/turcarpet, +/area/lunaship/office) +"SN" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/wall/rpshull, +/area/space) +"Tb" = ( +/obj/effect/floor_decal/milspec/color/orange/half{ + dir = 4 + }, +/obj/structure/railing/grey, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/engineering) +"Tc" = ( +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"Ty" = ( +/obj/machinery/computer/ship/sensors{ + req_one_access = list(777) + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"TA" = ( +/obj/structure/hull_corner/long_vert{ + dir = 5 + }, +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/space, +/area/space) +"TY" = ( +/obj/effect/floor_decal/milspec/color/orange/corner{ + dir = 8 + }, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/engineering) +"Uj" = ( +/turf/simulated/floor/tiled/eris/steel/bar_dance{ + opacity = 1 + }, +/area/lunaship/bar) +"UK" = ( +/obj/structure/table/glass, +/obj/item/device/healthanalyzer/advanced{ + pixel_x = -5 + }, +/obj/item/device/healthanalyzer/advanced{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/effect/floor_decal/milspec_sterile/green/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"UM" = ( +/obj/effect/floor_decal/milspec/color/orange/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/engineering) +"UN" = ( +/obj/structure/railing/grey, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"UP" = ( +/obj/structure/hull_corner/long_vert{ + dir = 5 + }, +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/space, +/area/space) +"UR" = ( +/obj/item/modular_computer/console/preset/civilian{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/lunaship/office) +"Vm" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/lunaship/hallway_port) +"Vp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/lunaship/office) +"Vu" = ( +/turf/space/internal_edge/bottomright, +/area/lunaship/cockpit) +"Vx" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/turcarpet, +/area/lunaship/office) +"Vz" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/turcarpet, +/area/lunaship/office) +"VH" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/techfloor/corner{ + dir = 5 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"VV" = ( +/obj/structure/fans/hardlight, +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/eris/steel/panels, +/area/lunaship/hallway_starboard) +"VY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"Wb" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"Wg" = ( +/obj/structure/railing/grey, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"Wm" = ( +/obj/structure/table/steel, +/obj/machinery/recharger{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/cell_charger{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"Wn" = ( +/turf/simulated/wall/rpshull, +/area/space) +"Wp" = ( +/turf/simulated/wall/tgmc/durawall, +/area/lunaship/hallway_starboard) +"Ww" = ( +/obj/machinery/computer/ship/helm{ + req_one_access = list(777) + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"Wz" = ( +/obj/machinery/bodyscanner{ + dir = 4 + }, +/obj/effect/floor_decal/milspec_sterile/green/corner, +/turf/simulated/floor/tiled/milspec/sterile, +/area/lunaship/medical) +"WC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/turcarpet, +/area/lunaship/office) +"WN" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/effect/floor_decal/techfloor/orange, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"WQ" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"Xg" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/steel/bar_flat, +/area/lunaship/bar) +"Xn" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/reinforced/airless, +/area/space) +"Xo" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"Xp" = ( +/obj/effect/floor_decal/milspec/color/orange/half, +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel, +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/engineering) +"Xx" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"XO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"XW" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/power/smes/buildable/hybrid{ + input_attempt = 1; + input_level = 250000; + input_level_max = 250000; + output_level = 190000 + }, +/obj/structure/cable/cyan{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/eris/white/gray_platform, +/area/lunaship/engineering) +"XZ" = ( +/obj/effect/floor_decal/milspec/color/orange/half{ + dir = 8 + }, +/obj/structure/railing/grey, +/obj/machinery/power/apc/hyper{ + alarms_hidden = 1; + dir = 8; + pixel_x = -25; + req_access = list(777) + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable/cyan, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/engineering) +"Yf" = ( +/obj/structure/hull_corner/long_vert{ + dir = 5 + }, +/turf/space, +/area/space) +"YD" = ( +/obj/structure/hull_corner/long_vert{ + dir = 9 + }, +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/space, +/area/space) +"YU" = ( +/turf/simulated/floor/plating/eris/under, +/area/lunaship/engineering) +"Zh" = ( +/obj/machinery/alarm/alarms_hidden{ + pixel_y = 26 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/park) +"Zm" = ( +/obj/structure/lattice, +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/space, +/area/space) +"Zr" = ( +/obj/effect/floor_decal/milspec/color/black/half{ + dir = 10 + }, +/obj/machinery/alarm/alarms_hidden{ + dir = 4; + pixel_x = -26 + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/robotics_bay) +"Zu" = ( +/obj/effect/floor_decal/techfloor/corner{ + dir = 10 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"Zy" = ( +/obj/structure/cable/cyan{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/park) +"ZD" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"ZI" = ( +/obj/effect/floor_decal/milspec/color/orange/half, +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel, +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/engineering) +"ZL" = ( +/turf/simulated/floor/reinforced/airless, +/area/space) +"ZM" = ( +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/wall/rpshull, +/area/space) +"ZN" = ( +/obj/structure/railing/grey, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/lunaship/cockpit) +"ZO" = ( +/obj/structure/bed/chair/bar_stool, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/lunaship/bar) +"ZT" = ( +/obj/effect/shuttle_landmark/premade/luna_near_fore, +/turf/space, +/area/space) +"ZX" = ( +/obj/structure/cable/cyan{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/cyan{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/milspec, +/area/lunaship/hallway_starboard) + +(1,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +ik +"} +(2,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(3,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(4,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(5,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(6,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(7,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(8,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(9,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(10,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(11,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(12,1,1) = {" +si +si +si +si +si +si +si +si +si +si +Oa +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +tf +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +PU +si +si +si +si +si +si +si +si +si +si +si +"} +(13,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +px +Zm +dl +Wn +ZL +ZL +Wn +LS +TA +Ad +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(14,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +cj +um +wM +wM +GI +KY +wM +wM +pV +si +Yf +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(15,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +qx +wM +wM +Gu +ZL +LS +ZL +PS +LS +ZL +ZM +wM +wM +Cf +Yf +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(16,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +px +ER +ER +mx +wM +Gu +si +si +LS +ZL +LS +ZL +PS +LS +ZL +LS +si +si +ZM +wM +Cf +Yf +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(17,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +rA +wM +Gu +ZL +LS +si +si +LS +ZL +qz +ZL +PS +qz +ZL +LS +si +si +si +si +ZM +wM +nC +UP +Ad +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(18,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +qx +wM +yl +Qu +ZL +ZL +LS +sC +sC +sC +sC +uS +AR +Bd +uS +Ri +Ri +Ri +Ri +si +si +LS +ZL +ZM +wM +Cf +Yf +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(19,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +aF +Ge +Gu +si +LS +ZL +ZL +sC +sC +sC +wK +ui +sC +NH +NH +OK +NH +Ri +UR +oS +Ri +Ri +Ri +LS +ZL +LS +si +ZM +wM +Cf +Yf +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(20,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +aF +Wn +CJ +si +si +LS +sC +sC +sC +UK +kM +nc +FU +sC +pO +Ba +Vm +Hz +Ri +gY +Vp +al +pR +Ri +Ri +Ri +LS +si +si +LS +ZM +wM +Fs +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(21,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +aF +Wn +Wn +Iv +si +sC +sC +sC +rX +jK +Ee +Ke +oc +FU +vs +NH +th +CA +NH +PJ +SF +WC +SF +SF +iu +xj +Ri +Ri +Ri +si +LS +ZL +LS +Du +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(22,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +Wn +Wn +si +Iv +LS +sC +sC +gl +he +PL +RS +tm +iN +vt +JW +xg +ih +rK +OH +pj +Vz +Vx +cU +xJ +nZ +SF +jG +Ri +Ri +Ri +Ri +ZL +LS +vU +Ad +si +si +si +si +si +si +si +si +si +si +si +si +"} +(23,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +Iv +LS +sC +ew +Ee +KQ +gT +vy +EK +zr +sZ +sC +nM +xv +zp +GY +Ri +ts +Oo +NS +mr +rD +Vz +xJ +DJ +od +jG +Ri +Ri +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(24,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +px +ER +ER +ER +Hf +sC +sC +Wz +kL +cM +kF +iv +sC +sC +sC +sC +uS +ny +yL +uS +Ri +Ri +Ri +Ri +Ri +OG +SF +sD +Ri +HW +AS +HC +Ri +Ri +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(25,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +ad +ad +ad +ad +ad +ad +Mw +JK +ad +mj +oD +oD +oD +jd +Qp +As +jd +oD +oD +oD +MM +cQ +cQ +Mb +Xp +cQ +cQ +cQ +cQ +cQ +cQ +Qa +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(26,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +ad +ad +ad +NQ +cx +cx +cx +ad +hH +aQ +ad +bP +hr +hr +hr +yw +Kn +Fb +Pe +hr +hr +hr +jF +cQ +Np +Lo +TY +XZ +WN +eE +eE +tB +sN +cQ +Qa +si +si +si +si +si +si +si +si +si +si +si +si +"} +(27,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +ad +ad +NQ +NQ +NQ +Ag +Ag +Ag +gZ +gC +ku +ad +bP +hr +qI +hr +vE +BT +bD +Zu +yX +hr +hr +jF +cQ +Jv +qn +aL +Wg +kI +eE +eE +eE +lZ +cQ +Qa +si +si +si +si +si +si +si +si +si +si +si +si +"} +(28,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +ad +NQ +NQ +Ag +Ag +Ag +EG +GQ +gC +gC +ku +ad +bP +jT +Zu +ab +ls +WQ +lW +hA +UN +hr +hr +jF +cQ +vO +zE +ns +YU +kI +eE +eE +eE +mm +cQ +Qa +si +si +si +si +si +si +si +si +si +si +si +si +"} +(29,1,1) = {" +si +si +si +si +si +si +si +si +si +ZT +si +ad +ad +bj +Ag +Ag +EG +gC +gC +gC +gC +gC +ku +ad +bP +Ty +uQ +Kn +jT +ab +uW +qI +Kn +QF +hr +jF +cQ +dN +XO +yQ +Xo +yB +eE +eE +eE +cQ +Qa +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(30,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +ad +ad +bj +Ag +Ag +sa +gC +gC +gC +gC +gC +ku +ad +bP +Ww +uQ +Kn +vE +hr +lb +Tc +kZ +zB +hr +jF +cQ +YU +YU +PY +VY +OQ +eE +eE +eE +cQ +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(31,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +ad +ad +bj +Ag +Ag +EG +gC +gC +gC +gC +Hv +ku +ad +bP +EP +uQ +Kn +Ar +eO +eO +Xx +Kn +vB +hr +jF +cQ +RX +sU +NR +Xo +wZ +eE +eE +eE +cQ +Qa +si +si +zm +si +si +si +si +si +si +si +si +si +si +"} +(32,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +ad +il +il +Ag +Ag +Ag +EG +Rf +gC +gC +ku +ad +bP +Ar +RQ +eO +VH +Wb +Nf +sx +UN +hr +hr +jF +cQ +ix +RO +RA +vw +dB +hs +IJ +IJ +zW +cQ +Qa +si +si +si +si +si +si +si +si +si +si +si +si +"} +(33,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +ad +ad +il +il +il +Ag +Ag +Ag +gp +gC +ku +ad +bP +hr +Xx +hr +vE +MV +sx +RQ +GP +hr +hr +jF +cQ +Jv +QU +rZ +Wg +Iz +XW +Sy +Qs +YU +cQ +Qa +si +si +si +si +si +si +si +si +si +si +si +si +"} +(34,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +ad +ad +ad +il +uq +uq +uq +ad +Zh +Zy +ad +bP +hr +hr +hr +ZD +Kn +Kn +ZN +hr +hr +hr +jF +cQ +lI +UM +sV +Tb +DP +do +EZ +fT +YU +cQ +Qa +si +si +si +si +si +si +si +si +si +si +si +si +"} +(35,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +ad +ad +ad +ad +ad +ad +Mw +rB +ad +bU +OX +OX +OX +jd +kd +Aa +jd +OX +OX +OX +Vu +cQ +cQ +Mb +ZI +cQ +cQ +cQ +cQ +cQ +cQ +Qa +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(36,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +px +ER +ER +ER +Zm +ve +ve +bx +Fh +oG +Xg +Uj +ve +ve +ve +ve +Wp +Cw +xa +Wp +EF +EF +EF +EF +EF +rv +ng +Ak +aV +Zr +EH +EH +EF +EF +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(37,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +Iv +LS +ve +cK +pN +Fh +Xg +Fh +vi +fE +JM +ve +FV +rh +Ia +jQ +EF +hu +Dm +Wm +vQ +sW +HR +nr +RI +mf +EH +EF +EF +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(38,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +Wn +Wn +si +Iv +LS +ve +iq +na +yH +SC +gj +fc +zJ +nn +KH +wd +aY +vD +ZX +vW +iw +Ez +Bg +gc +hR +EH +EH +EH +EF +EF +EF +ZL +LS +oj +Ad +si +si +si +si +si +si +si +si +si +si +si +si +"} +(39,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +iA +Wn +Wn +Iv +si +ve +ve +ve +KX +yh +ZO +in +iQ +oG +No +Rd +sT +Eg +Rd +jz +wy +GT +Ca +LA +mp +Ih +EF +EF +EF +si +LS +ZL +LS +Du +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(40,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +iA +Wn +CJ +si +si +LS +ve +ve +ve +lP +Ao +fv +ZO +ve +fd +QP +af +Hh +EF +wy +GT +MX +qB +EF +EF +EF +LS +si +si +LS +Ge +wM +Gn +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(41,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +iA +ZM +rn +si +LS +ZL +ZL +ve +bp +ve +LI +bF +ve +Rd +Rd +bK +Rd +EF +iB +lm +EF +EF +EF +LS +ZL +LS +si +Ge +wM +EQ +pT +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(42,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +Dt +wM +tW +Qu +ZL +ZL +LS +ve +ve +ve +ve +Wp +zl +VV +Wp +EF +EF +EF +EF +si +si +LS +ZL +Ge +wM +EQ +pT +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(43,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +gI +wM +rn +ZL +LS +si +si +LS +ZL +qz +ZL +PS +qz +ZL +LS +si +si +si +si +Ge +wM +Mx +by +Ad +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(44,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +px +ER +ER +tl +wM +rn +si +si +LS +ZL +LS +ZL +PS +LS +ZL +LS +si +si +Ge +wM +EQ +pT +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(45,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +Dt +wM +wM +rn +ZL +LS +ZL +PS +LS +ZL +Ge +wM +wM +EQ +pT +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(46,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +zG +SN +wM +wM +GI +Xn +wM +wM +Jn +si +pT +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(47,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +px +Hf +JT +Wn +ZL +ZL +Wn +LS +YD +Ad +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(48,1,1) = {" +si +si +si +si +si +si +si +si +si +si +mV +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +xd +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +iK +si +si +si +si +si +si +si +si +si +si +si +"} +(49,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(50,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(51,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(52,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(53,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(54,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(55,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(56,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(57,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(58,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(59,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} +(60,1,1) = {" +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +si +"} diff --git a/maps/offmap_vr/talon/talon_v2.dmm b/maps/offmap_vr/talon/talon_v2.dmm index fae0f00c0f..02291ceeea 100644 --- a/maps/offmap_vr/talon/talon_v2.dmm +++ b/maps/offmap_vr/talon/talon_v2.dmm @@ -1252,7 +1252,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated/dark, +/obj/effect/catwalk_plated/techfloor, /turf/simulated/floor/plating, /area/talon_v2/central_hallway/fore) "dw" = ( @@ -1559,6 +1559,7 @@ /area/talon_v2/central_hallway/fore) "eC" = ( /obj/structure/closet/walllocker_double/hydrant/west, +/obj/machinery/light/small, /turf/simulated/floor/tiled/techfloor/grid, /area/talon_v2/engineering/star_store) "eD" = ( @@ -1852,7 +1853,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/catwalk_plated/dark, +/obj/effect/catwalk_plated/techfloor, /turf/simulated/floor/plating, /area/talon_v2/central_hallway/fore) "fi" = ( @@ -1962,6 +1963,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/light, /turf/simulated/floor/wood, /area/talon_v2/crew_quarters/cap_room) "fA" = ( @@ -2195,7 +2197,7 @@ }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/catwalk_plated/dark, +/obj/effect/catwalk_plated/techfloor, /turf/simulated/floor/plating, /area/talon_v2/central_hallway/fore) "gu" = ( @@ -3375,7 +3377,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/catwalk_plated/dark, +/obj/effect/catwalk_plated/techfloor, /turf/simulated/floor/plating, /area/shuttle/talonboat) "kw" = ( @@ -3461,7 +3463,7 @@ dir = 5 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/effect/catwalk_plated/dark, +/obj/effect/catwalk_plated/techfloor, /turf/simulated/floor/plating, /area/shuttle/talonboat) "kJ" = ( @@ -4215,11 +4217,11 @@ "nn" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway) "no" = ( @@ -4684,6 +4686,13 @@ }, /turf/simulated/floor/tiled/techfloor, /area/talon_v2/workroom) +"oP" = ( +/obj/structure/table/rack/shelf/steel, +/obj/random/maintenance/cargo, +/obj/random/maintenance/cargo, +/obj/item/weapon/storage/box/lights/mixed, +/turf/simulated/floor/tiled/techfloor, +/area/talon_v2/gen_store) "oS" = ( /obj/structure/disposalpipe/segment{ dir = 1 @@ -5585,9 +5594,6 @@ /turf/simulated/floor/plating, /area/talon_v2/engineering/port_store) "rQ" = ( -/obj/machinery/light/small{ - dir = 1 - }, /obj/structure/toilet, /turf/simulated/floor/tiled/white, /area/talon_v2/crew_quarters/restrooms) @@ -5702,10 +5708,10 @@ d2 = 4; icon_state = "1-4" }, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/brig) "sk" = ( @@ -5778,10 +5784,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway) "ss" = ( @@ -6024,11 +6030,11 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway/star) "tb" = ( @@ -6425,6 +6431,22 @@ "up" = ( /turf/simulated/wall/rshull, /area/talon_v2/anomaly_storage) +"uq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/talon_v2/central_hallway/fore) "uu" = ( /obj/structure/hull_corner/long_vert{ dir = 9 @@ -6880,6 +6902,9 @@ dir = 10 }, /obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/talon_v2/engineering/atmospherics) "vR" = ( @@ -7911,6 +7936,9 @@ /obj/machinery/disposal/wall{ dir = 8 }, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/wood, /area/talon_v2/crew_quarters/med_room) "zv" = ( @@ -7991,6 +8019,9 @@ /obj/machinery/disposal/wall{ dir = 4 }, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/wood, /area/talon_v2/crew_quarters/sec_room) "zI" = ( @@ -8285,11 +8316,11 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway/fore) "AQ" = ( @@ -8644,6 +8675,9 @@ /obj/item/device/radio/off{ channels = list("Talon" = 1) }, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/wood, /area/talon_v2/crew_quarters/pilot_room) "Cf" = ( @@ -8698,7 +8732,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -8706,6 +8739,7 @@ /obj/structure/sign/directions/engineering/atmospherics{ pixel_x = -32 }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway) "CB" = ( @@ -9126,7 +9160,7 @@ /area/talon_v2/bridge) "Ec" = ( /obj/machinery/door/airlock/maintenance/cargo{ - id_tag = talon_minerdoor; + id_tag = "talon_minerdoor"; req_one_access = list(301) }, /turf/simulated/floor/plating, @@ -9158,7 +9192,7 @@ /area/talon_v2/armory) "Ei" = ( /obj/machinery/door/airlock/mining{ - id_tag = talon_minerdoor; + id_tag = "talon_minerdoor"; name = "Miner's Cabin"; req_one_access = list(301) }, @@ -9188,6 +9222,15 @@ }, /turf/simulated/floor/wood, /area/talon_v2/crew_quarters/pilot_room) +"Em" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/talon_v2/central_hallway/fore) "En" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -9495,12 +9538,12 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/effect/catwalk_plated, /obj/structure/cable/green{ d1 = 2; d2 = 8; icon_state = "2-8" }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway/star) "Ff" = ( @@ -9883,7 +9926,6 @@ "Gm" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -9892,6 +9934,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway/port) "Gn" = ( @@ -10418,7 +10461,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/junction, /obj/structure/sign/directions/engineering{ pixel_x = 32; @@ -10439,6 +10481,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway) "HN" = ( @@ -10470,7 +10513,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/junction{ dir = 2; icon_state = "pipe-j2" @@ -10485,6 +10527,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway) "HU" = ( @@ -10933,7 +10976,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/effect/catwalk_plated, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway/fore) "IY" = ( @@ -11157,6 +11200,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, +/obj/machinery/light/small, /turf/simulated/floor/tiled/white, /area/talon_v2/crew_quarters/restrooms) "JJ" = ( @@ -11947,13 +11991,13 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/structure/sign/department/medbay{ pixel_y = 32 }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway/star) "LV" = ( @@ -12408,6 +12452,9 @@ }, /obj/effect/map_helper/airlock/atmos/chamber_pump, /obj/structure/closet/walllocker_double/survival/south, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/talonboat) "Nw" = ( @@ -12431,13 +12478,15 @@ /area/shuttle/talonboat) "NB" = ( /obj/structure/closet/walllocker_double/south, -/obj/machinery/light, /obj/item/weapon/extinguisher, /obj/item/stack/cable_coil/green, /obj/item/stack/cable_coil/green, /obj/machinery/atmospherics/pipe/simple/hidden/fuel, /obj/effect/map_helper/airlock/atmos/pump_out_internal, /obj/machinery/atmospherics/unary/vent_pump/high_volume, +/obj/structure/handrail{ + dir = 1 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/talonboat) "NC" = ( @@ -12515,6 +12564,9 @@ }, /obj/effect/map_helper/airlock/atmos/chamber_pump, /obj/structure/closet/walllocker_double/survival/south, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/talonboat) "NO" = ( @@ -14459,7 +14511,6 @@ "TW" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/effect/catwalk_plated, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -14473,6 +14524,7 @@ dir = 4; icon_state = "pipe-c" }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway/port) "TX" = ( @@ -14846,7 +14898,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -14855,6 +14906,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway/port) "Vh" = ( @@ -15543,7 +15595,6 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -15553,6 +15604,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway/fore) "Xo" = ( @@ -15700,10 +15752,10 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/catwalk_plated, /obj/structure/disposalpipe/junction{ dir = 8 }, +/obj/effect/catwalk_plated/techmaint, /turf/simulated/floor/plating, /area/talon_v2/central_hallway/star) "XS" = ( @@ -22911,7 +22963,7 @@ xL LL xB OQ -LT +oP kk LT OQ @@ -25715,7 +25767,7 @@ ZC WL yt EN -Rs +dT Pe pb Xy @@ -25880,7 +25932,7 @@ lr lZ SQ Xn -mc +uq mc mk an @@ -26732,7 +26784,7 @@ tj mk ru sD -DG +Em DG qb Fd diff --git a/maps/overmap/space_pois/abandonedtele.dmm b/maps/overmap/space_pois/abandonedtele_13x12.dmm similarity index 100% rename from maps/overmap/space_pois/abandonedtele.dmm rename to maps/overmap/space_pois/abandonedtele_13x12.dmm diff --git a/maps/overmap/space_pois/abandonedzoo.dmm b/maps/overmap/space_pois/abandonedzoo.dmm deleted file mode 100644 index 42812c35b6..0000000000 --- a/maps/overmap/space_pois/abandonedzoo.dmm +++ /dev/null @@ -1,1181 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/obj/machinery/shieldwallgen{ - active = 2; - anchored = 1; - power = 1 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"ac" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/wingrille_spawn/reinforced, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"ad" = ( -/obj/machinery/shieldwallgen{ - active = 2; - anchored = 1; - power = 1 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"ae" = ( -/obj/machinery/shieldwallgen{ - active = 2; - anchored = 1; - power = 1 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - tag = "" - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"af" = ( -/obj/machinery/shieldwallgen{ - active = 2; - anchored = 1; - power = 1 - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"ag" = ( -/obj/effect/wingrille_spawn/reinforced, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"ah" = ( -/turf/simulated/mineral, -/area/submap/abandonedzoo) -"aj" = ( -/mob/living/simple_mob/vore/solargrub, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/submap/abandonedzoo) -"ak" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/wingrille_spawn/reinforced, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"al" = ( -/obj/structure/flora/ausbushes/genericbush, -/turf/simulated/floor/grass2, -/area/submap/abandonedzoo) -"am" = ( -/mob/living/simple_mob/metroid/juvenile/baby, -/turf/simulated/floor/grass2, -/area/submap/abandonedzoo) -"an" = ( -/turf/simulated/floor/grass2, -/area/submap/abandonedzoo) -"ao" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/turf/simulated/floor/grass2, -/area/submap/abandonedzoo) -"ap" = ( -/mob/living/simple_mob/vore/oregrub, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/submap/abandonedzoo) -"aq" = ( -/obj/structure/flora/ausbushes/grassybush, -/turf/simulated/floor/grass2, -/area/submap/abandonedzoo) -"as" = ( -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/submap/abandonedzoo) -"au" = ( -/obj/structure/flora/ausbushes/leafybush, -/turf/simulated/floor/grass2, -/area/submap/abandonedzoo) -"av" = ( -/obj/structure/flora/ausbushes/brflowers, -/mob/living/simple_mob/metroid/juvenile/baby, -/turf/simulated/floor/grass2, -/area/submap/abandonedzoo) -"aw" = ( -/obj/machinery/light, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/submap/abandonedzoo) -"ax" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/mask/surgical, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"ay" = ( -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/abandonedzoo) -"az" = ( -/obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 4 - }, -/obj/random/maintenance, -/obj/random/maintenance, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aA" = ( -/obj/structure/flora/ausbushes/ywflowers, -/turf/simulated/floor/grass2, -/area/submap/abandonedzoo) -"aB" = ( -/obj/machinery/light, -/turf/simulated/floor/grass2, -/area/submap/abandonedzoo) -"aC" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/simulated/floor/grass2, -/area/submap/abandonedzoo) -"aD" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/highsecurity{ - name = "Bio Containment"; - req_one_access_txt = "47" - }, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aE" = ( -/obj/machinery/shieldwallgen{ - active = 2; - anchored = 1; - power = 1 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - tag = "" - }, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"aF" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall/r_wall, -/area/submap/abandonedzoo) -"aG" = ( -/obj/structure/table/reinforced, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/weapon/gun/energy/floragun, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/abandonedzoo) -"aI" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/med_data/laptop, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aJ" = ( -/obj/machinery/shieldwallgen{ - active = 2; - anchored = 1; - power = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8"; - tag = "" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"aK" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/template_noop, -/area/template_noop) -"aL" = ( -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aM" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall/r_wall, -/area/submap/abandonedzoo) -"aN" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/folder/white_rd, -/obj/item/weapon/pen/blade, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aO" = ( -/obj/structure/bed/chair/bay/comfy/beige{ - dir = 8 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/abandonedzoo) -"aP" = ( -/obj/structure/table/reinforced, -/obj/item/slimepotion/enhancer, -/obj/item/weapon/reagent_containers/dropper/industrial, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aQ" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/template_noop, -/area/template_noop) -"aR" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aS" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/obj/structure/table/rack/shelf/steel, -/obj/random/maintenance, -/obj/random/maintenance, -/obj/random/maintenance, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aT" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/clothing/suit/space/rig/military, -/obj/item/weapon/tank/emergency/oxygen/double, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aU" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/table/rack/shelf/steel, -/obj/item/weapon/shield/riot, -/obj/item/weapon/tool/crowbar/hybrid, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aV" = ( -/obj/machinery/smartfridge/chemistry, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aW" = ( -/obj/structure/table/reinforced, -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aX" = ( -/obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/grenade/chem_grenade{ - pixel_x = 3; - pixel_y = 5 - }, -/obj/item/weapon/grenade/chem_grenade{ - pixel_x = -4; - pixel_y = 5 - }, -/obj/item/weapon/grenade/chem_grenade, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aY" = ( -/obj/structure/table/reinforced, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/item/weapon/gun/energy/temperature, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"aZ" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/shovel, -/obj/item/weapon/material/minihoe, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"ba" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bb" = ( -/obj/machinery/door/airlock/hatch{ - name = "Bio-Research Station" - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/plating/external, -/area/submap/abandonedzoo) -"bc" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/abandonedzoo) -"bd" = ( -/obj/machinery/power/terminal, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/abandonedzoo) -"be" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bf" = ( -/obj/structure/cable, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/power/smes/buildable/hybrid, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bg" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bh" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bi" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/reagent_containers/glass/bottle/mutagen, -/obj/item/weapon/reagent_containers/dropper/industrial, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bj" = ( -/obj/structure/table/reinforced, -/obj/machinery/light, -/obj/item/weapon/surgical/circular_saw{ - pixel_y = 8 - }, -/obj/item/weapon/surgical/scalpel, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bk" = ( -/obj/machinery/optable, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bl" = ( -/obj/machinery/computer/operating, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bm" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bn" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bo" = ( -/obj/machinery/shieldwallgen{ - active = 2; - anchored = 1; - power = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8"; - tag = "" - }, -/obj/structure/cable, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bp" = ( -/obj/structure/bed, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bq" = ( -/obj/item/stack/cable_coil/cut, -/obj/item/weapon/tool/wirecutters/hybrid, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"br" = ( -/obj/structure/table/reinforced, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bs" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/shieldwallgen, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bt" = ( -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/shieldwallgen, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bu" = ( -/obj/structure/flora/ausbushes/sunnybush, -/turf/simulated/floor/grass, -/area/submap/abandonedzoo) -"bv" = ( -/mob/living/simple_mob/animal/space/carp, -/turf/simulated/floor/grass, -/area/submap/abandonedzoo) -"bw" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/grass, -/area/submap/abandonedzoo) -"bx" = ( -/obj/structure/flora/ausbushes/palebush, -/turf/simulated/floor/grass, -/area/submap/abandonedzoo) -"by" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/wall/r_wall, -/area/submap/abandonedzoo) -"bz" = ( -/obj/machinery/space_heater, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bA" = ( -/obj/structure/table/reinforced, -/obj/machinery/reagentgrinder, -/turf/simulated/floor/tiled/dark, -/area/submap/abandonedzoo) -"bB" = ( -/obj/effect/alien/weeds, -/obj/structure/alien/egg, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bC" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/alien/weeds/node, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bD" = ( -/obj/effect/alien/weeds, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bE" = ( -/obj/structure/flora/ausbushes/sparsegrass, -/turf/simulated/floor/grass, -/area/submap/abandonedzoo) -"bF" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/wall/r_wall, -/area/submap/abandonedzoo) -"bG" = ( -/obj/machinery/door/airlock/external, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/plating/external, -/area/submap/abandonedzoo) -"bH" = ( -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bI" = ( -/obj/structure/flora/ausbushes/reedbush, -/turf/simulated/floor/grass, -/area/submap/abandonedzoo) -"bJ" = ( -/turf/simulated/floor/grass, -/area/submap/abandonedzoo) -"bK" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bL" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating/external, -/area/submap/abandonedzoo) -"bM" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating/external, -/area/submap/abandonedzoo) -"bN" = ( -/obj/structure/grille/broken, -/obj/item/weapon/material/shard, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bO" = ( -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bP" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/submap/abandonedzoo) -"bQ" = ( -/obj/machinery/shieldwallgen{ - active = 2; - anchored = 1; - power = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8"; - tag = "" - }, -/obj/structure/cable, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bR" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/disposaloutlet, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bS" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable, -/obj/machinery/shieldwallgen, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bT" = ( -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bU" = ( -/obj/structure/grille/broken, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"bV" = ( -/obj/machinery/shieldwallgen, -/turf/template_noop, -/area/space) -"bW" = ( -/obj/random/outcrop, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/submap/abandonedzoo) -"hU" = ( -/turf/template_noop, -/area/submap/abandonedzoo) -"oC" = ( -/mob/living/simple_mob/animal/passive/crab, -/turf/simulated/floor/grass, -/area/submap/abandonedzoo) -"qZ" = ( -/obj/machinery/door/firedoor/glass, -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"Ed" = ( -/obj/item/weapon/material/shard, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"Hv" = ( -/turf/simulated/wall/r_wall, -/area/submap/abandonedzoo) -"Nd" = ( -/obj/effect/alien/weeds/node, -/turf/simulated/floor/plating, -/area/submap/abandonedzoo) -"XG" = ( -/mob/living/simple_mob/vore/oregrub/lava, -/turf/simulated/mineral/floor/ignore_mapgen/cave, -/area/submap/abandonedzoo) - -(1,1,1) = {" -aa -ab -ag -ag -ag -ag -ab -aa -aa -aa -aa -aa -aa -ab -ag -ag -ag -ag -ab -aa -"} -(2,1,1) = {" -aa -ac -ah -bW -as -ah -ac -aK -aK -aK -aK -aK -aK -ac -bu -bJ -bI -bJ -ac -aa -"} -(3,1,1) = {" -aa -ac -ah -ap -as -XG -aD -aL -aR -aL -aL -aR -aL -aD -bv -oC -bJ -bJ -ac -aa -"} -(4,1,1) = {" -aa -ac -as -ah -as -aw -ac -Hv -Hv -bb -bb -Hv -Hv -ac -bw -bJ -bJ -oC -ac -aa -"} -(5,1,1) = {" -aa -ac -aj -as -as -bW -ac -Hv -aS -ay -ay -be -Hv -ac -bx -bE -bv -bJ -ac -aa -"} -(6,1,1) = {" -aa -ad -ak -ak -ak -ak -aE -aM -aT -bc -bd -bf -aM -bo -ak -ak -ak -ak -bQ -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -Hv -Hv -aF -Hv -aU -ay -ay -bg -Hv -aF -by -bF -bK -bK -bR -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -qZ -ax -aG -aN -aV -ay -ay -bh -bm -bp -bz -Hv -Hv -Hv -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -qZ -ay -aH -aO -ay -ay -ay -ay -ay -aH -ay -bG -bL -bG -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -qZ -ay -aH -ay -ay -ay -ay -ay -ay -bq -ay -bG -bM -bG -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -qZ -az -aI -aP -aW -ay -ay -bi -bn -br -bA -Hv -Hv -Hv -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -Hv -Hv -aF -Hv -aX -ay -ay -bj -Hv -aF -Hv -Hv -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -ae -ak -ak -ak -ak -aJ -Hv -aY -ay -ay -bk -Hv -bs -ak -ak -ak -ak -bS -aa -"} -(14,1,1) = {" -aa -ac -al -an -am -aA -ac -Hv -aZ -ay -ay -bl -Hv -ac -bB -bD -Nd -bH -ac -aa -"} -(15,1,1) = {" -aa -ac -am -an -ao -aB -ac -Hv -Hv -bb -bb -Hv -Hv -ac -bC -bH -bH -bH -bT -aa -"} -(16,1,1) = {" -aa -ac -an -aq -au -an -aD -aL -ba -aL -aL -ba -aL -aD -bD -bD -Ed -bO -bU -aa -"} -(17,1,1) = {" -aa -ac -ao -an -av -aC -ac -aQ -aQ -aQ -aQ -aQ -aQ -ac -bD -bB -bH -bO -bP -aa -"} -(18,1,1) = {" -aa -af -ak -ak -ak -ak -af -aa -aa -aa -aa -aa -aa -bt -ag -ag -bN -bP -hU -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bV -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/overmap/space_pois/abandonedzoo_20x20.dmm b/maps/overmap/space_pois/abandonedzoo_20x20.dmm new file mode 100644 index 0000000000..318f8e4e00 --- /dev/null +++ b/maps/overmap/space_pois/abandonedzoo_20x20.dmm @@ -0,0 +1,128 @@ +"aa" = (/turf/template_noop,/area/template_noop) +"ab" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"ac" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"ad" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"ae" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"af" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"ag" = (/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"ah" = (/turf/simulated/mineral,/area/submap/abandonedzoo) +"aj" = (/mob/living/simple_mob/vore/solargrub,/turf/simulated/mineral/floor/ignore_mapgen/cave,/area/submap/abandonedzoo) +"ak" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"al" = (/obj/structure/flora/ausbushes/genericbush,/turf/simulated/floor/grass2,/area/submap/abandonedzoo) +"am" = (/mob/living/simple_mob/metroid/juvenile/baby,/turf/simulated/floor/grass2,/area/submap/abandonedzoo) +"an" = (/turf/simulated/floor/grass2,/area/submap/abandonedzoo) +"ao" = (/obj/structure/flora/ausbushes/lavendergrass,/turf/simulated/floor/grass2,/area/submap/abandonedzoo) +"ap" = (/mob/living/simple_mob/vore/oregrub,/turf/simulated/mineral/floor/ignore_mapgen/cave,/area/submap/abandonedzoo) +"aq" = (/obj/structure/flora/ausbushes/grassybush,/turf/simulated/floor/grass2,/area/submap/abandonedzoo) +"as" = (/turf/simulated/mineral/floor/ignore_mapgen/cave,/area/submap/abandonedzoo) +"au" = (/obj/structure/flora/ausbushes/leafybush,/turf/simulated/floor/grass2,/area/submap/abandonedzoo) +"av" = (/obj/structure/flora/ausbushes/brflowers,/mob/living/simple_mob/metroid/juvenile/baby,/turf/simulated/floor/grass2,/area/submap/abandonedzoo) +"aw" = (/obj/machinery/light,/turf/simulated/mineral/floor/ignore_mapgen/cave,/area/submap/abandonedzoo) +"ax" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/surgical,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"ay" = (/turf/simulated/floor/tiled/asteroid_steel,/area/submap/abandonedzoo) +"az" = (/obj/structure/table/reinforced,/obj/machinery/light{dir = 4},/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aA" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass2,/area/submap/abandonedzoo) +"aB" = (/obj/machinery/light,/turf/simulated/floor/grass2,/area/submap/abandonedzoo) +"aC" = (/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass2,/area/submap/abandonedzoo) +"aD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/highsecurity{name = "Bio Containment"; req_one_access_txt = "47"},/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aE" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"aF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/submap/abandonedzoo) +"aG" = (/obj/structure/table/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/gun/energy/floragun,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/abandonedzoo) +"aI" = (/obj/structure/table/reinforced,/obj/machinery/computer/med_data/laptop,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aJ" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"aK" = (/obj/structure/window/reinforced{dir = 4},/turf/template_noop,/area/template_noop) +"aL" = (/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/submap/abandonedzoo) +"aN" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/white_rd,/obj/item/weapon/pen/blade,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aO" = (/obj/structure/bed/chair/bay/comfy/beige{dir = 8},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/abandonedzoo) +"aP" = (/obj/structure/table/reinforced,/obj/item/slimepotion/enhancer,/obj/item/weapon/reagent_containers/dropper/industrial,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aQ" = (/obj/structure/window/reinforced{dir = 8},/turf/template_noop,/area/template_noop) +"aR" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aS" = (/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/table/rack/shelf/steel,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aT" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/rack/shelf/steel,/obj/item/clothing/suit/space/rig/military,/obj/item/weapon/tank/emergency/oxygen/double,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aU" = (/obj/machinery/light{dir = 1},/obj/structure/table/rack/shelf/steel,/obj/item/weapon/shield/riot,/obj/item/weapon/tool/crowbar/hybrid,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aV" = (/obj/machinery/smartfridge/chemistry,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aW" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aX" = (/obj/structure/table/reinforced,/obj/machinery/light{dir = 1},/obj/item/weapon/grenade/chem_grenade{pixel_x = 3; pixel_y = 5},/obj/item/weapon/grenade/chem_grenade{pixel_x = -4; pixel_y = 5},/obj/item/weapon/grenade/chem_grenade,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aY" = (/obj/structure/table/reinforced,/obj/machinery/firealarm{pixel_y = 24},/obj/item/weapon/gun/energy/temperature,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"aZ" = (/obj/structure/table/reinforced,/obj/item/weapon/shovel,/obj/item/weapon/material/minihoe,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"ba" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bb" = (/obj/machinery/door/airlock/hatch{name = "Bio-Research Station"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating/external,/area/submap/abandonedzoo) +"bc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/abandonedzoo) +"bd" = (/obj/machinery/power/terminal,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/abandonedzoo) +"be" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bf" = (/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/power/smes/buildable/hybrid,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bg" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bh" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bi" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/bottle/mutagen,/obj/item/weapon/reagent_containers/dropper/industrial,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bj" = (/obj/structure/table/reinforced,/obj/machinery/light,/obj/item/weapon/surgical/circular_saw{pixel_y = 8},/obj/item/weapon/surgical/scalpel,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bk" = (/obj/machinery/optable,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bl" = (/obj/machinery/computer/operating,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bm" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bn" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/snacks/slice/bigbeanburrito,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bo" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bp" = (/obj/structure/bed,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bq" = (/obj/item/stack/cable_coil/cut,/obj/item/weapon/tool/wirecutters/hybrid,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"br" = (/obj/structure/table/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/microwave,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bs" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/shieldwallgen,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bt" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/shieldwallgen,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bu" = (/obj/structure/flora/ausbushes/sunnybush,/turf/simulated/floor/grass,/area/submap/abandonedzoo) +"bv" = (/mob/living/simple_mob/animal/space/carp,/turf/simulated/floor/grass,/area/submap/abandonedzoo) +"bw" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/grass,/area/submap/abandonedzoo) +"bx" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/grass,/area/submap/abandonedzoo) +"by" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/submap/abandonedzoo) +"bz" = (/obj/machinery/space_heater,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bA" = (/obj/structure/table/reinforced,/obj/machinery/reagentgrinder,/turf/simulated/floor/tiled/dark,/area/submap/abandonedzoo) +"bB" = (/obj/effect/alien/weeds,/obj/structure/alien/egg,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bC" = (/obj/machinery/light{dir = 1},/obj/effect/alien/weeds/node,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bD" = (/obj/effect/alien/weeds,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bE" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/submap/abandonedzoo) +"bF" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/submap/abandonedzoo) +"bG" = (/obj/machinery/door/airlock/external,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating/external,/area/submap/abandonedzoo) +"bH" = (/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bI" = (/obj/structure/flora/ausbushes/reedbush,/turf/simulated/floor/grass,/area/submap/abandonedzoo) +"bJ" = (/turf/simulated/floor/grass,/area/submap/abandonedzoo) +"bK" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bL" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating/external,/area/submap/abandonedzoo) +"bM" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating/external,/area/submap/abandonedzoo) +"bN" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bO" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bP" = (/obj/structure/lattice,/turf/template_noop,/area/submap/abandonedzoo) +"bQ" = (/obj/machinery/shieldwallgen{active = 2; anchored = 1; power = 1},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bR" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bS" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable,/obj/machinery/shieldwallgen,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bT" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bU" = (/obj/structure/grille/broken,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"bV" = (/obj/machinery/shieldwallgen,/turf/template_noop,/area/template_noop) +"bW" = (/obj/random/outcrop,/turf/simulated/mineral/floor/ignore_mapgen/cave,/area/submap/abandonedzoo) +"hU" = (/turf/template_noop,/area/submap/abandonedzoo) +"oC" = (/mob/living/simple_mob/animal/passive/crab,/turf/simulated/floor/grass,/area/submap/abandonedzoo) +"qZ" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"Ed" = (/obj/item/weapon/material/shard,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"Hv" = (/turf/simulated/wall/r_wall,/area/submap/abandonedzoo) +"Nd" = (/obj/effect/alien/weeds/node,/turf/simulated/floor/plating,/area/submap/abandonedzoo) +"XG" = (/mob/living/simple_mob/vore/oregrub/lava,/turf/simulated/mineral/floor/ignore_mapgen/cave,/area/submap/abandonedzoo) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaabacacacacadaaaaaaaaaaaaaeacacacacafaa +aaagahahasajakaaaaaaaaaaaaakalamanaoakaa +aaagbWapahasakaaaaaaaaaaaaakananaqanakaa +aaagasasasasakHvqZqZqZqZHvakamaoauavakaa +aaagahXGawbWakHvaxayayazHvakaAaBanaCakaa +aaabacaDacacaEaFaGaHaHaIaFaJacacaDacafaa +aaaaaKaLHvHvaMHvaNaOayaPHvHvHvHvaLaQaaaa +aaaaaKaRHvaSaTaUaVayayaWaXaYaZHvbaaQaaaa +aaaaaKaLbbaybcayayayayayayayaybbaLaQaaaa +aaaaaKaLbbaybdayayayayayayayaybbaLaQaaaa +aaaaaKaRHvbebfbgbhayaybibjbkblHvbaaQaaaa +aaaaaKaLHvHvaMHvbmayaybnHvHvHvHvaLaQaaaa +aaabacaDacacboaFbpaHbqbraFbsacacaDacbtaa +aaagbubvbwbxakbybzayaybAHvakbBbCbDbDagaa +aaagbJoCbJbEakbFHvbGbGHvHvakbDbHbDbBagaa +aaagbIbJbJbvakbKHvbLbMHvaaakNdbHEdbHbNaa +aaagbJbJoCbJakbKHvbGbGHvaaakbHbHbObObPaa +aaabacacacacbQbRaaaaaaaaaabSacbTbUbPhUbV +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/overmap/space_pois/asteroid1.dmm b/maps/overmap/space_pois/asteroid1_20x20.dmm similarity index 100% rename from maps/overmap/space_pois/asteroid1.dmm rename to maps/overmap/space_pois/asteroid1_20x20.dmm diff --git a/maps/overmap/space_pois/asteroid2.dmm b/maps/overmap/space_pois/asteroid2_20x20.dmm similarity index 100% rename from maps/overmap/space_pois/asteroid2.dmm rename to maps/overmap/space_pois/asteroid2_20x20.dmm diff --git a/maps/overmap/space_pois/asteroid3.dmm b/maps/overmap/space_pois/asteroid3_20x20.dmm similarity index 100% rename from maps/overmap/space_pois/asteroid3.dmm rename to maps/overmap/space_pois/asteroid3_20x20.dmm diff --git a/maps/overmap/space_pois/asteroid4.dmm b/maps/overmap/space_pois/asteroid4_20x20.dmm similarity index 100% rename from maps/overmap/space_pois/asteroid4.dmm rename to maps/overmap/space_pois/asteroid4_20x20.dmm diff --git a/maps/overmap/space_pois/asteroid5.dmm b/maps/overmap/space_pois/asteroid5.dmm deleted file mode 100644 index fc98fde9e7..0000000000 --- a/maps/overmap/space_pois/asteroid5.dmm +++ /dev/null @@ -1,1723 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/simulated/mineral, -/area/submap/asteroid5) -"d" = ( -/turf/simulated/mineral/floor/vacuum, -/area/submap/asteroid5) -"f" = ( -/obj/structure/outcrop/gold, -/turf/simulated/mineral/floor/vacuum, -/area/submap/asteroid5) -"n" = ( -/obj/machinery/power/supermatter, -/turf/simulated/mineral/floor/vacuum, -/area/submap/asteroid5) -"p" = ( -/obj/random/outcrop, -/turf/simulated/mineral/floor/vacuum, -/area/submap/asteroid5) -"r" = ( -/obj/structure/outcrop/uranium, -/turf/simulated/mineral/floor/vacuum, -/area/submap/asteroid5) -"t" = ( -/obj/structure/outcrop/diamond, -/turf/simulated/mineral/floor/vacuum, -/area/submap/asteroid5) -"v" = ( -/obj/structure/outcrop/lead, -/turf/simulated/mineral/floor/vacuum, -/area/submap/asteroid5) -"G" = ( -/obj/structure/outcrop/coal, -/turf/simulated/mineral/floor/vacuum, -/area/submap/asteroid5) -"I" = ( -/obj/structure/outcrop/silver, -/turf/simulated/mineral/floor/vacuum, -/area/submap/asteroid5) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -d -r -d -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -d -d -d -d -b -a -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -b -b -f -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -v -d -d -b -p -v -d -b -b -b -a -"} -(5,1,1) = {" -a -a -a -a -a -a -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -r -d -p -b -b -b -b -b -b -b -a -"} -(6,1,1) = {" -a -a -a -a -f -d -d -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -d -d -d -b -b -b -b -b -b -b -a -"} -(7,1,1) = {" -a -a -a -a -d -d -d -d -b -b -b -b -b -b -p -d -d -a -a -a -a -a -a -a -a -b -b -d -d -d -d -b -b -b -b -b -b -b -b -a -"} -(8,1,1) = {" -a -a -a -a -d -d -f -p -b -b -b -b -b -b -f -d -I -a -a -a -a -a -a -a -b -d -d -d -p -b -d -d -r -d -b -b -b -b -b -a -"} -(9,1,1) = {" -a -a -a -b -I -d -d -b -b -b -I -d -d -d -b -b -b -a -a -a -a -a -a -a -d -d -v -b -b -b -d -d -d -p -b -b -p -d -a -a -"} -(10,1,1) = {" -a -a -a -b -b -b -b -b -d -d -d -d -d -d -d -p -b -a -a -a -a -a -a -b -r -d -b -b -b -b -d -d -d -v -b -b -d -d -a -a -"} -(11,1,1) = {" -a -a -b -b -b -b -b -p -d -d -f -a -a -d -d -d -d -a -a -a -a -a -a -v -d -d -b -v -d -d -r -d -d -d -b -b -b -b -a -a -"} -(12,1,1) = {" -a -a -b -b -b -b -b -d -d -a -a -a -a -f -d -f -b -a -a -a -a -a -a -d -d -b -b -d -d -d -d -d -d -d -b -b -b -a -a -a -"} -(13,1,1) = {" -a -a -b -b -b -b -d -I -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -d -d -d -d -r -d -r -d -d -b -b -b -b -a -a -"} -(14,1,1) = {" -a -a -b -b -b -I -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -d -d -d -d -b -d -d -d -d -d -d -b -b -b -b -a -a -"} -(15,1,1) = {" -a -a -b -b -b -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -p -b -d -d -b -p -d -b -d -d -d -b -b -b -b -a -a -"} -(16,1,1) = {" -a -b -b -b -p -d -f -a -a -a -a -a -b -a -a -a -a -a -a -a -a -a -d -r -b -d -d -b -b -b -b -v -d -d -b -b -b -b -a -a -"} -(17,1,1) = {" -a -b -b -b -d -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -v -d -b -p -d -b -b -v -d -d -d -p -b -b -b -b -b -a -"} -(18,1,1) = {" -a -b -b -b -d -I -d -a -a -a -a -a -a -a -a -a -b -b -b -a -a -a -d -d -b -b -b -b -b -d -d -d -d -b -b -b -b -p -d -a -"} -(19,1,1) = {" -a -d -I -d -d -d -a -a -b -b -a -a -a -a -a -a -b -b -b -b -a -a -d -d -b -b -b -b -v -d -d -d -b -b -v -d -b -d -d -a -"} -(20,1,1) = {" -a -d -d -d -f -d -a -a -b -b -b -a -a -a -a -b -b -n -d -b -a -a -b -d -b -b -b -b -d -d -d -b -b -b -p -d -b -d -r -a -"} -(21,1,1) = {" -a -f -d -d -d -f -a -a -b -b -b -a -a -a -a -b -b -b -a -a -a -a -b -d -d -p -b -b -d -d -d -p -b -b -b -b -b -v -d -a -"} -(22,1,1) = {" -a -d -p -b -I -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -d -d -d -d -d -d -b -d -d -b -b -b -b -b -b -b -a -"} -(23,1,1) = {" -a -b -b -b -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -v -d -d -d -d -d -b -d -d -b -b -b -b -b -b -b -a -"} -(24,1,1) = {" -a -a -b -b -d -d -d -a -a -a -a -a -a -a -a -b -a -a -a -a -a -a -a -a -a -d -d -d -d -d -d -d -b -b -b -b -b -b -a -a -"} -(25,1,1) = {" -a -a -b -b -p -d -d -I -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -p -d -r -d -r -v -b -b -b -b -b -b -a -a -"} -(26,1,1) = {" -a -a -b -b -b -b -d -d -f -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -v -d -d -d -d -p -d -b -a -a -a -a -a -"} -(27,1,1) = {" -a -a -b -b -b -b -d -p -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(28,1,1) = {" -a -a -b -b -p -d -b -b -b -a -a -a -b -b -a -a -a -a -a -a -a -a -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(29,1,1) = {" -a -a -a -b -d -I -b -b -b -b -b -b -b -b -a -a -a -a -G -d -t -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -a -a -a -b -b -b -b -b -a -a -a -a -a -a -d -d -d -p -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(31,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -d -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(32,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -t -d -d -p -d -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -d -b -b -b -b -b -b -b -b -d -a -a -a -a -a -a -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -G -d -d -d -t -d -d -d -d -G -b -b -p -b -a -a -a -a -a -a -a -b -b -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -d -d -G -d -d -t -d -d -b -b -b -b -a -a -a -a -a -a -b -b -b -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -t -d -p -b -b -b -d -d -d -d -b -b -b -p -a -a -a -a -a -b -b -b -b -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -p -d -d -b -b -b -b -b -b -b -d -t -b -b -b -a -a -a -a -a -a -a -b -b -b -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -t -d -d -G -b -b -b -b -b -b -G -p -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -G -d -p -b -a -a -a -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/maps/overmap/space_pois/asteroid5_40x40.dmm b/maps/overmap/space_pois/asteroid5_40x40.dmm new file mode 100644 index 0000000000..5ed1e9d0c2 --- /dev/null +++ b/maps/overmap/space_pois/asteroid5_40x40.dmm @@ -0,0 +1,55 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/simulated/mineral,/area/submap/asteroid5) +"d" = (/turf/simulated/mineral/floor/vacuum,/area/submap/asteroid5) +"f" = (/obj/structure/outcrop/gold,/turf/simulated/mineral/floor/vacuum,/area/submap/asteroid5) +"n" = (/obj/machinery/power/supermatter,/turf/simulated/mineral/floor/vacuum,/area/submap/asteroid5) +"p" = (/obj/random/outcrop,/turf/simulated/mineral/floor/vacuum,/area/submap/asteroid5) +"q" = (/obj/effect/fusion_em_field,/turf/simulated/mineral/floor/vacuum,/area/submap/asteroid5) +"r" = (/obj/structure/outcrop/uranium,/turf/simulated/mineral/floor/vacuum,/area/submap/asteroid5) +"t" = (/obj/structure/outcrop/diamond,/turf/simulated/mineral/floor/vacuum,/area/submap/asteroid5) +"v" = (/obj/structure/outcrop/lead,/turf/simulated/mineral/floor/vacuum,/area/submap/asteroid5) +"G" = (/obj/structure/outcrop/coal,/turf/simulated/mineral/floor/vacuum,/area/submap/asteroid5) +"I" = (/obj/structure/outcrop/silver,/turf/simulated/mineral/floor/vacuum,/area/submap/asteroid5) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabbbddfdbaaaaaaaaaaaaaaaaa +aaaaaaaaaabbbbbbbbIddpbbbbbbaaaaaaaaaaaa +aaaaaaaabbbbbbbbbbdddbbbbbbbbaaaaaaaaaaa +aaaaafddIbbbbbbpdddfdIddpbbpdaaaaaaaaaaa +aaaaaddddbbbbIdddIddfddddbbdIaaaaaaaaaaa +aaabbddfdbbbdddfddaaaaaddddbbaaaaaaaaaaa +aaabbbdpbbpdIdaaaaaaaaaaIdpbbbaaaaaaaaaa +aaafbbbbbdddaaaaaabbbaaadfdbbbaaaaaaaaaa +aaadbbbbbddaaaaaaabbbaaaaaaabbaaaaaaaaaa +aaaabbbbIdfaaaaaaaabbaaaaaaabbaaaaaaabaa +aaaaabbbddaaaaaaaaaaaaaaaaaabbaaaaaabtaa +aaaaabbbddaaaaabaaaaaaaaaaabbaaaaaabpdGa +aaaaabbbdddfaaaaaaaaaaaaaaabbaaaaaabddda +aaaaaapfbdddaaaaaaabbbbaaaaaaaaaaaabdGpa +aaaaaaddbpdfaaaaaabbdbbbaaaaaaaaaGdtbbba +aaaaaadIbbdbaaaaabbdqdbaaaaaaaatddddbbaa +aaaaaaaaaaaaaaaaabqndbbaaaaaaaaddddpbbaa +aaaaaaaaaaaaaaaaabbdbbaaaaaaGddddddbbbaa +aaaaaaaaaaaaaaaaabbbbaaaaaaadddpbtGbbbba +aaaaaaaaaaaaaaaaaaaaaaaaaaaatdddbddbbbba +aaaaaaaaaaaaaaaaaaaaaaaaaaaabpbbbdddbGba +aaaaaaaaaaaaabddvddbbbaaaaabbbbbbdtddpba +aaaaaaaaabvdddprddddddvaaaaabbbbbdddtbba +aaaaaaabdrddddbbbbbbdddaaaaaaabbbGddbbaa +aaaaaabddddbddddpbbbpdddbaaaaabbbbbbbbaa +aaaaaabdvbbbdddddbbbbdddpaaaaabbbbbbbbaa +aaaaddddbbvddbbbbbbbbddddvaaaaabdpbbaaaa +aaaadddpbbddddpbbbvdddddrdaaaaaaabbpaaaa +aaavrddbbbddrddbvddddbbdddaaaaaaaaaaaaaa +aaadddddddrdddbbddddddddrdaaaaaaaaaaaaaa +abbdpdbdddddrddvdddbpdddvdaaaaaaaaaaaaaa +addbbbbrddddddddddbbbbbbbpaaaaaaaaaaaaaa +ardpbbbdpvddddddpbbbbbbbbdaaaaaaaaaaaaaa +addvbbbbbbbbbbbbbbvpbbbbbbaaaaaaaaabbaaa +aaddbbbbbbbbbbbbbbddbbbbbaaaaaaaaabbbaaa +aabbbbbbpdbbbbbbbbbbbbbbbaaaaaaaabbbbaaa +aaabbbbbddbabbbbbpddvbbbbaaaaaaaabbbaaaa +aaabbbbbaaaaaaaabddrdbbaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/overmap/space_pois/blowntcommsat.dmm b/maps/overmap/space_pois/blowntcommsat.dmm deleted file mode 100644 index 1ec2cbddff..0000000000 --- a/maps/overmap/space_pois/blowntcommsat.dmm +++ /dev/null @@ -1,3998 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/submap/blowntcommsat) -"ad" = ( -/obj/structure/lattice, -/obj/structure/grille/broken, -/turf/template_noop, -/area/submap/blowntcommsat) -"ae" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/template_noop, -/area/submap/blowntcommsat) -"af" = ( -/obj/structure/grille, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"aj" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"al" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/template_noop, -/area/submap/blowntcommsat) -"am" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/stack/material/phoron{ - amount = 10 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"an" = ( -/obj/machinery/power/apc{ - cell_type = 2500; - dir = 1; - name = "Worn-out APC"; - pixel_x = 1; - pixel_y = 26 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"ao" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"aq" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"as" = ( -/obj/structure/bed, -/turf/simulated/floor/tiled/airless, -/area/submap/blowntcommsat) -"at" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/submap/blowntcommsat) -"av" = ( -/obj/structure/lattice, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/template_noop, -/area/submap/blowntcommsat) -"aw" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"ax" = ( -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"ay" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"az" = ( -/obj/structure/lattice, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/template_noop, -/area/submap/blowntcommsat) -"aA" = ( -/obj/structure/table/steel, -/obj/item/stack/material/phoron{ - amount = 10 - }, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"aB" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/table/steel, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"aC" = ( -/obj/structure/frame/computer, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"aD" = ( -/obj/structure/table/steel, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"aF" = ( -/obj/structure/grille, -/turf/simulated/floor/tiled/airless, -/area/submap/blowntcommsat) -"aG" = ( -/obj/structure/grille/broken, -/turf/simulated/floor/tiled/airless, -/area/submap/blowntcommsat) -"aH" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"aI" = ( -/obj/structure/window/reinforced, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"aJ" = ( -/obj/item/stack/cable_coil/cut{ - amount = 1 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"aK" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/closet, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"aL" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/template_noop, -/area/submap/blowntcommsat) -"aN" = ( -/obj/structure/bed, -/obj/effect/decal/remains/human, -/turf/simulated/floor/tiled/airless, -/area/submap/blowntcommsat) -"aP" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/submap/blowntcommsat) -"aQ" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/submap/blowntcommsat) -"aR" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"aS" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/template_noop, -/area/submap/blowntcommsat) -"aT" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/template_noop, -/area/submap/blowntcommsat) -"aU" = ( -/obj/structure/window/reinforced, -/turf/template_noop, -/area/submap/blowntcommsat) -"aV" = ( -/obj/structure/sign/securearea, -/turf/simulated/wall/r_wall, -/area/submap/blowntcommsat) -"aW" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"aX" = ( -/obj/item/device/gps/internal/base{ - gps_tag = "NT_SATELLITE" - }, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"aY" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/submap/blowntcommsat) -"aZ" = ( -/obj/structure/table, -/turf/simulated/floor/tiled/airless, -/area/submap/blowntcommsat) -"ba" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/tiled/airless, -/area/submap/blowntcommsat) -"bb" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"bc" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"bd" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/item/weapon/airlock_electronics, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"be" = ( -/obj/structure/door_assembly/door_assembly_hatch, -/turf/simulated/floor/tiled/steel_grid, -/area/submap/blowntcommsat) -"bf" = ( -/obj/item/weapon/paper/crumpled, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"bg" = ( -/obj/machinery/vending/snack, -/turf/simulated/floor/tiled/airless, -/area/submap/blowntcommsat) -"bh" = ( -/obj/machinery/vending/cola, -/turf/simulated/floor/tiled/airless, -/area/submap/blowntcommsat) -"bi" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/turf/simulated/floor/tiled/airless, -/area/submap/blowntcommsat) -"bj" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/tiled/airless, -/area/submap/blowntcommsat) -"bl" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/submap/blowntcommsat) -"bm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/grille/broken, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"bn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"bo" = ( -/obj/structure/disposaloutlet{ - dir = 4 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"bp" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/template_noop, -/area/submap/blowntcommsat) -"bq" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/submap/blowntcommsat) -"br" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/template_noop, -/area/submap/blowntcommsat) -"bs" = ( -/obj/structure/table/steel, -/obj/item/weapon/cell/super/empty, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"bt" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"bv" = ( -/obj/machinery/door/airlock/hatch, -/turf/simulated/floor/tiled/steel_grid, -/area/submap/blowntcommsat) -"bw" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/submap/blowntcommsat) -"bx" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"by" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"bz" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"bA" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"bB" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"bC" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/turf/simulated/floor/tiled/steel_grid, -/area/submap/blowntcommsat) -"bD" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"bE" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/lattice, -/turf/template_noop, -/area/submap/blowntcommsat) -"bF" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/stack/rods, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"bG" = ( -/obj/item/stack/rods, -/turf/simulated/floor/tiled/dark{ - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"bI" = ( -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/plating, -/area/submap/blowntcommsat) -"bJ" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"bK" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"bL" = ( -/obj/item/weapon/circuitboard/teleporter, -/obj/structure/table/rack/shelf/steel, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"bM" = ( -/obj/structure/frame/computer, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"bN" = ( -/obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"bO" = ( -/obj/effect/decal/cleanable/blood, -/obj/item/clothing/under/rank/centcom_officer, -/obj/effect/decal/remains/human, -/obj/structure/bed/chair, -/turf/simulated/floor/tiled/dark{ - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"bP" = ( -/obj/structure/table/steel, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"bQ" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"bR" = ( -/obj/structure/door_assembly/door_assembly_mhatch, -/turf/simulated/floor/tiled/steel_grid, -/area/submap/blowntcommsat) -"bS" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"bT" = ( -/obj/effect/decal/cleanable/blood, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"bU" = ( -/obj/structure/table/steel, -/obj/item/ammo_casing/microbattery/combat/lethal, -/obj/item/weapon/reagent_containers/syringe/drugs, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"bV" = ( -/obj/item/weapon/storage/toolbox/syndicate/powertools, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"bW" = ( -/obj/structure/table/steel, -/obj/item/device/radio/electropack, -/turf/simulated/floor/tiled/dark{ - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"bX" = ( -/obj/structure/table/steel, -/obj/item/weapon/surgical/hemostat, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"bY" = ( -/obj/structure/table/steel, -/obj/item/weapon/surgical/circular_saw{ - pixel_y = 8 - }, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"bZ" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/item/stack/rods, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"ca" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced, -/turf/template_noop, -/area/submap/blowntcommsat) -"cb" = ( -/obj/structure/window/reinforced, -/obj/structure/lattice, -/turf/template_noop, -/area/submap/blowntcommsat) -"cc" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"ce" = ( -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"cf" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/effect/landmark/loot_spawn/low, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"cg" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced, -/turf/template_noop, -/area/submap/blowntcommsat) -"ch" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"ci" = ( -/obj/item/stack/rods, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"cj" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"ck" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/blowntcommsat) -"cl" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"cm" = ( -/obj/machinery/light/small, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"cn" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"co" = ( -/turf/template_noop, -/area/submap/blowntcommsat) -"cp" = ( -/obj/structure/lattice, -/obj/item/stack/rods, -/turf/template_noop, -/area/submap/blowntcommsat) -"cq" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/turf/space, -/area/submap/blowntcommsat) -"cr" = ( -/obj/structure/grille/broken, -/turf/template_noop, -/area/submap/blowntcommsat) -"cs" = ( -/obj/machinery/door/airlock/hatch, -/turf/space, -/area/submap/blowntcommsat) -"ct" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark{ - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"cu" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark{ - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"cx" = ( -/turf/simulated/floor/tiled/dark{ - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"cz" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark{ - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"cA" = ( -/obj/structure/sign/vacuum, -/turf/simulated/wall/r_wall, -/area/submap/blowntcommsat) -"cB" = ( -/obj/structure/closet/emcloset, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark{ - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"cD" = ( -/obj/structure/closet/malf/suits, -/turf/simulated/floor/tiled/dark{ - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"cE" = ( -/obj/structure/door_assembly/door_assembly_ext, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"cF" = ( -/obj/machinery/door/airlock/external, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"cG" = ( -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"cH" = ( -/turf/simulated/shuttle/plating, -/area/submap/blowntcommsat) -"cI" = ( -/obj/structure/closet/crate, -/obj/item/clothing/glasses/night, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark{ - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"cJ" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"cK" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/item/weapon/storage/toolbox/mechanical, -/turf/simulated/floor/tiled/dark{ - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"cL" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"cM" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark{ - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"cN" = ( -/obj/structure/frame/computer, -/turf/simulated/floor/plating, -/area/submap/blowntcommsat) -"cO" = ( -/obj/machinery/teleport/station, -/turf/simulated/floor/plating, -/area/submap/blowntcommsat) -"cP" = ( -/obj/machinery/teleport/hub, -/turf/simulated/floor/plating, -/area/submap/blowntcommsat) -"cQ" = ( -/turf/simulated/wall/r_wall, -/area/submap/blowntcommsat) -"dx" = ( -/obj/effect/landmark/loot_spawn/low, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"eo" = ( -/obj/structure/girder, -/turf/simulated/floor/plating/external, -/area/submap/blowntcommsat) -"eA" = ( -/obj/structure/table/reinforced, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"nT" = ( -/obj/structure/frame/computer, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"oy" = ( -/obj/item/device/radio/beacon, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"rU" = ( -/obj/structure/frame, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"Ca" = ( -/obj/structure/girder, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"EX" = ( -/obj/item/device/radio/off, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"Ho" = ( -/obj/item/weapon/storage/toolbox/electrical, -/turf/simulated/floor/tiled/dark{ - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"Ib" = ( -/turf/simulated/floor/tiled/airless, -/area/submap/blowntcommsat) -"Ig" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) -"Kx" = ( -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"NI" = ( -/obj/item/stolenpackage, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"Oc" = ( -/obj/structure/frame, -/turf/simulated/floor/bluegrid{ - name = "Server Base"; - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"Oz" = ( -/obj/structure/grille, -/turf/space, -/area/submap/blowntcommsat) -"Qt" = ( -/obj/effect/landmark/loot_spawn/low, -/turf/simulated/floor/tiled/dark{ - nitrogen = 500; - oxygen = 0; - temperature = 80 - }, -/area/submap/blowntcommsat) -"QT" = ( -/obj/effect/landmark/loot_spawn, -/turf/simulated/floor/airless, -/area/submap/blowntcommsat) -"Vm" = ( -/obj/machinery/power/port_gen/pacman, -/turf/simulated/floor/tiled, -/area/submap/blowntcommsat) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cG -ab -ab -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cG -ab -ab -aa -aa -aa -ab -ab -ab -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cG -ab -ab -aa -aa -aa -ab -ab -ab -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -cG -cG -ab -aa -aa -aa -ab -cG -ab -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -cG -cG -cG -aa -aa -aa -cG -cG -ab -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aa -ab -cG -cG -aa -aa -aa -cG -cG -ab -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -aa -ab -cG -cG -cG -cG -cG -cG -cG -ab -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ab -aa -aa -aa -aa -cG -aa -aa -aa -aa -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ae -ae -ae -ad -ae -ae -ae -ae -ae -ae -ae -af -ae -ae -ae -ae -ae -ae -ad -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -aj -cG -cG -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -ae -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -aj -ab -ab -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -cQ -cQ -cQ -ab -aa -aa -aa -aa -ab -aa -aa -aa -aa -ab -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -ab -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -aj -cQ -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -cG -aj -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aj -cQ -aa -ab -aa -aa -aa -aa -ab -aa -aa -aa -aa -ab -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aj -cQ -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cG -cQ -al -av -al -co -al -al -bw -al -al -co -al -bw -al -co -al -co -bw -al -al -co -aa -ab -aa -cQ -cQ -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aj -cQ -am -bx -aH -aP -bb -aR -bx -bF -bx -aR -bD -aR -aR -bD -aR -bZ -bK -bD -aH -br -aa -ab -aa -cQ -cQ -ae -ad -cH -cH -cH -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -cQ -cQ -an -ax -aI -aQ -bc -bp -az -bE -bE -bE -aL -az -aL -co -aL -aL -az -ca -aI -br -aa -ab -aa -cQ -cQ -ae -cH -cH -cH -cH -cH -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -cQ -cQ -ao -aw -aJ -aR -aI -bq -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cb -bc -bq -ab -ab -aa -cQ -cQ -ae -cH -cH -cH -cH -cH -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -ab -ab -ad -ae -ae -ae -cQ -cQ -ax -ax -aI -aS -bc -br -cQ -cG -cG -cx -cx -cx -cx -cx -cx -cx -cQ -aU -bc -br -aa -cp -cQ -cQ -cQ -ae -ae -cQ -cE -cQ -ae -ae -ad -ae -ae -ae -ab -ab -ab -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ae -cQ -cQ -aq -ay -aK -aT -aI -br -cQ -Qt -Kx -Kx -Kx -Kx -Kx -cG -Kx -cG -cQ -co -bc -br -cQ -cq -cQ -cQ -cQ -ae -ae -cQ -ce -cQ -ae -ae -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -ab -ab -ab -aa -ab -aa -ae -cQ -cQ -cQ -az -aL -aU -bd -br -cQ -cx -rU -cG -rU -Kx -Kx -Oc -Kx -cx -cQ -cQ -bv -cQ -cQ -cx -cx -cQ -cQ -ae -cQ -cA -cF -cA -cQ -ae -ae -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -ab -ab -cG -cG -cG -ab -cG -ab -ae -cQ -cQ -cQ -cQ -cQ -aV -be -cQ -cQ -cx -cx -cx -cx -cG -cG -cx -cx -cG -cQ -cc -ch -cl -cQ -cG -cx -cQ -cQ -cQ -cQ -cB -cG -cI -cQ -cQ -ae -ae -ab -cG -ab -ab -cG -cG -ab -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -ab -ab -aa -aa -aa -cG -aa -ae -cQ -cQ -cQ -Vm -dx -aW -cG -ce -by -cx -Kx -Kx -Kx -Kx -Kx -Oc -Oc -cG -cQ -ce -ce -cm -cQ -cQ -ce -cQ -cQ -cQ -cz -ce -cG -cJ -cK -cQ -cQ -ae -aa -ab -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -cG -aa -ae -cQ -cQ -cQ -ce -ce -cG -ce -bs -bz -bG -cG -cG -cG -bN -cG -NI -Kx -cx -cQ -ce -ce -ce -cQ -ce -cG -cQ -ct -cx -ce -ce -ce -cG -cL -cN -cQ -ae -aa -cG -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -cG -cG -af -cQ -cQ -cQ -aA -cG -aX -bf -bt -bA -cx -cx -cx -cx -bO -cx -bW -cx -cx -cQ -ce -cG -ce -ce -ce -ce -cs -cu -cx -cG -ce -cG -cG -cL -cO -cQ -Oz -cG -cG -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -cG -aa -ae -cQ -cQ -cQ -aB -ce -oy -ce -ce -bA -cx -cG -EX -Kx -Kx -bT -bX -Kx -cx -cQ -ce -cG -ce -Ca -ce -ce -cQ -cG -cG -cG -ce -ce -ce -cL -cP -cQ -ae -aa -cG -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -ab -ab -cG -cG -ab -ab -cG -aa -ad -cQ -cQ -cQ -aC -ce -ce -cG -ce -bB -cx -cG -bJ -bM -bP -bU -bY -Kx -cx -cQ -ce -ci -ce -cQ -cQ -Ig -cQ -cQ -cQ -Ho -cG -cG -ce -cM -cQ -cQ -ae -aa -ab -ab -ab -aa -aa -aa -aa -aa -"} -(33,1,1) = {" -aa -aa -ab -ab -ab -cG -cG -ab -cG -ab -ae -cQ -cQ -cQ -aD -nT -nT -cQ -bC -cQ -cx -cx -cx -cx -cx -cx -cx -cx -cx -cQ -cf -cj -cn -cQ -cx -cx -cQ -cQ -cQ -cQ -cD -ce -cD -cQ -cQ -ae -ae -ab -ab -ab -ab -ab -ab -aa -aa -aa -"} -(34,1,1) = {" -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -ae -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cG -bC -cx -Kx -Kx -Kx -cG -Kx -Oc -Kx -cx -cQ -cQ -bv -cQ -cQ -cx -cx -cQ -cQ -ae -cQ -cQ -cQ -cQ -cQ -ae -ae -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -"} -(35,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ae -cQ -cQ -cx -cx -cx -cx -cQ -cQ -cQ -cx -Oc -Oc -Oc -Kx -Kx -cG -cG -cG -cQ -aU -bc -br -cQ -cQ -cQ -cQ -cQ -ae -ae -ae -ae -ae -ae -ae -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(36,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ad -ae -ae -ae -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cx -cx -cx -cx -cx -cx -cx -cx -cG -cQ -aU -aI -br -aa -ab -cQ -cQ -cG -ae -ae -ad -ae -ae -ae -ae -ad -ae -ab -ae -ab -ab -ab -ab -ab -ab -ab -"} -(37,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -cQ -cQ -as -aF -aN -aF -bg -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -aU -bc -br -aa -ab -aa -cQ -ab -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(38,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ae -cQ -cQ -at -aG -aF -aF -bh -cQ -bw -bw -bw -bw -bw -bw -al -co -al -al -bw -cg -bc -co -aa -ab -aa -aj -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(39,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -cQ -aj -cG -Ib -Ib -Ib -Ib -bv -bD -bD -bK -bK -bD -bx -bD -bD -bD -bK -bD -bD -ck -br -aa -ab -aa -cG -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(40,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -eo -cG -QT -Ib -Ib -aY -Ib -cQ -bE -co -aL -aL -aU -bQ -br -aL -aL -aL -az -aL -aL -co -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(41,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -cG -ab -cG -cG -Ib -aZ -bi -cQ -ab -aa -bI -bI -bI -bR -bI -bI -bI -aa -ab -aa -aa -aa -aa -aa -aa -ab -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(42,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -cG -cG -Ib -ba -bj -cQ -ab -ab -bI -ce -ce -ce -ce -ce -bI -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -cG -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(43,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -cG -cQ -cQ -bl -cQ -ab -aa -bI -ce -ce -ce -bV -ce -bI -aa -ab -aa -aa -aa -aa -aa -aa -aa -ab -aa -cG -ab -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(44,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -cG -aj -cQ -cQ -bl -cQ -cQ -cQ -cQ -bL -eA -bS -eA -eA -cQ -cQ -cQ -aj -cG -ab -aa -aa -aa -aa -ab -ab -aj -cG -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -eo -cQ -cQ -cQ -bl -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -cQ -aj -ab -ab -aa -aa -aa -aa -aa -ab -cQ -cQ -cQ -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ae -ae -ae -bm -ae -ae -ae -cQ -cQ -cQ -cQ -cQ -cQ -cQ -ae -ae -ae -ad -aa -aa -aa -ab -cG -aj -cQ -cQ -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bn -ae -ae -ae -ae -ae -ae -af -ae -ae -ae -ae -ae -ae -aa -aa -ab -ab -cG -aj -cQ -cQ -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -bo -ad -ae -aa -ab -aa -aa -cG -aa -aa -ab -aa -ae -ae -aa -aa -aa -cr -ae -ae -ad -ae -ae -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(49,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -ab -cG -ab -ab -ab -ab -cG -cG -ab -aa -ad -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(50,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -ab -ab -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(51,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -ab -ab -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(52,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/overmap/space_pois/blowntcommsat_53x56.dmm b/maps/overmap/space_pois/blowntcommsat_53x56.dmm new file mode 100644 index 0000000000..5f57794ce0 --- /dev/null +++ b/maps/overmap/space_pois/blowntcommsat_53x56.dmm @@ -0,0 +1,213 @@ +"aa" = (/turf/template_noop,/area/template_noop) +"ab" = (/obj/structure/lattice,/turf/template_noop,/area/submap/blowntcommsat) +"ad" = (/obj/structure/lattice,/obj/structure/grille/broken,/turf/template_noop,/area/submap/blowntcommsat) +"ae" = (/obj/structure/lattice,/obj/structure/grille,/turf/template_noop,/area/submap/blowntcommsat) +"af" = (/obj/structure/grille,/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"aj" = (/obj/structure/girder,/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"al" = (/obj/structure/window/reinforced{dir = 4},/turf/template_noop,/area/submap/blowntcommsat) +"am" = (/obj/structure/window/reinforced{dir = 8},/obj/item/stack/material/phoron{amount = 10},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"an" = (/obj/machinery/power/apc{cell_type = 2500; dir = 1; name = "Worn-out APC"; pixel_x = 1; pixel_y = 26},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"ao" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"aq" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"as" = (/obj/structure/bed,/turf/simulated/floor/tiled/airless,/area/submap/blowntcommsat) +"at" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/airless,/area/submap/blowntcommsat) +"av" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/template_noop,/area/submap/blowntcommsat) +"aw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"ax" = (/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"ay" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"az" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/template_noop,/area/submap/blowntcommsat) +"aA" = (/obj/structure/table/steel,/obj/item/stack/material/phoron{amount = 10},/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"aB" = (/obj/machinery/light/small{dir = 1},/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"aC" = (/obj/structure/frame/computer,/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"aD" = (/obj/structure/table/steel,/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"aF" = (/obj/structure/grille,/turf/simulated/floor/tiled/airless,/area/submap/blowntcommsat) +"aG" = (/obj/structure/grille/broken,/turf/simulated/floor/tiled/airless,/area/submap/blowntcommsat) +"aH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"aI" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"aJ" = (/obj/item/stack/cable_coil/cut{amount = 1},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"aK" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/closet,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"aL" = (/obj/structure/window/reinforced{dir = 8},/turf/template_noop,/area/submap/blowntcommsat) +"aN" = (/obj/structure/bed,/obj/effect/decal/remains/human,/turf/simulated/floor/tiled/airless,/area/submap/blowntcommsat) +"aP" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/template_noop,/area/submap/blowntcommsat) +"aQ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/template_noop,/area/submap/blowntcommsat) +"aR" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"aS" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/template_noop,/area/submap/blowntcommsat) +"aT" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/template_noop,/area/submap/blowntcommsat) +"aU" = (/obj/structure/window/reinforced,/turf/template_noop,/area/submap/blowntcommsat) +"aV" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/submap/blowntcommsat) +"aW" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"aX" = (/obj/item/device/gps/internal/base{gps_tag = "NT_SATELLITE"},/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"aY" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/airless,/area/submap/blowntcommsat) +"aZ" = (/obj/structure/table,/turf/simulated/floor/tiled/airless,/area/submap/blowntcommsat) +"ba" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/airless,/area/submap/blowntcommsat) +"bb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"bc" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"bd" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/airlock_electronics,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"be" = (/obj/structure/door_assembly/door_assembly_hatch,/turf/simulated/floor/tiled/steel_grid,/area/submap/blowntcommsat) +"bf" = (/obj/item/weapon/paper/crumpled,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"bg" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled/airless,/area/submap/blowntcommsat) +"bh" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled/airless,/area/submap/blowntcommsat) +"bi" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled/airless,/area/submap/blowntcommsat) +"bj" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled/airless,/area/submap/blowntcommsat) +"bl" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/submap/blowntcommsat) +"bm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille/broken,/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"bn" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"bo" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"bp" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/template_noop,/area/submap/blowntcommsat) +"bq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/template_noop,/area/submap/blowntcommsat) +"br" = (/obj/structure/window/reinforced{dir = 1},/turf/template_noop,/area/submap/blowntcommsat) +"bs" = (/obj/structure/table/steel,/obj/item/weapon/cell/super/empty,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"bt" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"bv" = (/obj/machinery/door/airlock/hatch,/turf/simulated/floor/tiled/steel_grid,/area/submap/blowntcommsat) +"bw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/template_noop,/area/submap/blowntcommsat) +"bx" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"by" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"bz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"bA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"bB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"bC" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/tiled/steel_grid,/area/submap/blowntcommsat) +"bD" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"bE" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/template_noop,/area/submap/blowntcommsat) +"bF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/item/stack/rods,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"bG" = (/obj/item/stack/rods,/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"bI" = (/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/submap/blowntcommsat) +"bJ" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"bK" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"bL" = (/obj/item/weapon/circuitboard/teleporter,/obj/structure/table/rack/shelf/steel,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"bM" = (/obj/structure/frame/computer,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"bN" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"bO" = (/obj/effect/decal/cleanable/blood,/obj/item/clothing/under/rank/centcom_officer,/obj/effect/decal/remains/human,/obj/structure/bed/chair,/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"bP" = (/obj/structure/table/steel,/obj/item/device/flashlight/lamp,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"bQ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"bR" = (/obj/structure/door_assembly/door_assembly_mhatch,/turf/simulated/floor/tiled/steel_grid,/area/submap/blowntcommsat) +"bS" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"bT" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"bU" = (/obj/structure/table/steel,/obj/item/ammo_casing/microbattery/combat/lethal,/obj/item/weapon/reagent_containers/syringe/drugs,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"bV" = (/obj/item/weapon/storage/toolbox/syndicate/powertools,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"bW" = (/obj/structure/table/steel,/obj/item/device/radio/electropack,/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"bX" = (/obj/structure/table/steel,/obj/item/weapon/surgical/hemostat,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"bY" = (/obj/structure/table/steel,/obj/item/weapon/surgical/circular_saw{pixel_y = 8},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"bZ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/item/stack/rods,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"ca" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/template_noop,/area/submap/blowntcommsat) +"cb" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/template_noop,/area/submap/blowntcommsat) +"cc" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"ce" = (/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"cf" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/effect/landmark/loot_spawn/low,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"cg" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/template_noop,/area/submap/blowntcommsat) +"ch" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"ci" = (/obj/item/stack/rods,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"cj" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"ck" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/blowntcommsat) +"cl" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"cm" = (/obj/machinery/light/small,/obj/random/trash,/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"cn" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"co" = (/turf/template_noop,/area/submap/blowntcommsat) +"cp" = (/obj/structure/lattice,/obj/item/stack/rods,/turf/template_noop,/area/submap/blowntcommsat) +"cq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/space,/area/submap/blowntcommsat) +"cr" = (/obj/structure/grille/broken,/turf/template_noop,/area/submap/blowntcommsat) +"cs" = (/obj/machinery/door/airlock/hatch,/turf/space,/area/submap/blowntcommsat) +"ct" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"cu" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"cx" = (/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"cz" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"cA" = (/obj/structure/sign/vacuum,/turf/simulated/wall/r_wall,/area/submap/blowntcommsat) +"cB" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"cD" = (/obj/structure/closet/malf/suits,/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"cE" = (/obj/structure/door_assembly/door_assembly_ext,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"cF" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"cG" = (/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"cH" = (/turf/simulated/shuttle/plating,/area/submap/blowntcommsat) +"cI" = (/obj/structure/closet/crate,/obj/item/clothing/glasses/night,/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"cJ" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"cK" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"cL" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"cM" = (/obj/machinery/light/small{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"cN" = (/obj/structure/frame/computer,/turf/simulated/floor/plating,/area/submap/blowntcommsat) +"cO" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/submap/blowntcommsat) +"cP" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/submap/blowntcommsat) +"cQ" = (/turf/simulated/wall/r_wall,/area/submap/blowntcommsat) +"dx" = (/obj/effect/landmark/loot_spawn/low,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"eo" = (/obj/structure/girder,/turf/simulated/floor/plating/external,/area/submap/blowntcommsat) +"eA" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"gT" = (/obj/structure/loot_pile/surface/bones,/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"jO" = (/obj/structure/loot_pile/maint/boxfort,/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"kW" = (/obj/random/trash,/turf/simulated/floor/tiled/airless,/area/submap/blowntcommsat) +"nv" = (/obj/random/trash,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"nT" = (/obj/structure/frame/computer,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"oy" = (/obj/item/device/radio/beacon,/obj/random/trash,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"rU" = (/obj/structure/frame,/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"zO" = (/obj/structure/loot_pile/maint/boxfort,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"Ca" = (/obj/structure/girder,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"EO" = (/obj/random/trash,/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"EX" = (/obj/item/device/radio/off,/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"Ho" = (/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"Ib" = (/turf/simulated/floor/tiled/airless,/area/submap/blowntcommsat) +"Ig" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/blowntcommsat) +"Kx" = (/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"Lv" = (/obj/random/trash,/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"NI" = (/obj/item/stolenpackage,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"Oc" = (/obj/structure/frame,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"Oz" = (/obj/structure/grille,/turf/space,/area/submap/blowntcommsat) +"Qt" = (/obj/effect/landmark/loot_spawn/low,/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"QT" = (/obj/effect/landmark/loot_spawn,/turf/simulated/floor/airless,/area/submap/blowntcommsat) +"Uc" = (/obj/structure/loot_pile/surface/drone,/turf/simulated/floor/tiled/dark{nitrogen = 500; oxygen = 0; temperature = 80},/area/submap/blowntcommsat) +"Vm" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/tiled,/area/submap/blowntcommsat) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcGabaaaaaacGabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabcGaaaaaaaacGcGabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabcGaaaaaaaaabcGabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaabaaaaaaaaabababaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeababcGcGcGcGcGcGcGababaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaeaaaaabaaaacGaaaaabaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeadadaaaaabadaeaeaeaeaeaeaeafaeadaeaeaeaeaeaeadabaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaecQajajcGajcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQeocGababaaabaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaadaecQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQajcGabababababaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaecQcQcQabaaalamanaoaxaqcQcQcQcQcQcQcQcQcQcxcQasatcGQTcGcGabcGeoadaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaecQcQabababavbxaxawaxayazcQVmceaAaBaCaDcQcxcQaFaGIbIbcGcGcGajcQaeaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaecQcQaaabaaalaHaIaJaIaKaLcQdxnvcGcecenTcQcxcQaNaFkWkWkWIbcQcQcQaeaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaadcQcQaaabaacoaPaQaRaSaTaUaVaWcGaXoycenTcQcxcQaFaFIbaYaZbacQcQcQaeaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaecQcQaaabaaalbbbcaIbcaIbdbecGcebfcecGcQcQcQcQbgbhkWIbbibjblblblbmbnboaaaaaaaaaa +aaaaaaaaaaaaaaaaababadaeaeaecQcQaaabaaalaRbpbqbrbrbrcQcebsbtnvcebCcGcQcQcQcQbvcQcQcQcQcQcQaeaeadabaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaabaecQcQabababbwbxazcQcQcQcQcQbybzbAbAbBcQbCcQcQcQbwbDbEabababcQcQaeaeaeaaaaaaaaaa +aaaaaaababcGcGcGcGcGababaaaecQcQaaabaaalbFbEcQcGQtcxcxcxbGLvcxcxcxcxcxUccQbwbDcoaaabaacQcQaeaeaaabaaaaaaaa +ababababababababcGcGcGcGaaaecQcQaaabaaalbxbEcQcGKxrUcxKxcGLvcGcGLvKxOccxcQbwbKaLbIbIbIcQcQcQaeabcGababaaaa +aaaaaaaaaaababababcGcGcGaaaecQcQaaabaacoaRbEcQcxKxcGcxKxcGcxEXbJcxKxOccxcQbwbKaLbIzOcebLcQcQaeaaabaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaacGaaaecQcQaaabaaalbDaLcQcxKxrUcxKxcGLvKxbMcxKxOccxcQbwbDaUbIcenveAcQcQaeaaabaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaacGcGafcQcQabababbwaRazcQcxKxKxcGKxbNbOKxbPUccGKxcxcQbwbxbQbRcenvbScQcQafcGabaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaacGaaaecQcQaaabaaalaRaLcQcxKxKxcGKxcGcxbTbUcxKxKxcxcQalbDbrbInvbVeAcQcQaeaaabaaaaaaaa +aaaaaaaaaaaaabababcGcGcGaaaecQcQaaabaacobDcocQcxcGOccxOcNIbWbXbYcxOccGcxcQcobDaLbIceceeAcQcQaeaacGaaaaaaaa +aaaaaaaaaaabababcGcGcGcGaaaecQcQaaabaaalaRaLcQcxKxKxcxOcKxcxKxKxcxKxcGcxcQalbDaLbIbIbIcQcQcQaeabcGabababab +aaaaaaabababababababababaaaecQcQaaabaacobZaLcQUccGcxcGcGcxgTcxcxcxcxcGjOcQalbKaLaaabaacQcQaeaeaaabababaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaeaecQcQabababbwbKazcQcQcQcQcQcQcQcQcQcQcQcQcQcQcQbwbDazabababcQajaeaeaeaaaaaaaaaa +aaaaaaaaaaaaabababababadaeaeajcQaaaaaaalbDcacbaUcocQcccecececececfcQaUaUaUcgbDaLaaabaaajabaeaeaeadabababaa +aaaaaaaaaaaaaaaaaaaaaaaaaaadcGajaaaaaaalaHaIbcbcbcbvchceceEOcGcicjbvbcaIbcbcckaLaaabaacGabadaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaabcGabaaaaaacobrbrbqbrbrcQclcmcenvcececncQbrbrbrcobrcoaaabaaabaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaabaacQcQcQcQcQceCacQcQcQcQaaaaaaaaaaaaabaaaaaaaaabaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaababababcpcqcxcGcQcecececQcxcxcQababababaaaaaaaaaaaaaaabcraaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQcQcxcxcecGceceIgcxcxcQcQaaaaaaaaaaaaaaaaaaabcGaeaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcGajcQcQcQcQcQcQcQcQcQcQcscQcQcQcQcQcQcQajcGababaaaaaaaacGajaeaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaajcQcQcQcQcQcQcQcQcQcQctcucGcQcQcQcQcGabababaaaaaaabababajcQadaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeadaeaeaeaeaeaeaecQcQcxcxcGcQcQaeaeaeadaaaaaaaaaaaaabcQcQcQaeaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcHcHaeaecQcQcznvcGcGHocQcQaeaeaaaaaaaaabcGcGajcQcQaeaeaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHcHcHcQcQcAcBcecenvcecGcDcQaeadaaaaaaaaaaababcGcQaeaeaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHcHcHcEcecFcGEOceEOcecGcecQaeaeaaaaaaaaaaabadaeaeaeaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHcHcHcQcQcAcIcJcGcGcececDcQaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcHcHaeaecQcQcKcLcLcLcMcQcQaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabadadaeaeaecQcQcNcOcPcQcQaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaecQcQcQcQcQaeaeaeadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaeaeaeOzaeaeaeaaaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaabaaaacGaaaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaabcGabcGcGcGabababaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaaaaaaaaabababaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaaaaaaaaababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaacGaaaaaaaaaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaaaaaaaaaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/overmap/space_pois/clownmime.dmm b/maps/overmap/space_pois/clownmime.dmm deleted file mode 100644 index e309b7bb1f..0000000000 --- a/maps/overmap/space_pois/clownmime.dmm +++ /dev/null @@ -1,836 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"c" = ( -/obj/structure/shuttle/engine/heater{ - dir = 1; - tag = "icon-heater (NORTH)" - }, -/obj/structure/window/reinforced, -/turf/simulated/shuttle/plating, -/area/submap/clownmime) -"e" = ( -/obj/machinery/door/unpowered/shuttle, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"f" = ( -/obj/item/weapon/broken_bottle, -/obj/structure/loot_pile/surface/bones, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"g" = ( -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/obj/structure/loot_pile/surface/bones, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"j" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/supermatter, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"m" = ( -/turf/simulated/mineral, -/area/submap/clownmime) -"n" = ( -/obj/random/outcrop, -/turf/simulated/mineral/floor/vacuum, -/area/submap/clownmime) -"p" = ( -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/turf/simulated/mineral/floor/vacuum, -/area/submap/clownmime) -"q" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/supermatter{ - amount = 5 - }, -/turf/simulated/shuttle/floor, -/area/submap/clownmime) -"s" = ( -/turf/simulated/mineral/floor/vacuum, -/area/submap/clownmime) -"v" = ( -/turf/simulated/shuttle/wall, -/area/submap/clownmime) -"y" = ( -/obj/structure/closet/crate, -/obj/item/weapon/tool/wrench/fuelrod, -/obj/item/weapon/fuel_assembly/tritium, -/obj/item/weapon/fuel_assembly/tritium, -/obj/item/weapon/fuel_assembly/tritium, -/obj/item/weapon/fuel_assembly/tritium, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"z" = ( -/obj/structure/closet/crate, -/obj/item/weapon/grenade/supermatter, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"A" = ( -/obj/structure/shuttle/engine/heater{ - dir = 4; - tag = "icon-heater (EAST)" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/shuttle/plating, -/area/submap/clownmime) -"B" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4; - icon_state = "propulsion_l"; - tag = "icon-propulsion_l (WEST)" - }, -/obj/structure/shuttle/engine/propulsion{ - dir = 4; - icon_state = "burst_r"; - tag = "icon-burst_r (WEST)" - }, -/turf/simulated/shuttle/plating, -/area/submap/clownmime) -"E" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4; - icon_state = "propulsion_l"; - tag = "icon-propulsion_l (WEST)" - }, -/turf/simulated/shuttle/plating, -/area/submap/clownmime) -"F" = ( -/obj/item/weapon/material/shard{ - pixel_x = 9 - }, -/obj/machinery/computer/ship{ - dir = 4 - }, -/turf/simulated/shuttle/floor, -/area/submap/clownmime) -"G" = ( -/obj/effect/landmark/mobcorpse/clown, -/turf/simulated/shuttle/floor, -/area/submap/clownmime) -"H" = ( -/obj/structure/loot_pile/surface/bones, -/turf/simulated/shuttle/floor, -/area/submap/clownmime) -"J" = ( -/obj/structure/grille, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"K" = ( -/obj/structure/loot_pile/surface/bones, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"L" = ( -/turf/simulated/shuttle/floor, -/area/submap/clownmime) -"M" = ( -/turf/simulated/shuttle/wall, -/turf/space, -/area/submap/clownmime) -"N" = ( -/turf/space, -/turf/simulated/shuttle/wall, -/area/submap/clownmime) -"O" = ( -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"P" = ( -/obj/item/weapon/pickaxe, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"Q" = ( -/obj/structure/closet/crate, -/obj/item/weapon/fuel_assembly/phoron, -/obj/item/weapon/fuel_assembly/phoron, -/obj/item/weapon/fuel_assembly/phoron, -/obj/item/weapon/fuel_assembly/phoron, -/obj/item/weapon/fuel_assembly/phoron, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"R" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4; - icon_state = "propulsion_l"; - tag = "icon-propulsion_l (WEST)" - }, -/obj/structure/shuttle/engine/propulsion{ - dir = 4; - icon_state = "propulsion_l"; - tag = "icon-propulsion_l (WEST)" - }, -/turf/simulated/shuttle/plating, -/area/submap/clownmime) -"S" = ( -/obj/item/weapon/material/shard{ - pixel_x = 9 - }, -/turf/simulated/mineral/floor/vacuum, -/area/submap/clownmime) -"T" = ( -/obj/structure/closet/crate, -/obj/item/weapon/fuel_assembly/deuterium, -/obj/item/weapon/fuel_assembly/deuterium, -/obj/item/weapon/fuel_assembly/deuterium, -/obj/item/weapon/fuel_assembly/deuterium, -/obj/item/weapon/fuel_assembly/deuterium, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"U" = ( -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"V" = ( -/obj/structure/closet/crate, -/obj/item/stack/material/supermatter{ - amount = 5 - }, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"W" = ( -/obj/structure/closet/crate, -/obj/item/weapon/gun/magnetic/fuelrod, -/obj/item/weapon/fuel_assembly/blitz/shielded, -/obj/item/weapon/fuel_assembly/blitz/shielded, -/obj/item/weapon/fuel_assembly/blitz/shielded, -/obj/item/weapon/fuel_assembly/blitz/shielded, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) -"Y" = ( -/obj/structure/closet/crate, -/obj/item/weapon/fuel_assembly/supermatter, -/obj/item/weapon/fuel_assembly/supermatter, -/turf/simulated/shuttle/floor/white, -/area/submap/clownmime) - -(1,1,1) = {" -a -a -a -a -m -m -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -m -m -m -m -m -a -a -a -a -a -a -m -m -a -a -a -a -"} -(3,1,1) = {" -a -a -a -m -m -m -m -m -m -a -m -m -m -m -m -m -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -m -m -n -m -m -m -m -m -m -m -m -a -a -a -a -a -"} -(5,1,1) = {" -a -a -a -a -a -m -m -s -s -m -m -m -m -m -m -m -m -m -m -a -"} -(6,1,1) = {" -a -a -a -a -a -m -m -n -s -s -n -s -m -m -m -m -m -m -a -a -"} -(7,1,1) = {" -a -a -a -a -m -m -m -m -s -s -s -s -m -m -m -m -m -a -a -a -"} -(8,1,1) = {" -a -a -a -n -m -m -m -m -s -s -n -s -m -m -m -m -m -a -a -a -"} -(9,1,1) = {" -a -a -M -M -m -m -m -m -n -s -s -s -s -m -m -m -s -a -a -a -"} -(10,1,1) = {" -M -e -v -v -m -m -m -m -m -m -s -s -n -m -m -s -s -a -a -a -"} -(11,1,1) = {" -c -f -j -p -m -m -m -m -m -m -m -s -s -m -m -n -s -s -a -a -"} -(12,1,1) = {" -c -g -G -q -s -S -m -m -m -m -m -m -n -s -m -m -m -n -s -a -"} -(13,1,1) = {" -c -K -V -j -K -s -m -m -m -m -m -m -s -m -m -m -m -m -m -a -"} -(14,1,1) = {" -M -e -v -v -v -m -m -s -m -m -m -m -m -m -m -m -m -n -m -a -"} -(15,1,1) = {" -a -a -M -M -m -m -m -n -s -m -m -m -m -m -m -m -m -m -m -m -"} -(16,1,1) = {" -a -a -a -a -m -a -a -a -M -m -m -J -M -m -m -m -m -m -m -m -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -v -m -F -O -v -m -m -m -m -s -m -m -"} -(18,1,1) = {" -a -a -a -a -a -a -a -M -N -p -G -K -N -M -m -m -m -n -m -m -"} -(19,1,1) = {" -a -a -a -a -a -a -a -v -S -s -H -U -O -v -m -m -m -s -s -n -"} -(20,1,1) = {" -a -a -a -a -a -a -a -v -K -H -L -L -P -v -m -m -m -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -a -a -e -O -L -L -H -O -e -m -m -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -a -a -e -O -L -L -L -O -e -m -m -a -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -v -y -L -H -L -Q -v -m -a -a -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -a -a -v -T -L -L -L -W -v -m -a -a -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -a -v -z -G -H -L -Y -v -m -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -a -v -O -O -O -O -O -v -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -a -M -A -A -A -A -A -M -a -a -a -a -a -a -"} -(28,1,1) = {" -a -a -a -a -a -a -a -a -B -E -E -E -R -a -a -a -a -a -a -a -"} diff --git a/maps/overmap/space_pois/clownmime_28x20.dmm b/maps/overmap/space_pois/clownmime_28x20.dmm new file mode 100644 index 0000000000..fad23f935b --- /dev/null +++ b/maps/overmap/space_pois/clownmime_28x20.dmm @@ -0,0 +1,62 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/loot_pile/surface/bones,/obj/random/trash,/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"c" = (/obj/structure/shuttle/engine/heater{dir = 1; tag = "icon-heater (NORTH)"},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/submap/clownmime) +"e" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"f" = (/obj/item/weapon/broken_bottle,/obj/structure/loot_pile/surface/bones,/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"g" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/structure/loot_pile/surface/bones,/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"j" = (/obj/structure/closet/crate,/obj/item/stack/material/supermatter,/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"m" = (/turf/simulated/mineral,/area/submap/clownmime) +"n" = (/obj/random/outcrop,/turf/simulated/mineral/floor/vacuum,/area/submap/clownmime) +"p" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/mineral/floor/vacuum,/area/submap/clownmime) +"q" = (/obj/structure/closet/crate,/obj/item/stack/material/supermatter{amount = 5},/turf/simulated/shuttle/floor,/area/submap/clownmime) +"s" = (/turf/simulated/mineral/floor/vacuum,/area/submap/clownmime) +"v" = (/turf/simulated/shuttle/wall,/area/submap/clownmime) +"w" = (/obj/random/snack,/turf/simulated/shuttle/floor,/area/submap/clownmime) +"y" = (/obj/structure/closet/crate,/obj/item/weapon/tool/wrench/fuelrod,/obj/item/weapon/fuel_assembly/tritium,/obj/item/weapon/fuel_assembly/tritium,/obj/item/weapon/fuel_assembly/tritium,/obj/item/weapon/fuel_assembly/tritium,/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"z" = (/obj/structure/closet/crate,/obj/item/weapon/grenade/supermatter,/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"A" = (/obj/structure/shuttle/engine/heater{dir = 4; tag = "icon-heater (EAST)"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/submap/clownmime) +"B" = (/obj/structure/shuttle/engine/propulsion{dir = 4; icon_state = "propulsion_l"; tag = "icon-propulsion_l (WEST)"},/obj/structure/shuttle/engine/propulsion{dir = 4; icon_state = "burst_r"; tag = "icon-burst_r (WEST)"},/turf/simulated/shuttle/plating,/area/submap/clownmime) +"D" = (/obj/random/trash,/turf/simulated/shuttle/floor,/area/submap/clownmime) +"E" = (/obj/structure/shuttle/engine/propulsion{dir = 4; icon_state = "propulsion_l"; tag = "icon-propulsion_l (WEST)"},/turf/simulated/shuttle/plating,/area/submap/clownmime) +"F" = (/obj/item/weapon/material/shard{pixel_x = 9},/obj/machinery/computer/ship{dir = 4},/turf/simulated/shuttle/floor,/area/submap/clownmime) +"G" = (/obj/effect/landmark/mobcorpse/clown,/turf/simulated/shuttle/floor,/area/submap/clownmime) +"H" = (/obj/structure/loot_pile/surface/bones,/turf/simulated/shuttle/floor,/area/submap/clownmime) +"I" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/random/trash,/turf/simulated/mineral/floor/vacuum,/area/submap/clownmime) +"J" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"K" = (/obj/structure/loot_pile/surface/bones,/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"L" = (/turf/simulated/shuttle/floor,/area/submap/clownmime) +"M" = (/turf/simulated/shuttle/wall,/turf/space,/area/submap/clownmime) +"N" = (/turf/space,/turf/simulated/shuttle/wall,/area/submap/clownmime) +"O" = (/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"P" = (/obj/item/weapon/pickaxe,/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"Q" = (/obj/structure/closet/crate,/obj/item/weapon/fuel_assembly/phoron,/obj/item/weapon/fuel_assembly/phoron,/obj/item/weapon/fuel_assembly/phoron,/obj/item/weapon/fuel_assembly/phoron,/obj/item/weapon/fuel_assembly/phoron,/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"R" = (/obj/structure/shuttle/engine/propulsion{dir = 4; icon_state = "propulsion_l"; tag = "icon-propulsion_l (WEST)"},/obj/structure/shuttle/engine/propulsion{dir = 4; icon_state = "propulsion_l"; tag = "icon-propulsion_l (WEST)"},/turf/simulated/shuttle/plating,/area/submap/clownmime) +"S" = (/obj/item/weapon/material/shard{pixel_x = 9},/turf/simulated/mineral/floor/vacuum,/area/submap/clownmime) +"T" = (/obj/structure/closet/crate,/obj/item/weapon/fuel_assembly/deuterium,/obj/item/weapon/fuel_assembly/deuterium,/obj/item/weapon/fuel_assembly/deuterium,/obj/item/weapon/fuel_assembly/deuterium,/obj/item/weapon/fuel_assembly/deuterium,/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"U" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/random/trash,/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"V" = (/obj/structure/closet/crate,/obj/item/stack/material/supermatter{amount = 5},/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"W" = (/obj/structure/closet/crate,/obj/item/weapon/gun/magnetic/fuelrod,/obj/item/weapon/fuel_assembly/blitz/shielded,/obj/item/weapon/fuel_assembly/blitz/shielded,/obj/item/weapon/fuel_assembly/blitz/shielded,/obj/item/weapon/fuel_assembly/blitz/shielded,/turf/simulated/shuttle/floor/white,/area/submap/clownmime) +"Y" = (/obj/structure/closet/crate,/obj/item/weapon/fuel_assembly/supermatter,/obj/item/weapon/fuel_assembly/supermatter,/turf/simulated/shuttle/floor/white,/area/submap/clownmime) + +(1,1,1) = {" +aaaaaaaaaMcccMaaaaaaaaaaaaaa +aaaaaaaaaefgKeaaaaaaaaaaaaaa +aaaaaaaaMvjGVvMaaaaaaaaaaaaa +ammaaaanMvIqjvMaaaaaaaaaaaaa +mmmmaammmmmsbvmmaaaaaaaaaaaa +mmmmmmmmmmmSsmmaaaaaaaaaaaaa +ammnmmmmmmmmmmmaaaaaaaaaaaaa +ammmsnmmmmmmmsnaaMvveevvvvMa +aammssssnmmmmmsMvNSKOOyTzOAB +aaammssssmmmmmmmmpsHwLDLGOAE +aammmnsnssmmmmmmFGHLDLHLHOAE +aammmssssssmmmmJOKULHDLLDOAE +aammmmmmsnsnsmmMvNOPOOQWYOAR +aammmmmmmmmsmmmmmMvveevvvvMa +ammmmmmmmmmmmmmmmmmmmmmmmaaa +ammammmmmsnmmmmmmmmmmmaaaaaa +aaaammmmsssmmmmmmmmmaaaaaaaa +aaaammaaaasnmnmmsnsaaaaaaaaa +aaaamaaaaaasmmmmmmsaaaaaaaaa +aaaaaaaaaaaaaammmmnaaaaaaaaa +"} diff --git a/maps/overmap/space_pois/debris1.dmm b/maps/overmap/space_pois/debris1.dmm deleted file mode 100644 index f579036206..0000000000 --- a/maps/overmap/space_pois/debris1.dmm +++ /dev/null @@ -1,606 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/structure/disposalpipe/segment, -/turf/space, -/area/submap/debris1) -"c" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/broken{ - dir = 1 - }, -/turf/space, -/area/submap/debris1) -"e" = ( -/obj/structure/grille/broken, -/turf/space, -/area/submap/debris1) -"g" = ( -/obj/structure/disposalpipe/broken{ - dir = 4 - }, -/turf/space, -/area/submap/debris1) -"h" = ( -/obj/structure/disposalpipe/broken{ - dir = 8 - }, -/obj/item/stack/cable_coil/cut, -/turf/space, -/area/submap/debris1) -"l" = ( -/obj/item/stack/cable_coil/cut, -/turf/space, -/area/submap/debris1) -"m" = ( -/obj/random/obstruction, -/turf/space, -/area/submap/debris1) -"n" = ( -/obj/random/handgun/sec, -/turf/simulated/floor/airless, -/area/submap/debris1) -"o" = ( -/obj/random/tool, -/turf/space, -/area/submap/debris1) -"p" = ( -/obj/structure/girder/displaced, -/turf/space, -/area/submap/debris1) -"r" = ( -/turf/space, -/area/template_noop) -"t" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/space, -/area/submap/debris1) -"u" = ( -/obj/structure/door_assembly/door_assembly_sec, -/obj/item/weapon/airlock_electronics, -/turf/space, -/area/submap/debris1) -"v" = ( -/obj/structure/lattice, -/turf/space, -/area/submap/debris1) -"x" = ( -/obj/structure/disposalpipe/junction, -/turf/space, -/area/submap/debris1) -"y" = ( -/turf/simulated/floor/tiled/airless, -/area/submap/debris1) -"z" = ( -/obj/item/stack/material/steel, -/turf/simulated/floor/airless, -/area/submap/debris1) -"B" = ( -/obj/structure/lattice, -/obj/item/stack/material/steel, -/turf/space, -/area/submap/debris1) -"C" = ( -/obj/structure/disposalpipe/broken{ - dir = 1 - }, -/turf/space, -/area/submap/debris1) -"D" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/turf/simulated/floor/tiled/airless, -/area/submap/debris1) -"E" = ( -/obj/item/stack/rods, -/turf/space, -/area/submap/debris1) -"F" = ( -/turf/simulated/floor/airless, -/area/submap/debris1) -"G" = ( -/obj/random/toolbox, -/turf/simulated/floor/tiled/airless, -/area/submap/debris1) -"I" = ( -/obj/structure/grille/broken, -/obj/structure/lattice, -/turf/space, -/area/submap/debris1) -"J" = ( -/obj/structure/disposalpipe/broken, -/turf/space, -/area/submap/debris1) -"K" = ( -/obj/item/weapon/material/shard, -/turf/space, -/area/submap/debris1) -"N" = ( -/obj/structure/lattice, -/obj/structure/lattice, -/turf/space, -/area/submap/debris1) -"O" = ( -/obj/structure/cable, -/obj/machinery/power/apc/critical{ - pixel_y = -19 - }, -/turf/simulated/floor/airless, -/area/submap/debris1) -"Q" = ( -/obj/random/medical/lite, -/turf/simulated/floor/airless, -/area/submap/debris1) -"T" = ( -/obj/structure/girder, -/turf/simulated/floor/tiled/airless, -/area/submap/debris1) -"U" = ( -/obj/random/medical/pillbottle, -/turf/simulated/floor/airless, -/area/submap/debris1) -"V" = ( -/turf/simulated/wall, -/area/submap/debris1) -"X" = ( -/turf/space, -/area/submap/debris1) -"Y" = ( -/obj/item/weapon/material/shard, -/turf/simulated/floor/airless, -/area/submap/debris1) -"Z" = ( -/obj/item/stack/material/steel, -/turf/space, -/area/submap/debris1) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -r -r -r -r -r -r -r -r -r -v -v -v -r -r -v -r -a -a -"} -(3,1,1) = {" -a -v -v -X -X -X -X -X -X -X -X -X -X -X -X -X -X -X -r -a -"} -(4,1,1) = {" -a -v -X -X -X -X -X -X -X -m -X -X -X -X -v -Z -X -X -v -a -"} -(5,1,1) = {" -a -r -X -g -F -X -E -I -X -X -v -X -F -v -v -X -X -X -r -a -"} -(6,1,1) = {" -a -r -J -x -C -E -v -n -X -E -X -v -g -Z -X -X -F -X -r -a -"} -(7,1,1) = {" -a -r -X -m -y -E -X -E -Y -m -X -X -h -E -F -X -v -X -r -a -"} -(8,1,1) = {" -a -r -X -X -X -B -l -p -X -X -y -p -X -X -X -E -X -X -r -a -"} -(9,1,1) = {" -a -r -X -v -X -o -X -X -Z -l -X -E -r -X -X -V -X -X -r -a -"} -(10,1,1) = {" -a -r -X -Z -Q -v -X -y -v -D -y -X -X -m -E -X -X -X -r -a -"} -(11,1,1) = {" -a -r -X -X -I -v -v -X -v -t -O -V -X -X -Q -E -Z -X -v -a -"} -(12,1,1) = {" -a -r -X -X -X -X -J -b -c -v -G -V -X -E -e -X -X -X -r -a -"} -(13,1,1) = {" -a -r -X -m -X -V -X -Z -X -X -X -u -X -X -X -X -e -Z -r -a -"} -(14,1,1) = {" -a -r -X -X -X -X -v -X -v -N -E -E -K -m -v -o -X -X -r -a -"} -(15,1,1) = {" -a -r -X -E -X -X -X -X -E -J -C -X -X -X -X -X -X -X -v -a -"} -(16,1,1) = {" -a -r -X -X -E -X -T -X -Z -X -X -v -X -z -X -m -Z -X -v -a -"} -(17,1,1) = {" -a -r -X -X -X -X -X -m -X -X -U -X -X -X -p -X -X -X -r -a -"} -(18,1,1) = {" -a -r -X -X -X -X -X -X -X -X -X -X -X -v -X -X -X -X -r -a -"} -(19,1,1) = {" -a -a -r -r -r -r -v -r -v -r -r -r -r -r -r -r -r -r -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/maps/overmap/space_pois/debris1_20x20.dmm b/maps/overmap/space_pois/debris1_20x20.dmm new file mode 100644 index 0000000000..0dc0d012ab --- /dev/null +++ b/maps/overmap/space_pois/debris1_20x20.dmm @@ -0,0 +1,62 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/disposalpipe/segment,/turf/template_noop,/area/submap/debris1) +"c" = (/obj/structure/lattice,/obj/structure/disposalpipe/broken{dir = 1},/turf/template_noop,/area/submap/debris1) +"d" = (/obj/structure/disposalpipe/broken,/turf/template_noop,/area/submap/debris1) +"e" = (/obj/structure/grille/broken,/turf/template_noop,/area/submap/debris1) +"g" = (/obj/structure/disposalpipe/broken{dir = 4},/turf/simulated/floor/plating,/area/submap/debris1) +"h" = (/obj/structure/disposalpipe/broken{dir = 8},/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plating,/area/submap/debris1) +"l" = (/obj/item/stack/cable_coil/cut,/turf/template_noop,/area/submap/debris1) +"m" = (/obj/random/obstruction,/turf/template_noop,/area/submap/debris1) +"n" = (/obj/random/handgun/sec,/turf/template_noop,/area/submap/debris1) +"o" = (/obj/random/tool,/turf/template_noop,/area/submap/debris1) +"p" = (/obj/structure/girder/displaced,/turf/template_noop,/area/submap/debris1) +"r" = (/obj/structure/grille/broken,/turf/simulated/floor/plating,/area/submap/debris1) +"t" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/template_noop,/area/submap/debris1) +"u" = (/obj/structure/door_assembly/door_assembly_sec,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating,/area/submap/debris1) +"v" = (/obj/structure/lattice,/turf/template_noop,/area/submap/debris1) +"w" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor/plating,/area/submap/debris1) +"x" = (/obj/structure/disposalpipe/junction,/turf/simulated/floor/plating,/area/submap/debris1) +"y" = (/turf/template_noop,/area/submap/debris1) +"z" = (/obj/item/stack/material/steel,/turf/template_noop,/area/submap/debris1) +"B" = (/obj/structure/lattice,/obj/item/stack/material/steel,/turf/template_noop,/area/submap/debris1) +"C" = (/obj/structure/disposalpipe/broken{dir = 1},/turf/template_noop,/area/submap/debris1) +"D" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/template_noop,/area/submap/debris1) +"E" = (/obj/item/stack/rods,/turf/template_noop,/area/submap/debris1) +"F" = (/obj/item/stack/rods,/turf/simulated/floor/plating,/area/submap/debris1) +"G" = (/obj/random/toolbox,/turf/template_noop,/area/submap/debris1) +"I" = (/obj/structure/grille/broken,/obj/structure/lattice,/turf/template_noop,/area/submap/debris1) +"J" = (/obj/structure/disposalpipe/broken,/turf/simulated/floor/plating,/area/submap/debris1) +"K" = (/obj/item/weapon/material/shard,/turf/simulated/floor/plating,/area/submap/debris1) +"N" = (/obj/structure/lattice,/obj/structure/lattice,/turf/template_noop,/area/submap/debris1) +"O" = (/obj/structure/cable,/obj/machinery/power/apc/critical{pixel_y = -19},/turf/template_noop,/area/submap/debris1) +"Q" = (/obj/random/medical/lite,/turf/template_noop,/area/submap/debris1) +"S" = (/obj/structure/largecrate/animal/otie,/turf/simulated/floor/plating,/area/submap/debris1) +"T" = (/obj/structure/girder,/turf/template_noop,/area/submap/debris1) +"U" = (/obj/random/medical/pillbottle,/turf/template_noop,/area/submap/debris1) +"V" = (/turf/simulated/floor/plating,/area/submap/debris1) +"X" = (/obj/structure/closet/emcloset/legacy,/turf/simulated/floor/plating,/area/submap/debris1) +"Y" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/debris1) +"Z" = (/obj/item/stack/material/steel,/turf/simulated/floor/plating,/area/submap/debris1) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaa +aavvaaaaaaaaaaaaaaaa +aavVVJVyyyyyyyyyyyaa +aayygxmyvzyymyEyVyaa +aayyVCyyyQIyyyyFVyaa +aayyVEEBovvyyyVVVyaa +aayyEvVwVyvdyvSTyyva +aayyInEpVVVbzyyymyaa +aayyyyYyzvvcVvEzyyva +aaymyEmylDtvVNdyyyaa +aayyvyXyyyOGVECyUyaa +avyyyvVpEyyVuEyvyyaa +avVVVghyyyyVVKVVVyaa +avyyvZFVymyFymyzyvaa +aayvvVyyyEQryvyypyaa +aayzyVyEyyEyyoymyyaa +avyyyVvyyyzyeyyzyyaa +aayyyyyyyyyyzyyyyyaa +aaavaaaaaavaaavvaaaa +aaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/overmap/space_pois/debris2.dmm b/maps/overmap/space_pois/debris2.dmm deleted file mode 100644 index a770fc18f9..0000000000 --- a/maps/overmap/space_pois/debris2.dmm +++ /dev/null @@ -1,616 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/simulated/floor/tiled/airless, -/area/submap/debris2) -"c" = ( -/obj/random/medical/pillbottle, -/turf/simulated/floor/tiled/airless, -/area/submap/debris2) -"d" = ( -/turf/simulated/wall/r_wall, -/area/submap/debris2) -"e" = ( -/obj/item/stack/cable_coil/cut, -/turf/space, -/area/submap/debris2) -"h" = ( -/obj/structure/girder, -/turf/space, -/area/submap/debris2) -"j" = ( -/obj/structure/grille/broken, -/turf/space, -/area/submap/debris2) -"k" = ( -/mob/living/simple_mob/animal/space/carp/large/huge, -/turf/space, -/area/submap/debris2) -"l" = ( -/obj/structure/girder, -/turf/simulated/floor/plating, -/area/submap/debris2) -"m" = ( -/obj/structure/grille/broken, -/turf/template_noop, -/area/submap/debris2) -"n" = ( -/obj/item/stack/cable_coil/cut, -/turf/template_noop, -/area/submap/debris2) -"o" = ( -/obj/machinery/door/airlock/command{ - max_integrity = 40 - }, -/turf/simulated/floor/airless, -/area/submap/debris2) -"p" = ( -/mob/living/simple_mob/hostile/carp/pike, -/turf/space, -/area/submap/debris2) -"r" = ( -/obj/random/maintenance/medical, -/turf/simulated/floor/tiled/airless, -/area/submap/debris2) -"s" = ( -/obj/item/stack/rods, -/turf/space, -/area/submap/debris2) -"t" = ( -/obj/structure/door_assembly/door_assembly_com, -/turf/space, -/area/submap/debris2) -"u" = ( -/obj/item/clothing/head/bio_hood/virology, -/turf/space, -/area/submap/debris2) -"w" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/submap/debris2) -"x" = ( -/turf/template_noop, -/area/submap/debris2) -"y" = ( -/obj/structure/lattice, -/obj/machinery/door/airlock/vault/bolted, -/turf/simulated/floor/plating, -/area/submap/debris2) -"z" = ( -/obj/item/stack/rods, -/turf/template_noop, -/area/submap/debris2) -"A" = ( -/obj/structure/closet/crate, -/obj/item/weapon/reagent_containers/glass/beaker/bluespace, -/turf/simulated/floor/tiled/airless, -/area/submap/debris2) -"C" = ( -/obj/item/stack/material/steel, -/turf/space, -/area/submap/debris2) -"E" = ( -/obj/random/maintenance/medical, -/turf/simulated/floor, -/area/submap/debris2) -"F" = ( -/obj/random/medical/lite, -/turf/simulated/floor, -/area/submap/debris2) -"G" = ( -/obj/structure/safe, -/obj/item/weapon/dnainjector/xraymut, -/obj/item/weapon/dnainjector/runfast, -/obj/item/weapon/dnainjector/antistutt, -/turf/simulated/floor/tiled/airless, -/area/submap/debris2) -"H" = ( -/obj/structure/table, -/obj/item/weapon/material/shard{ - icon_state = "medium" - }, -/turf/simulated/floor/tiled/airless, -/area/submap/debris2) -"J" = ( -/obj/structure/loot_pile/surface, -/turf/simulated/floor/tiled/airless, -/area/submap/debris2) -"K" = ( -/mob/living/simple_mob/hostile/carp/pike, -/turf/template_noop, -/area/submap/debris2) -"L" = ( -/obj/item/weapon/material/shard, -/turf/space, -/area/submap/debris2) -"M" = ( -/turf/simulated/floor, -/area/submap/debris2) -"N" = ( -/obj/item/clothing/suit/bio_suit/virology, -/turf/space, -/area/submap/debris2) -"O" = ( -/obj/item/weapon/material/shard{ - icon_state = "small" - }, -/turf/space, -/area/submap/debris2) -"R" = ( -/obj/item/stack/material/steel, -/turf/template_noop, -/area/submap/debris2) -"S" = ( -/obj/item/weapon/reagent_containers/spray/cleaner, -/turf/space, -/area/submap/debris2) -"T" = ( -/turf/simulated/wall, -/area/submap/debris2) -"U" = ( -/obj/item/clothing/accessory/stethoscope, -/turf/simulated/floor/tiled/airless, -/area/submap/debris2) -"V" = ( -/obj/structure/lattice, -/turf/space, -/area/submap/debris2) -"W" = ( -/turf/simulated/floor/airless, -/area/submap/debris2) -"X" = ( -/turf/space, -/area/submap/debris2) -"Y" = ( -/obj/structure/girder/reinforced, -/turf/simulated/floor/airless, -/area/submap/debris2) -"Z" = ( -/obj/machinery/computer{ - circuit = /obj/effect/decal/cleanable/shreds - }, -/turf/simulated/floor/tiled/airless, -/area/submap/debris2) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -d -d -d -d -d -Y -x -S -X -X -X -X -X -X -C -X -X -X -a -"} -(3,1,1) = {" -a -d -G -A -b -F -d -z -T -T -T -T -o -T -X -X -O -X -X -a -"} -(4,1,1) = {" -a -Y -c -U -b -b -d -X -w -E -b -J -M -T -V -X -X -X -X -a -"} -(5,1,1) = {" -a -Y -M -M -M -V -d -z -m -M -M -E -M -T -X -X -X -X -X -a -"} -(6,1,1) = {" -a -d -d -y -d -d -Y -X -w -X -n -X -w -T -X -X -X -C -X -a -"} -(7,1,1) = {" -a -X -X -p -X -X -S -X -X -T -T -T -K -T -X -X -V -X -X -a -"} -(8,1,1) = {" -a -X -X -X -X -X -X -k -R -X -w -X -b -x -x -X -X -X -X -a -"} -(9,1,1) = {" -a -X -s -T -m -w -T -R -X -O -X -w -X -x -z -X -s -X -X -a -"} -(10,1,1) = {" -a -s -X -T -E -M -T -X -X -X -X -X -X -x -x -X -X -X -X -a -"} -(11,1,1) = {" -a -X -X -T -J -M -T -X -X -r -M -b -j -b -T -X -X -X -t -a -"} -(12,1,1) = {" -a -C -X -T -X -M -N -s -X -X -L -V -V -b -T -X -s -X -X -a -"} -(13,1,1) = {" -a -X -X -l -T -T -T -X -p -u -j -W -b -r -T -X -X -X -X -a -"} -(14,1,1) = {" -a -X -s -X -X -X -X -X -X -X -X -r -H -Z -T -X -X -X -X -a -"} -(15,1,1) = {" -a -V -X -X -s -V -C -X -X -s -h -T -T -T -T -X -X -X -X -a -"} -(16,1,1) = {" -a -X -X -X -X -X -V -X -O -X -V -X -X -X -X -X -C -X -X -a -"} -(17,1,1) = {" -a -X -X -C -X -e -X -X -X -X -X -e -X -V -X -X -X -X -X -a -"} -(18,1,1) = {" -a -X -X -X -X -X -X -h -X -X -C -X -X -X -X -X -X -X -X -a -"} -(19,1,1) = {" -a -X -X -X -X -X -X -X -X -X -X -X -X -X -C -X -X -X -X -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/maps/overmap/space_pois/debris2_20x20.dmm b/maps/overmap/space_pois/debris2_20x20.dmm new file mode 100644 index 0000000000..95a1f68c79 --- /dev/null +++ b/maps/overmap/space_pois/debris2_20x20.dmm @@ -0,0 +1,68 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/simulated/floor/tiled/airless,/area/submap/debris2) +"c" = (/obj/random/medical/pillbottle,/turf/simulated/floor/tiled/airless,/area/submap/debris2) +"d" = (/turf/simulated/wall/r_wall,/area/submap/debris2) +"e" = (/obj/item/stack/cable_coil/cut,/turf/simulated/floor,/area/submap/debris2) +"h" = (/obj/structure/girder,/turf/template_noop,/area/submap/debris2) +"i" = (/obj/item/stack/rods,/mob/living/simple_mob/animal/space/carp/large,/turf/template_noop,/area/submap/debris2) +"j" = (/obj/structure/loot_pile/surface/bones,/turf/simulated/floor/tiled/airless,/area/submap/debris2) +"k" = (/mob/living/simple_mob/animal/space/carp/large/huge,/turf/template_noop,/area/submap/debris2) +"l" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/submap/debris2) +"m" = (/obj/structure/grille/broken,/turf/template_noop,/area/submap/debris2) +"n" = (/obj/item/stack/cable_coil/cut,/turf/template_noop,/area/submap/debris2) +"o" = (/obj/machinery/door/airlock/command{max_integrity = 40},/turf/simulated/floor/airless,/area/submap/debris2) +"p" = (/mob/living/simple_mob/hostile/carp/pike,/turf/simulated/floor,/area/submap/debris2) +"r" = (/obj/random/maintenance/medical,/turf/simulated/floor/tiled/airless,/area/submap/debris2) +"s" = (/obj/item/stack/rods,/turf/simulated/floor,/area/submap/debris2) +"t" = (/obj/structure/door_assembly/door_assembly_com,/turf/template_noop,/area/submap/debris2) +"u" = (/obj/item/clothing/head/bio_hood/virology,/turf/template_noop,/area/submap/debris2) +"w" = (/obj/structure/lattice,/turf/template_noop,/area/submap/debris2) +"x" = (/turf/template_noop,/area/submap/debris2) +"y" = (/obj/structure/lattice,/obj/machinery/door/airlock/vault/bolted,/turf/simulated/floor/plating,/area/submap/debris2) +"z" = (/obj/item/stack/rods,/turf/template_noop,/area/submap/debris2) +"A" = (/obj/structure/closet/crate,/obj/item/weapon/reagent_containers/glass/beaker/bluespace,/turf/simulated/floor/tiled/airless,/area/submap/debris2) +"C" = (/obj/item/stack/material/steel,/mob/living/simple_mob/animal/space/carp,/turf/template_noop,/area/submap/debris2) +"E" = (/obj/random/maintenance/medical,/turf/simulated/floor,/area/submap/debris2) +"F" = (/obj/random/medical/lite,/turf/simulated/floor,/area/submap/debris2) +"G" = (/obj/structure/safe,/obj/item/weapon/dnainjector/xraymut,/obj/item/weapon/dnainjector/runfast,/obj/item/weapon/dnainjector/antistutt,/turf/simulated/floor/tiled/airless,/area/submap/debris2) +"H" = (/obj/structure/table,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/tiled/airless,/area/submap/debris2) +"J" = (/obj/structure/loot_pile/surface,/turf/simulated/floor/tiled/airless,/area/submap/debris2) +"K" = (/mob/living/simple_mob/hostile/carp/pike,/turf/template_noop,/area/submap/debris2) +"L" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/debris2) +"M" = (/turf/simulated/floor,/area/submap/debris2) +"N" = (/obj/item/clothing/suit/bio_suit/virology,/turf/template_noop,/area/submap/debris2) +"O" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/template_noop,/area/submap/debris2) +"P" = (/obj/item/stack/material/steel,/turf/simulated/floor,/area/submap/debris2) +"Q" = (/mob/living/simple_mob/animal/space/carp/large,/turf/template_noop,/area/submap/debris2) +"R" = (/obj/item/stack/material/steel,/turf/template_noop,/area/submap/debris2) +"S" = (/obj/item/weapon/reagent_containers/spray/cleaner,/turf/template_noop,/area/submap/debris2) +"T" = (/turf/simulated/wall,/area/submap/debris2) +"U" = (/obj/item/clothing/accessory/stethoscope,/turf/simulated/floor/tiled/airless,/area/submap/debris2) +"V" = (/mob/living/simple_mob/animal/space/carp,/turf/template_noop,/area/submap/debris2) +"W" = (/turf/simulated/floor/airless,/area/submap/debris2) +"X" = (/mob/living/simple_mob/animal/space/carp,/turf/simulated/floor,/area/submap/debris2) +"Y" = (/obj/structure/girder/reinforced,/turf/simulated/floor/airless,/area/submap/debris2) +"Z" = (/obj/machinery/computer{circuit = /obj/effect/decal/cleanable/shreds; dir = 8},/turf/simulated/floor/tiled/airless,/area/submap/debris2) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaa +addYYdxxxzxRxxwxxxxa +adGcMdxVzxxxxzxxxxxa +adAUMypxTTTTlxxxCxxa +adbjMdMxmEJxTxzxxxxa +adFbwdMMwMMMTxwxnxxa +aYdddYSxTTTNTxRwxxxa +axzxixxkRxMsMMMxxhxa +aSTwmwMPMXMxKxQOxxxa +axTEMMTxOxrxuxzxMxxa +axTbMnTwxxMLmxhwMRxa +axTJExTxwxbwWrTMexxa +axoMMwKbxQmwbHTMxxxa +axTTTTTxxxbbrZTMwxxa +axxwxxMxzxTTTTTxxxRa +aRxxxxxxxxxxxxxxxxxa +axOxMxwxzxxzxxxRxxxa +axxxMRxxxxxxxxxxxxxa +axxxxxxxxxtxxxxxxxxa +aaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/overmap/space_pois/debris3.dmm b/maps/overmap/space_pois/debris3.dmm deleted file mode 100644 index 829a18a934..0000000000 --- a/maps/overmap/space_pois/debris3.dmm +++ /dev/null @@ -1,820 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/item/stack/rods, -/turf/simulated/floor/airless, -/area/submap/debris3) -"c" = ( -/obj/item/trash/popcorn, -/turf/space, -/area/submap/debris3) -"d" = ( -/obj/item/device/nif/bad, -/turf/simulated/floor/airless, -/area/submap/debris3) -"e" = ( -/obj/item/stack/arcadeticket/thirty, -/turf/space, -/area/submap/debris3) -"f" = ( -/obj/structure/lattice, -/obj/item/stack/material/steel, -/turf/space, -/area/submap/debris3) -"g" = ( -/obj/item/weapon/paperplane, -/turf/space, -/area/submap/debris3) -"h" = ( -/obj/item/device/nif/bad, -/turf/space, -/area/submap/debris3) -"i" = ( -/obj/item/stack/rods, -/turf/template_noop, -/area/submap/debris3) -"k" = ( -/obj/item/weapon/material/shard, -/turf/space, -/area/submap/debris3) -"l" = ( -/obj/item/stack/cable_coil{ - amount = 10 - }, -/turf/space, -/area/submap/debris3) -"m" = ( -/turf/simulated/wall, -/area/submap/debris3) -"n" = ( -/obj/item/stack/material/glass, -/turf/space, -/area/submap/debris3) -"p" = ( -/obj/random/plushie, -/turf/space, -/area/submap/debris3) -"q" = ( -/obj/item/stack/rods, -/obj/item/stack/material/steel, -/turf/space, -/area/submap/debris3) -"t" = ( -/obj/machinery/computer/arcade/battle, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/debris3) -"u" = ( -/obj/random/tool, -/turf/space, -/area/submap/debris3) -"v" = ( -/obj/item/trash/syndi_cakes, -/turf/space, -/area/submap/debris3) -"w" = ( -/obj/item/stack/arcadeticket, -/turf/space, -/area/submap/debris3) -"x" = ( -/obj/structure/bookcase{ - name = "bookcase (Adult)" - }, -/turf/simulated/floor/airless, -/area/submap/debris3) -"y" = ( -/obj/item/weapon/contraband/poster/nanotrasen, -/turf/space, -/area/submap/debris3) -"z" = ( -/turf/simulated/floor/airless, -/area/submap/debris3) -"A" = ( -/turf/space, -/area/submap/debris3) -"B" = ( -/obj/item/stack/rods, -/turf/space, -/area/submap/debris3) -"D" = ( -/obj/item/weapon/paper, -/obj/item/weapon/paper, -/turf/space, -/area/submap/debris3) -"F" = ( -/obj/random/tool, -/turf/simulated/floor/airless, -/area/submap/debris3) -"G" = ( -/obj/item/weapon/contraband/poster, -/turf/space, -/area/submap/debris3) -"H" = ( -/obj/item/stack/material/wood, -/turf/space, -/area/submap/debris3) -"I" = ( -/obj/item/stack/rods, -/obj/item/stack/rods, -/turf/space, -/area/submap/debris3) -"J" = ( -/obj/item/trash/pistachios, -/turf/space, -/area/submap/debris3) -"K" = ( -/obj/structure/lattice, -/obj/structure/girder, -/turf/space, -/area/submap/debris3) -"L" = ( -/obj/structure/girder, -/turf/space, -/area/submap/debris3) -"M" = ( -/obj/item/stack/material/steel, -/turf/space, -/area/submap/debris3) -"O" = ( -/obj/structure/girder/displaced, -/turf/space, -/area/submap/debris3) -"S" = ( -/obj/structure/lattice, -/turf/space, -/area/submap/debris3) -"U" = ( -/obj/item/stack/material/wood, -/obj/item/stack/material/wood, -/turf/space, -/area/submap/debris3) -"V" = ( -/obj/item/weapon/circuitboard/arcade, -/turf/space, -/area/submap/debris3) -"Z" = ( -/obj/item/weapon/paper, -/turf/space, -/area/submap/debris3) - -(1,1,1) = {" -a -a -a -i -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -i -a -a -a -a -a -i -a -a -a -"} -(3,1,1) = {" -a -a -A -A -A -A -A -A -A -A -A -A -A -A -A -A -A -A -a -a -"} -(4,1,1) = {" -a -a -A -B -A -B -A -A -A -A -A -A -A -A -B -B -A -A -a -a -"} -(5,1,1) = {" -i -a -A -A -A -A -A -A -A -M -A -A -A -A -A -A -A -A -a -i -"} -(6,1,1) = {" -a -a -A -A -I -A -B -A -A -B -B -M -A -A -M -A -A -A -a -a -"} -(7,1,1) = {" -a -a -A -A -k -A -A -O -A -A -w -A -m -A -A -A -M -A -a -a -"} -(8,1,1) = {" -a -a -A -B -A -M -A -w -H -A -G -n -m -A -A -B -A -A -a -a -"} -(9,1,1) = {" -a -a -A -w -m -A -A -A -M -S -A -A -A -B -M -A -O -A -a -a -"} -(10,1,1) = {" -a -a -A -A -A -A -Z -A -A -B -S -A -M -L -A -c -A -A -a -a -"} -(11,1,1) = {" -a -i -B -A -A -S -A -F -A -A -S -A -Z -A -A -A -M -A -a -a -"} -(12,1,1) = {" -a -a -A -A -A -A -H -L -S -m -m -b -A -A -Z -A -B -A -i -a -"} -(13,1,1) = {" -a -a -A -A -B -O -e -B -h -M -A -D -K -z -S -H -B -A -a -a -"} -(14,1,1) = {" -a -a -A -n -A -A -f -B -A -z -B -A -m -t -A -A -A -A -a -a -"} -(15,1,1) = {" -a -a -A -A -z -H -A -A -A -S -A -q -z -z -A -A -O -A -a -a -"} -(16,1,1) = {" -a -a -A -A -S -A -S -U -B -B -A -A -S -A -M -B -u -A -a -i -"} -(17,1,1) = {" -a -a -A -M -H -A -Z -B -x -S -B -S -y -k -J -A -A -A -a -a -"} -(18,1,1) = {" -a -a -B -A -A -A -A -A -A -A -B -d -A -O -w -M -A -A -a -a -"} -(19,1,1) = {" -i -a -A -A -M -d -S -A -S -M -A -m -p -A -A -B -A -A -a -a -"} -(20,1,1) = {" -a -a -A -B -A -O -H -v -A -V -H -A -B -L -A -M -A -A -a -a -"} -(21,1,1) = {" -a -a -A -A -w -A -A -M -A -w -Z -A -B -A -A -A -A -A -a -a -"} -(22,1,1) = {" -a -a -A -A -M -O -m -m -L -A -B -A -A -q -A -A -A -A -a -a -"} -(23,1,1) = {" -a -a -A -B -k -A -B -G -B -g -n -A -O -A -A -B -B -A -a -a -"} -(24,1,1) = {" -a -a -A -A -A -A -A -M -A -A -l -A -A -A -A -A -A -A -a -a -"} -(25,1,1) = {" -a -a -A -A -B -A -A -A -A -A -A -B -A -A -A -A -A -A -a -a -"} -(26,1,1) = {" -a -a -A -A -A -A -A -A -B -A -B -A -A -B -A -B -A -A -a -a -"} -(27,1,1) = {" -a -a -B -A -A -A -B -A -A -A -B -A -A -A -A -A -A -A -a -a -"} -(28,1,1) = {" -a -a -A -A -A -A -A -A -A -A -A -A -A -A -A -A -A -A -a -i -"} -(29,1,1) = {" -i -a -a -a -a -a -a -i -a -a -a -a -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -i -a -a -"} diff --git a/maps/overmap/space_pois/debris3_30x20.dmm b/maps/overmap/space_pois/debris3_30x20.dmm new file mode 100644 index 0000000000..41e5232d12 --- /dev/null +++ b/maps/overmap/space_pois/debris3_30x20.dmm @@ -0,0 +1,63 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/item/stack/rods,/turf/simulated/floor/airless,/area/submap/debris3) +"c" = (/obj/item/trash/popcorn,/turf/template_noop,/area/submap/debris3) +"d" = (/obj/item/device/nif/bad,/turf/simulated/floor/airless,/area/submap/debris3) +"e" = (/obj/item/stack/arcadeticket/thirty,/turf/template_noop,/area/submap/debris3) +"f" = (/obj/structure/lattice,/obj/item/stack/material/steel,/turf/template_noop,/area/submap/debris3) +"g" = (/obj/item/weapon/paperplane,/turf/template_noop,/area/submap/debris3) +"h" = (/obj/item/device/nif/bad,/turf/template_noop,/area/submap/debris3) +"i" = (/obj/item/stack/rods,/turf/template_noop,/area/submap/debris3) +"k" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/debris3) +"l" = (/obj/item/stack/cable_coil{amount = 10},/turf/simulated/floor/airless,/area/submap/debris3) +"m" = (/turf/simulated/wall,/area/submap/debris3) +"n" = (/obj/item/stack/material/glass,/turf/template_noop,/area/submap/debris3) +"o" = (/obj/item/stack/material/wood,/turf/simulated/floor/airless,/area/submap/debris3) +"p" = (/obj/random/plushie,/turf/template_noop,/area/submap/debris3) +"q" = (/obj/item/stack/rods,/obj/item/stack/material/steel,/turf/template_noop,/area/submap/debris3) +"t" = (/obj/machinery/computer/arcade/battle,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/debris3) +"u" = (/obj/random/tool,/turf/template_noop,/area/submap/debris3) +"v" = (/obj/item/trash/syndi_cakes,/turf/template_noop,/area/submap/debris3) +"w" = (/obj/item/stack/arcadeticket,/turf/template_noop,/area/submap/debris3) +"x" = (/obj/structure/bookcase{name = "bookcase (Adult)"},/turf/simulated/floor/airless,/area/submap/debris3) +"y" = (/obj/item/stack/material/steel,/turf/simulated/floor/airless,/area/submap/debris3) +"z" = (/turf/simulated/floor/airless,/area/submap/debris3) +"A" = (/obj/structure/sign/poster/nanotrasen{dir = 1},/turf/simulated/wall,/area/submap/debris3) +"B" = (/obj/item/weapon/paper,/turf/template_noop,/area/submap/debris3) +"D" = (/obj/item/weapon/paper,/obj/item/weapon/paper,/turf/template_noop,/area/submap/debris3) +"F" = (/obj/random/tool,/turf/simulated/floor/airless,/area/submap/debris3) +"G" = (/turf/template_noop,/area/submap/debris3) +"H" = (/obj/item/stack/material/wood,/turf/template_noop,/area/submap/debris3) +"I" = (/obj/item/stack/rods,/obj/item/stack/rods,/turf/template_noop,/area/submap/debris3) +"J" = (/obj/item/trash/pistachios,/turf/template_noop,/area/submap/debris3) +"K" = (/obj/structure/lattice,/obj/structure/girder,/turf/template_noop,/area/submap/debris3) +"L" = (/obj/structure/girder,/turf/template_noop,/area/submap/debris3) +"M" = (/obj/item/stack/material/steel,/turf/template_noop,/area/submap/debris3) +"N" = (/obj/structure/lattice,/turf/simulated/floor/airless,/area/submap/debris3) +"O" = (/obj/structure/girder/displaced,/turf/template_noop,/area/submap/debris3) +"S" = (/obj/structure/lattice,/turf/template_noop,/area/submap/debris3) +"U" = (/obj/item/stack/material/wood,/obj/item/stack/material/wood,/turf/simulated/floor/airless,/area/submap/debris3) +"V" = (/obj/item/weapon/circuitboard/arcade,/turf/template_noop,/area/submap/debris3) +"Z" = (/obj/item/weapon/paper,/turf/simulated/floor/airless,/area/submap/debris3) + +(1,1,1) = {" +aaaaiaaaaaaaaaaaaaiaaaaaaaaaia +aaaaaaaaaaiaaaaaaaaaaaaaaaaaaa +aaGGGGGGGGiGGGGGGiGGGGGGGGiGaa +iaGiGGGiwGGGGnGGMGGiGGiGGGGGaa +aaGGGIkGmGGGiGzSHGMGwMkGiGGGaa +aaGiGGGMGGSGOGHGGGdOGOzGGGGGaa +aaGGGiGGGBGHefGSBGSHGmbGGGiGaa +aaGGGGOwGGFLibzUbGGvMAzMGGGGia +aaGGGGGoyzzShGGixzSGGLbzGiGGaa +aaGGMiGGSiGmMzSiSzMVwGgzGGGGaa +aiGGGiwGGSSAGiGGiiGHBinlGiiGaa +aaGGGMGnGGGbDGqGSdmGGGGGiGGGaa +aaGGGGmmGMBGKmzSGGpiiGOGGGGGaa +aaGGGGGGiLGGztzGkOGLGqGGGiGGaa +aaGiGMGGMzzZNGGMJwGGGGGGGGGGaa +aaGiGGGiGcGGHGGiGMiMGGiGGiGGaa +aiGGGGMGOGMiiGOuGGGGGGiGGGGGaa +aaGGGGGGGGGGGGGGGGGGGGGGGGGGai +aaaaaaaaaaaiaaaaaaaaaaaaaaaaaa +aaaaiaaaaaaaaaaiaaaaaaaaaaaiaa +"} diff --git a/maps/overmap/space_pois/deepstorage.dmm b/maps/overmap/space_pois/deepstorage.dmm deleted file mode 100644 index dbe2bd0f97..0000000000 --- a/maps/overmap/space_pois/deepstorage.dmm +++ /dev/null @@ -1,6679 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/turf/simulated/mineral/floor/vacuum, -/area/submap/deepstorage) -"ac" = ( -/turf/simulated/wall/iron, -/area/submap/deepstorage) -"ad" = ( -/obj/item/stack/material/silver, -/obj/item/stack/material/gold, -/obj/item/stack/material/silver, -/obj/item/stack/material/silver, -/obj/item/stack/material/gold, -/obj/item/stack/material/gold, -/obj/structure/closet/crate/secure/large, -/obj/random/maintenance, -/obj/random/maintenance, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"ae" = ( -/obj/item/weapon/storage/box/monkeycubes, -/obj/item/weapon/storage/box/monkeycubes, -/obj/item/weapon/storage/box/monkeycubes, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/structure/closet/crate/secure/large, -/obj/random/maintenance, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"af" = ( -/obj/item/stack/material/cardboard, -/obj/item/stack/cable_coil, -/obj/item/stack/material/wood, -/obj/structure/closet/crate/secure/large, -/obj/random/maintenance, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"ag" = ( -/obj/item/weapon/storage/box/mousetraps, -/obj/item/weapon/storage/box/mousetraps, -/obj/structure/closet/crate/secure/large, -/obj/item/weapon/material/knife/tacknife/combatknife, -/obj/item/weapon/material/knife/tacknife/combatknife, -/obj/random/maintenance/medical, -/obj/random/maintenance/security, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"ah" = ( -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/structure/closet/crate/secure/large, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"ai" = ( -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/glass{ - amount = 50 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/stack/material/plasteel{ - amount = 10 - }, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/shoes/combat, -/obj/structure/closet/crate/secure/large, -/obj/item/clothing/shoes/boots/combat, -/obj/item/clothing/shoes/boots/combat, -/obj/random/maintenance/medical, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aj" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/item/weapon/shovel, -/obj/structure/closet/crate/secure/large, -/obj/item/device/flashlight/lantern, -/obj/random/maintenance, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"ak" = ( -/obj/item/weapon/storage/box/rxglasses, -/obj/item/weapon/extinguisher, -/obj/item/weapon/extinguisher, -/obj/item/clothing/glasses/night, -/obj/item/clothing/glasses/night, -/obj/structure/closet/crate/secure/large, -/obj/random/maintenance, -/obj/random/maintenance, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"al" = ( -/obj/item/weapon/storage/box/syringes, -/obj/item/weapon/storage/box/syringes, -/obj/item/weapon/storage/box/beakers, -/obj/item/weapon/storage/box/beakers, -/obj/item/weapon/storage/box/matches, -/obj/item/weapon/storage/box/bodybags, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/structure/closet/crate/secure/large, -/obj/random/maintenance, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"an" = ( -/obj/item/device/defib_kit/loaded, -/obj/item/weapon/storage/box/autoinjectors, -/obj/structure/closet/crate/secure/large, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"ao" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/closet/crate/secure/large, -/obj/item/weapon/storage/box/shotgunammo/large, -/obj/item/weapon/storage/box/shotgunammo/large, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"ap" = ( -/obj/structure/closet/crate/freezer, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aq" = ( -/obj/machinery/iv_drip, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"as" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"at" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"au" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Bunker" - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"av" = ( -/obj/structure/toilet{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/submap/deepstorage) -"aw" = ( -/obj/structure/mirror{ - pixel_x = 30 - }, -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/turf/simulated/floor/tiled/freezer, -/area/submap/deepstorage) -"ax" = ( -/obj/item/weapon/storage/toolbox/mechanical, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"ay" = ( -/obj/structure/reagent_dispensers/peppertank{ - pixel_y = 30 - }, -/obj/structure/table/standard, -/obj/item/weapon/gun/projectile/shotgun/doublebarrel, -/obj/item/weapon/gun/projectile/shotgun/doublebarrel{ - pixel_x = 7; - pixel_y = 6 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aA" = ( -/obj/item/radio{ - pixel_x = -4 - }, -/obj/item/radio, -/obj/item/radio{ - pixel_x = 4 - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aB" = ( -/obj/item/stack/material/steel{ - amount = 50; - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aD" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/table/standard, -/obj/item/weapon/storage/firstaid, -/obj/item/weapon/storage/firstaid/fire{ - pixel_x = 5; - pixel_y = 5 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aE" = ( -/obj/structure/closet/crate/radiation, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aG" = ( -/obj/structure/closet/crate/secure/large, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aH" = ( -/obj/machinery/vending/loadout/uniform, -/turf/simulated/floor/wood, -/area/submap/deepstorage) -"aJ" = ( -/obj/structure/bed, -/turf/simulated/floor/wood/broken, -/area/submap/deepstorage) -"aK" = ( -/turf/simulated/floor/tiled/freezer, -/area/submap/deepstorage) -"aL" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = -8 - }, -/turf/simulated/floor/tiled/freezer, -/area/submap/deepstorage) -"aM" = ( -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aN" = ( -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/bruise_pack, -/obj/structure/table/standard, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/obj/random/maintenance/medical, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aO" = ( -/obj/structure/closet/radiation, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/stack/material/phoron{ - amount = 10 - }, -/obj/item/stack/material/phoron{ - amount = 10 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aP" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/closet/crate/secure/large, -/obj/item/weapon/reagent_containers/food/drinks/cans/starkist, -/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind, -/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer, -/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale, -/obj/item/weapon/reagent_containers/food/drinks/cans/cola, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aQ" = ( -/obj/structure/closet/wardrobe/pink, -/turf/simulated/floor/wood, -/area/submap/deepstorage) -"aR" = ( -/turf/simulated/floor/wood/broken, -/area/submap/deepstorage) -"aT" = ( -/obj/machinery/shower{ - dir = 4 - }, -/turf/simulated/floor/tiled/freezer, -/area/submap/deepstorage) -"aU" = ( -/obj/machinery/shower{ - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/submap/deepstorage) -"aV" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aW" = ( -/obj/structure/table/standard, -/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aX" = ( -/obj/machinery/suit_storage_unit, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"aY" = ( -/obj/structure/closet/wardrobe/pink, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/wood/broken, -/area/submap/deepstorage) -"aZ" = ( -/turf/simulated/floor/wood, -/area/submap/deepstorage) -"ba" = ( -/obj/structure/bed, -/turf/simulated/floor/wood, -/area/submap/deepstorage) -"bb" = ( -/obj/machinery/shower{ - dir = 4 - }, -/obj/item/weapon/soap, -/turf/simulated/floor/tiled/freezer, -/area/submap/deepstorage) -"bc" = ( -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bd" = ( -/obj/item/weapon/storage/box/donkpockets, -/obj/item/weapon/storage/box/donkpockets, -/obj/item/weapon/storage/box/donkpockets, -/obj/item/weapon/storage/box/donkpockets, -/obj/item/weapon/storage/box/donkpockets, -/obj/structure/closet/crate/secure/large, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"be" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Bunker" - }, -/turf/simulated/floor/tiled{ - icon_state = "freezerfloor" - }, -/area/submap/deepstorage) -"bg" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/sleeper/survival_pod, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bh" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bi" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = -8 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bj" = ( -/obj/machinery/sleeper/survival_pod, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bk" = ( -/obj/machinery/processor{ - name = "processor" - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bl" = ( -/obj/item/weapon/storage/box/matches, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bm" = ( -/obj/machinery/reagentgrinder, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bn" = ( -/obj/machinery/recharger, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bo" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/light, -/area/submap/deepstorage) -"bp" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/light, -/area/submap/deepstorage) -"br" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/port_gen/pacman, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bs" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/power/smes, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bu" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/dispenser/oxygen, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bv" = ( -/obj/machinery/biogenerator, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bw" = ( -/obj/machinery/light, -/obj/machinery/portable_atmospherics/hydroponics, -/turf/simulated/floor/light, -/area/submap/deepstorage) -"bx" = ( -/obj/machinery/autolathe, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"by" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bz" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bC" = ( -/obj/item/weapon/storage/box/donkpockets, -/obj/effect/floor_decal/corner/brown/diagonal, -/obj/structure/table/standard, -/turf/simulated/floor/tiled, -/area/submap/deepstorage) -"bE" = ( -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled, -/area/submap/deepstorage) -"bF" = ( -/obj/machinery/seed_extractor, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bG" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/power/apc/high{ - dir = 8; - pixel_x = -20 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bI" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8"; - tag = "" - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bJ" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bM" = ( -/obj/effect/floor_decal/corner/brown/diagonal, -/obj/structure/table/standard, -/turf/simulated/floor/tiled, -/area/submap/deepstorage) -"bN" = ( -/obj/machinery/vending/hydronutrients, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bO" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bP" = ( -/obj/structure/bed/chair/bay/comfy/black{ - dir = 4 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bR" = ( -/obj/machinery/smartfridge, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled, -/area/submap/deepstorage) -"bS" = ( -/obj/machinery/light/small, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled, -/area/submap/deepstorage) -"bT" = ( -/obj/machinery/vending/hydroseeds{ - slogan_delay = 700 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bU" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bV" = ( -/obj/structure/bed/chair/bay/comfy/black, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bW" = ( -/obj/structure/frame/computer, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bX" = ( -/obj/structure/table/reinforced, -/obj/machinery/computer/security/telescreen{ - dir = 1; - name = "Bunker Entrance"; - network = list("Bunker1"); - pixel_y = 2 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"bY" = ( -/obj/structure/table/reinforced, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"ca" = ( -/turf/simulated/floor/plating, -/area/submap/deepstorage) -"cb" = ( -/obj/machinery/camera{ - network = list("Bunker1") - }, -/turf/simulated/floor/plating, -/area/submap/deepstorage) -"cc" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/submap/deepstorage) -"cd" = ( -/obj/machinery/door/blast/regular, -/turf/simulated/floor/plating, -/area/submap/deepstorage) -"ce" = ( -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/deepstorage) -"ea" = ( -/obj/structure/closet/crate/secure/large, -/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko, -/obj/item/weapon/reagent_containers/food/drinks/cans/space_up, -/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater, -/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice, -/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb_diet, -/obj/item/weapon/reagent_containers/food/drinks/cans/cola, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"iC" = ( -/obj/structure/closet/crate/secure/large, -/obj/item/weapon/material/knife/butch, -/obj/item/weapon/material/kitchen/rollingpin, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/material/minihoe, -/obj/random/maintenance/medical, -/obj/random/maintenance/security, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"iT" = ( -/obj/structure/closet/crate/secure/large, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"kX" = ( -/obj/structure/closet/crate/secure/large, -/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko, -/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime, -/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea, -/obj/item/weapon/reagent_containers/food/drinks/cans/cola, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"lh" = ( -/obj/structure/bed/chair/backed_red{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/submap/deepstorage) -"mL" = ( -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"rc" = ( -/obj/machinery/door/blast/regular{ - id = "deepstorage_external" - }, -/turf/simulated/floor/plating, -/area/submap/deepstorage) -"tg" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/remote/blast_door{ - dir = 4; - id = "deepstorage_internal"; - name = "remote blast door-control Internal"; - pixel_x = -1; - pixel_y = 7 - }, -/obj/machinery/button/remote/blast_door{ - dir = 4; - id = "deepstorage_external"; - name = "remote blast door-control External"; - pixel_x = -1; - pixel_y = -3 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"uE" = ( -/obj/structure/table/standard, -/obj/random/firstaid, -/obj/random/firstaid, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"vI" = ( -/obj/effect/floor_decal/corner/brown/diagonal, -/obj/structure/bed/chair/backed_red{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/submap/deepstorage) -"wX" = ( -/obj/random/outcrop, -/turf/simulated/mineral/floor/vacuum, -/area/submap/deepstorage) -"xi" = ( -/obj/structure/closet/crate/secure/large, -/obj/item/weapon/reagent_containers/food/drinks/cans/tonic, -/obj/item/weapon/reagent_containers/food/drinks/cans/tonic, -/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind, -/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater, -/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer, -/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice, -/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale, -/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb, -/obj/item/weapon/reagent_containers/food/drinks/cans/cola, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"yM" = ( -/turf/simulated/wall/r_wall, -/area/submap/deepstorage) -"zE" = ( -/obj/structure/closet/crate/secure/large, -/obj/item/weapon/reagent_containers/food/drinks/cans/starkist, -/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime, -/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb_diet, -/obj/item/weapon/reagent_containers/food/drinks/cans/cola, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"HS" = ( -/obj/machinery/door/blast/regular{ - id = "deepstorage_internal" - }, -/turf/simulated/floor/plating, -/area/submap/deepstorage) -"Ku" = ( -/obj/structure/closet/crate/secure/large, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/obj/item/weapon/storage/mre/random, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"Mr" = ( -/obj/structure/table/standard, -/obj/item/weapon/storage/firstaid/bonemed, -/obj/item/weapon/storage/firstaid/adv{ - pixel_x = 5; - pixel_y = 5 - }, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"OI" = ( -/obj/machinery/telecomms/relay/preset/ruskie, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"Sc" = ( -/obj/structure/closet/crate/secure/large, -/obj/item/weapon/reagent_containers/food/drinks/cans/space_up, -/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea, -/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb, -/obj/item/weapon/reagent_containers/food/drinks/cans/cola, -/turf/simulated/floor/tiled/asteroid_steel, -/area/submap/deepstorage) -"XM" = ( -/obj/effect/floor_decal/corner/brown/diagonal, -/obj/structure/table/standard, -/obj/item/weapon/storage/mre/random, -/turf/simulated/floor/tiled, -/area/submap/deepstorage) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(14,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(15,1,1) = {" -aa -aa -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(16,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(17,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -aa -"} -(18,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(19,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -"} -(20,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(21,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(22,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(23,1,1) = {" -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ce -ce -ce -ab -ab -ab -ab -ab -"} -(24,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ce -ce -ce -ce -ce -ce -ce -ce -ab -ab -ab -"} -(25,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -bg -bj -ac -bx -mL -bG -bO -bU -mL -cd -ca -ca -ac -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ab -ab -"} -(26,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -mL -mL -ac -br -mL -bH -mL -mL -mL -HS -ca -ca -ac -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -"} -(27,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -au -ac -bs -by -bI -mL -mL -mL -ac -ca -ca -ac -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -ce -"} -(28,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -aH -aQ -aY -ac -mL -mL -ac -OI -mL -mL -mL -mL -bX -ac -cb -ca -rc -ce -ce -ce -ce -ab -ab -ab -ce -ce -ce -ce -ce -"} -(29,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -aR -aR -aZ -au -mL -mL -ac -mL -mL -mL -mL -bV -bW -ac -cc -ca -cd -ce -ce -ce -ce -ab -ab -ab -ab -ce -ce -ce -ce -"} -(30,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -aJ -ba -ba -ac -mL -mL -au -mL -mL -mL -bP -mL -tg -ac -ac -ac -ac -ce -ce -ab -ab -ab -ab -ab -ab -ab -ab -ce -ce -"} -(31,1,1) = {" -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ac -ac -ac -ac -ac -ac -bh -mL -ac -bu -bz -bJ -bY -bW -bY -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(32,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -av -aK -aT -bb -ac -mL -mL -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(33,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -aw -aL -aU -aU -be -mL -mL -mL -mL -bM -bM -bR -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(34,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -ac -ac -ac -ac -mL -mL -mL -mL -bE -bE -bS -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(35,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ax -aM -aV -ac -mL -mL -bk -ac -mL -bC -XM -bE -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(36,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ay -mL -mL -bc -mL -mL -bl -ac -mL -XM -bM -bE -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -aa -"} -(37,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ac -aW -mL -mL -bc -mL -mL -bm -ac -mL -lh -vI -bE -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(38,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -aA -mL -mL -au -mL -mL -bn -ac -mL -mL -mL -mL -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(39,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -aB -mL -mL -bc -mL -mL -mL -mL -mL -mL -mL -mL -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -"} -(40,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -Mr -mL -mL -bc -mL -bi -mL -mL -bv -bF -bN -bT -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -"} -(41,1,1) = {" -aa -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -yM -yM -yM -yM -yM -aD -aN -uE -yM -au -yM -ac -au -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -"} -(42,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -yM -ad -aj -ap -yM -yM -yM -yM -yM -mL -yM -bp -mL -bw -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(43,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -yM -ae -ak -aq -yM -aE -aO -aX -aX -mL -yM -bo -mL -bo -ac -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(44,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -yM -af -al -mL -au -mL -mL -mL -mL -mL -yM -bo -mL -bo -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(45,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -yM -ag -iC -mL -yM -aG -iT -Ku -mL -mL -yM -bp -mL -bw -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(46,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -yM -ah -an -as -yM -aG -iT -aG -bd -bd -yM -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(47,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -yM -ai -ao -at -yM -xi -ea -Sc -bd -bd -yM -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(48,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -yM -yM -yM -yM -yM -zE -aP -kX -bd -bd -yM -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(49,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -yM -yM -yM -yM -yM -yM -yM -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(50,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(51,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(52,1,1) = {" -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(53,1,1) = {" -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(54,1,1) = {" -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(55,1,1) = {" -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(56,1,1) = {" -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(57,1,1) = {" -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(58,1,1) = {" -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(59,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(60,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -"} -(61,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -"} -(62,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -"} -(63,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -"} -(64,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -"} -(65,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -"} -(66,1,1) = {" -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -"} -(67,1,1) = {" -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -"} -(68,1,1) = {" -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -"} -(69,1,1) = {" -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -"} -(70,1,1) = {" -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -"} -(71,1,1) = {" -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -"} -(72,1,1) = {" -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -"} -(73,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -"} -(74,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -"} -(75,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -aa -aa -aa -aa -"} -(76,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -"} -(77,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -"} -(78,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -"} -(79,1,1) = {" -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -"} -(80,1,1) = {" -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -wX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -"} -(81,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -"} -(82,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(83,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(84,1,1) = {" -aa -aa -ab -ab -ab -aa -aa -ab -ab -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(85,1,1) = {" -aa -aa -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} diff --git a/maps/overmap/space_pois/deepstorage_85-67.dmm b/maps/overmap/space_pois/deepstorage_85-67.dmm new file mode 100644 index 0000000000..fd74743434 --- /dev/null +++ b/maps/overmap/space_pois/deepstorage_85-67.dmm @@ -0,0 +1,225 @@ +"aa" = (/turf/template_noop,/area/template_noop) +"ab" = (/turf/simulated/mineral/floor/vacuum,/area/submap/deepstorage) +"ac" = (/turf/simulated/wall/iron,/area/submap/deepstorage) +"ad" = (/obj/item/stack/material/silver,/obj/item/stack/material/gold,/obj/item/stack/material/silver,/obj/item/stack/material/silver,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/structure/closet/crate/secure/large,/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"ae" = (/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/closet/crate/secure/large,/obj/random/maintenance,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"af" = (/obj/item/stack/material/cardboard,/obj/item/stack/cable_coil,/obj/item/stack/material/wood,/obj/structure/closet/crate/secure/large,/obj/random/maintenance,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"ag" = (/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/obj/structure/closet/crate/secure/large,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/random/maintenance/medical,/obj/random/maintenance/security,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"ah" = (/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/structure/closet/crate/secure/large,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"ai" = (/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/plasteel{amount = 10},/obj/item/clothing/shoes/combat,/obj/item/clothing/shoes/combat,/obj/structure/closet/crate/secure/large,/obj/item/clothing/shoes/boots/combat,/obj/item/clothing/shoes/boots/combat,/obj/random/maintenance/medical,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aj" = (/obj/machinery/light{dir = 8},/obj/item/weapon/shovel,/obj/structure/closet/crate/secure/large,/obj/item/device/flashlight/lantern,/obj/random/maintenance,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"ak" = (/obj/item/weapon/storage/box/rxglasses,/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/night,/obj/structure/closet/crate/secure/large,/obj/random/maintenance,/obj/random/maintenance,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"al" = (/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/box/bodybags,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/structure/closet/crate/secure/large,/obj/random/maintenance,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"an" = (/obj/item/device/defib_kit/loaded,/obj/item/weapon/storage/box/autoinjectors,/obj/structure/closet/crate/secure/large,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"ao" = (/obj/machinery/light{dir = 4},/obj/structure/closet/crate/secure/large,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"ap" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aq" = (/obj/machinery/iv_drip,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"as" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"at" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"au" = (/obj/machinery/door/airlock/highsecurity{name = "Bunker"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"av" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor/tiled/freezer,/area/submap/deepstorage) +"aw" = (/obj/structure/mirror{pixel_x = 30},/obj/structure/sink{dir = 4; pixel_x = 11},/turf/simulated/floor/tiled/freezer,/area/submap/deepstorage) +"ax" = (/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/table/standard,/obj/item/device/spaceflare{pixel_y = 0; pixel_x = 7},/obj/item/device/spaceflare{pixel_y = 0; pixel_x = -4},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"ay" = (/obj/structure/reagent_dispensers/peppertank{pixel_y = 30},/obj/structure/table/standard,/obj/item/weapon/gun/projectile/shotgun/doublebarrel,/obj/item/weapon/gun/projectile/shotgun/doublebarrel{pixel_x = 7; pixel_y = 6},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aA" = (/obj/structure/table/standard,/obj/item/device/radio/headset/sar/alt,/obj/item/device/radio/headset/sar/alt{pixel_x = 7},/obj/item/device/radio/headset/sar/alt{pixel_y = 0; pixel_x = -6},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aB" = (/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/rods{amount = 50},/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/structure/table/standard,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aD" = (/obj/machinery/light/small{dir = 4},/obj/structure/table/standard,/obj/item/weapon/storage/firstaid,/obj/item/weapon/storage/firstaid/fire{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aE" = (/obj/structure/closet/crate/radiation,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aG" = (/obj/structure/closet/crate/secure/large,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aH" = (/obj/machinery/vending/loadout/uniform,/turf/simulated/floor/wood,/area/submap/deepstorage) +"aJ" = (/obj/structure/bed,/obj/effect/decal/remains/unathi,/obj/item/weapon/bedsheet/blue,/turf/simulated/floor/wood/broken,/area/submap/deepstorage) +"aK" = (/turf/simulated/floor/tiled/freezer,/area/submap/deepstorage) +"aL" = (/obj/machinery/light/small{dir = 4; pixel_y = -8},/obj/effect/decal/cleanable/blood/tracks{color = "red"; desc = "Your instincts say you shouldn't be following these."; icon = 'icons/effects/blood.dmi'; icon_state = "tracks"},/turf/simulated/floor/tiled/freezer,/area/submap/deepstorage) +"aM" = (/obj/item/clothing/gloves/combat,/obj/item/clothing/gloves/combat,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/structure/table/standard,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aN" = (/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/structure/table/standard,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aO" = (/obj/structure/closet/radiation,/obj/machinery/light{dir = 8},/obj/item/stack/material/phoron{amount = 10},/obj/item/stack/material/phoron{amount = 10},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aP" = (/obj/machinery/light{dir = 4},/obj/structure/closet/crate/secure/large,/obj/item/weapon/reagent_containers/food/drinks/cans/starkist,/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind,/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer,/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aQ" = (/obj/structure/closet/wardrobe/pink,/obj/item/ammo_magazine/ammo_box/b12g,/turf/simulated/floor/wood,/area/submap/deepstorage) +"aR" = (/mob/living/simple_mob/otie/security/phoron/red/chubby{faction = "sydicate"; health = 350; name = "rabid chubby red guard otie"},/obj/item/weapon/bedsheet/clown,/turf/simulated/floor/wood/broken,/area/submap/deepstorage) +"aT" = (/obj/machinery/shower{dir = 4},/turf/simulated/floor/tiled/freezer,/area/submap/deepstorage) +"aU" = (/obj/machinery/shower{dir = 8},/obj/effect/decal/cleanable/blood/tracks{color = "red"; desc = "Your instincts say you shouldn't be following these."; icon = 'icons/effects/blood.dmi'; icon_state = "tracks"},/turf/simulated/floor/tiled/freezer,/area/submap/deepstorage) +"aV" = (/obj/machinery/light/small{dir = 8},/obj/structure/table/standard,/obj/item/ammo_magazine/ammo_box/b12g{pixel_y = -4},/obj/item/ammo_magazine/ammo_box/b12g/pellet,/obj/item/ammo_magazine/ammo_box/b12g/pellet{pixel_y = 4},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aW" = (/obj/structure/table/standard,/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aX" = (/obj/machinery/suit_storage_unit,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"aY" = (/obj/structure/closet/wardrobe/pink,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood/broken,/area/submap/deepstorage) +"aZ" = (/turf/simulated/floor/wood,/area/submap/deepstorage) +"ba" = (/obj/structure/bed,/obj/effect/decal/cleanable/blood/gibs{color = "red"; icon_state = "gibdown1_flesh"},/turf/simulated/floor/wood,/area/submap/deepstorage) +"bb" = (/obj/machinery/shower{dir = 4},/obj/item/weapon/soap,/turf/simulated/floor/tiled/freezer,/area/submap/deepstorage) +"bc" = (/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bd" = (/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/structure/closet/crate/secure/large,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"be" = (/obj/machinery/door/airlock/highsecurity{name = "Bunker"},/turf/simulated/floor/tiled{icon_state = "freezerfloor"},/area/submap/deepstorage) +"bg" = (/obj/machinery/light/small{dir = 8},/obj/machinery/sleeper/survival_pod,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bh" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bi" = (/obj/machinery/light/small{dir = 4; pixel_y = -8},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bj" = (/obj/machinery/sleeper/survival_pod,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bk" = (/obj/machinery/processor{name = "processor"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bl" = (/obj/item/weapon/storage/box/matches,/obj/structure/table/standard,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bm" = (/obj/machinery/reagentgrinder,/obj/structure/table/standard,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bn" = (/obj/machinery/recharger,/obj/structure/table/standard,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bo" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/light,/area/submap/deepstorage) +"bp" = (/obj/machinery/light{dir = 1},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/light,/area/submap/deepstorage) +"br" = (/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bs" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/power/smes,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bu" = (/obj/machinery/light/small{dir = 1},/obj/structure/dispenser/oxygen,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bv" = (/obj/machinery/biogenerator,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bw" = (/obj/machinery/light,/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/light,/area/submap/deepstorage) +"bx" = (/obj/machinery/autolathe,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"by" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/power/terminal{dir = 1},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bz" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bC" = (/obj/item/weapon/storage/box/donkpockets,/obj/effect/floor_decal/corner/brown/diagonal,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/deepstorage) +"bE" = (/obj/effect/floor_decal/corner/brown/diagonal,/turf/simulated/floor/tiled,/area/submap/deepstorage) +"bF" = (/obj/machinery/seed_extractor,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bG" = (/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc/high{dir = 8; pixel_x = -20},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bI" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bJ" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bM" = (/obj/effect/floor_decal/corner/brown/diagonal,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/deepstorage) +"bN" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bO" = (/obj/machinery/space_heater,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bP" = (/obj/structure/bed/chair/bay/comfy/black{dir = 4},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bR" = (/obj/machinery/smartfridge,/obj/effect/floor_decal/corner/brown/diagonal,/turf/simulated/floor/tiled,/area/submap/deepstorage) +"bS" = (/obj/machinery/light/small,/obj/effect/floor_decal/corner/brown/diagonal,/turf/simulated/floor/tiled,/area/submap/deepstorage) +"bT" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bU" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bV" = (/obj/structure/bed/chair/bay/comfy/black,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bW" = (/obj/structure/frame/computer,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bX" = (/obj/structure/table/reinforced,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "screen"; layer = 4; pixel_y = -32},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"bY" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"ca" = (/turf/simulated/floor/plating,/area/submap/deepstorage) +"cb" = (/obj/machinery/camera{network = list("Bunker1")},/turf/simulated/floor/plating,/area/submap/deepstorage) +"cc" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/submap/deepstorage) +"cd" = (/obj/machinery/door/blast/regular,/turf/simulated/floor/plating,/area/submap/deepstorage) +"ce" = (/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/deepstorage) +"cG" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/industrial/danger,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/deepstorage) +"ea" = (/obj/structure/closet/crate/secure/large,/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko,/obj/item/weapon/reagent_containers/food/drinks/cans/space_up,/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater,/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice,/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb_diet,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"eh" = (/obj/machinery/light,/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/rust,/turf/simulated/floor/light,/area/submap/deepstorage) +"eB" = (/obj/machinery/light{dir = 1},/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/rust,/turf/simulated/floor/light,/area/submap/deepstorage) +"eX" = (/obj/effect/floor_decal/borderfloorblack,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/deepstorage) +"ic" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor/plating/external,/area/submap/deepstorage) +"il" = (/obj/effect/decal/cleanable/blood/gibs{color = "red"; icon_state = "mgibbl2"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"iC" = (/obj/structure/closet/crate/secure/large,/obj/item/weapon/material/knife/butch,/obj/item/weapon/material/kitchen/rollingpin,/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/material/minihoe,/obj/random/maintenance/medical,/obj/random/maintenance/security,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"iM" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/plating/external,/area/submap/deepstorage) +"iT" = (/obj/structure/closet/crate/secure/large,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"kX" = (/obj/structure/closet/crate/secure/large,/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko,/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime,/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"lh" = (/obj/structure/bed/chair/backed_red{dir = 8},/turf/simulated/floor/tiled,/area/submap/deepstorage) +"lD" = (/obj/machinery/shower{dir = 8},/obj/effect/decal/cleanable/blood/gibs{color = "red"; icon_state = "mgibbl2"},/turf/simulated/floor/tiled/freezer,/area/submap/deepstorage) +"lH" = (/obj/effect/floor_decal/borderfloorblack/corner,/obj/structure/marker_beacon,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/deepstorage) +"mu" = (/obj/effect/wingrille_spawn/reinforced,/turf/simulated/wall/iron,/area/submap/deepstorage) +"mL" = (/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"pb" = (/obj/effect/decal/cleanable/blood/gibs{color = "red"; icon_state = "mfloor1"},/obj/effect/decal/remains/human,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"qc" = (/turf/simulated/floor/plating/external,/area/submap/deepstorage) +"qN" = (/obj/effect/floor_decal/borderfloorblack{dir = 4},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/deepstorage) +"qV" = (/obj/structure/prop/machine/comm_tower/starts_on,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/external,/area/submap/deepstorage) +"rc" = (/obj/machinery/door/blast/regular{id = "deepstorage_external"},/turf/simulated/floor/plating,/area/submap/deepstorage) +"sF" = (/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/blood/tracks{color = "red"; desc = "Your instincts say you shouldn't be following these."; dir = 4; icon = 'icons/effects/blood.dmi'; icon_state = "tracks"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"tg" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{dir = 4; id = "deepstorage_internal"; name = "remote blast door-control Internal"; pixel_x = -1; pixel_y = 7},/obj/machinery/button/remote/blast_door{dir = 4; id = "deepstorage_external"; name = "remote blast door-control External"; pixel_x = -1; pixel_y = -3},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"tS" = (/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/industrial/danger{dir = 4},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/deepstorage) +"uj" = (/obj/effect/decal/remains/unathi,/obj/effect/decal/cleanable/blood/gibs{color = "red"; icon_state = "mfloor2"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"uE" = (/obj/structure/table/standard,/obj/random/firstaid,/obj/random/firstaid,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"uG" = (/obj/effect/floor_decal/corner/brown/diagonal,/obj/effect/floor_decal/rust,/obj/structure/bed/chair/backed_red{dir = 8},/turf/simulated/floor/tiled,/area/submap/deepstorage) +"uJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/effect/floor_decal/rust,/turf/simulated/floor/plating/external,/area/submap/deepstorage) +"vI" = (/turf/simulated/floor/reinforced/airless,/area/submap/deepstorage) +"wk" = (/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/structure/closet/crate/secure/large,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"wX" = (/obj/random/outcrop,/turf/simulated/mineral/floor/vacuum,/area/submap/deepstorage) +"xi" = (/obj/structure/closet/crate/secure/large,/obj/item/weapon/reagent_containers/food/drinks/cans/tonic,/obj/item/weapon/reagent_containers/food/drinks/cans/tonic,/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind,/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater,/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer,/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice,/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale,/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"yM" = (/turf/simulated/wall/r_wall,/area/submap/deepstorage) +"zE" = (/obj/structure/closet/crate/secure/large,/obj/item/weapon/reagent_containers/food/drinks/cans/starkist,/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime,/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb_diet,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"Ct" = (/obj/effect/floor_decal/corner/brown/diagonal,/obj/structure/bed/chair/backed_red{dir = 4},/turf/simulated/floor/tiled,/area/submap/deepstorage) +"CA" = (/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/blood/tracks{color = "red"; desc = "Your instincts say you shouldn't be following these."; icon = 'icons/effects/blood.dmi'; icon_state = "tracks"; dir = 10},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"CJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/external,/area/submap/deepstorage) +"Dd" = (/obj/structure/marker_beacon,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/deepstorage) +"Dq" = (/obj/effect/decal/cleanable/blood/gibs{color = "red"; icon_state = "mfloor6"},/turf/simulated/floor/wood/broken,/area/submap/deepstorage) +"DG" = (/obj/item/weapon/bedsheet/ce,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"Ex" = (/obj/structure/bed,/obj/effect/decal/remains/tajaran,/turf/simulated/floor/wood,/area/submap/deepstorage) +"FZ" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/submap/deepstorage) +"HS" = (/obj/machinery/door/blast/regular{id = "deepstorage_internal"},/turf/simulated/floor/plating,/area/submap/deepstorage) +"Jh" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/deepstorage) +"Kl" = (/obj/structure/cable{d1 = 2; d2 = 4; dir = 4; icon_state = "2-4"},/turf/simulated/floor/plating/external,/area/submap/deepstorage) +"Kq" = (/obj/item/stack/cable_coil,/turf/simulated/floor/plating/external,/area/submap/deepstorage) +"Ku" = (/obj/structure/closet/crate/secure/large,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"Lm" = (/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/blood/tracks{color = "red"; desc = "Your instincts say you shouldn't be following these."; dir = 5; icon = 'icons/effects/blood.dmi'; icon_state = "tracks"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"Mr" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/bonemed,/obj/item/weapon/storage/firstaid/adv{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"Ms" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/industrial/danger{dir = 8},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/deepstorage) +"NN" = (/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/effect/floor_decal/industrial/danger{dir = 1},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/deepstorage) +"OI" = (/obj/machinery/telecomms/relay/preset/ruskie,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"QK" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/deepstorage) +"QY" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"RQ" = (/obj/effect/floor_decal/borderfloorblack{dir = 1},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/deepstorage) +"Sc" = (/obj/structure/closet/crate/secure/large,/obj/item/weapon/reagent_containers/food/drinks/cans/space_up,/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea,/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"SG" = (/obj/structure/closet/crate/secure/large,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/item/weapon/storage/mre/random,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"TV" = (/obj/effect/wingrille_spawn/reinforced/polarized,/turf/simulated/floor/plating/external,/area/submap/deepstorage) +"Ul" = (/obj/effect/floor_decal/borderfloorblack/corner{dir = 1},/obj/effect/floor_decal/industrial/danger/corner{dir = 8},/obj/structure/marker_beacon,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/deepstorage) +"Va" = (/obj/effect/decal/remains/deer,/obj/effect/decal/cleanable/blood/gibs{color = "red"; icon_state = "mgibbl4"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) +"XB" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/rust,/turf/simulated/floor/light,/area/submap/deepstorage) +"XM" = (/obj/effect/floor_decal/corner/brown/diagonal,/obj/structure/table/standard,/obj/item/weapon/storage/mre/random,/turf/simulated/floor/tiled,/area/submap/deepstorage) +"Zi" = (/obj/effect/decal/cleanable/blood/tracks{color = "red"; desc = "Your instincts say you shouldn't be following these."; dir = 4; icon = 'icons/effects/blood.dmi'; icon_state = "tracks"},/turf/simulated/floor/tiled/asteroid_steel,/area/submap/deepstorage) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababwXabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababab +aaaaaaaaaaaaaaaaaaaaaaaaababababababababababwXababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaababababab +aaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababwXabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaa +aaaaaaaaaaaaaaaaaaaaaaabababwXabababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaababababababababababababababababaaaa +aaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaababababababababababababababababababaaaa +aaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaaaaaaaabababababababababababababababababababwXabababababababababababababababababababababababababababababababababababababababababababababwXabababababababaaaa +aaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababwXabababababababababababababababababababwXababababababababababababababababaa +aaaaaaaaaaaaaaaaaaaaaaababababababwXababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababwXababababababababababababwXabababababababababababababababababababababababababababababwXababababababaa +aaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababwXabababababababababababababababababababababababababababababababwXabababababababababababab +aaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababwXababababababababababababababababababababababab +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaababababababababababababababababababababwXababababababababababababababwXababababababababababababababababababababababababababababababababababababababababababababababab +aaababababababababababababababababababababababababababababwXababababababababababababababababababababwXabababababababababababababababababababababababababababababababababab +aaabababwXababababwXababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwXababababaa +aaaaabababababababababababababababababababababababababababababababababababababababwXababababababababababababababababababababababababababababababababababababababababababaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaabababababababababababababababababwXabababababababababababwXabababababababababababababababababababababwXababababababababababababababababababababababababababababababab +aaaaabababababababababababwXabababababababababababababababababababababababababababababababababababwXabababababababababababababababwXababababababababababababababababababab +aaaaabababababababababababwXababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababwXabababababababaa +aaaaabababwXabababababababababababababababababwXababababababababababababwXababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa +aaabababababababababababababababababababababababababababababababababababababababyMyMyMyMyMyMyMyMababababababababababababababababababababababababababababababababababaaaaaa +aaabababababababababababababababababababababababababababababwXabababababababababyMadaeafagahaiyMababababababababwXababababababababababababababababababababababababaaaaaaaa +aaababababababwXababababababababababababababababababababababababababababababababyMajakaliCanaoyMababababababababababababababababababababababababababababababababaaaaaaaaaa +ababababwXabababababababwXabababababababababababababababababababababababababababyMapaqmLmLasatyMababababababababababababababababababababababababababababababababaaaaaaaaaa +ababababababababababababababababababababababababababababababacacacacacacacacacacyMyMyMauyMyMyMyMyMabababababababababababababababababababababababababababababababaaaaaaaaaa +aaabababababababababababababababababababababababababacacacacacavawacaxayaWaAaBMraDyMaEmLaGaGxizEyMababababababababababababababababababababwXababababababababababaaaaaaaaaa +aaabababababababababababababababababababababababababacaHDqaJacaKaLacaMQYQYQYmLmLaNyMaOmLiTiTeaaPyMababababababababababababababababababababababababababababababababaaaaaaaa +aaaaababababababababababababababababababwXabababababacaQaRbaacaTlDacaVmLmLmLQYmLuEyMaXQYKuSGSckXyMababababababababababababababababababababababababababababababababaaaaaaaa +aaaaaaabababababababababababababababababababababababacaYaZExacbbaUacacbcbcaubcbcyMyMaXmLmLbdbdbdyMababababababababababababababababababababababababababababababababaaaaaaaa +aaaaaaaaabababababababababababababababababababacacacacacauacacacbeacmLQYmLpbmLmLaumLmLQYmLwkbdbdyMabababababababababababababababababababababababababababababababababaaaaaa +aaaaaaaaabababababababababababababababababababacbgmLacDGCAsFbhilZimLmLZimLmLLmbiyMyMyMyMyMyMyMyMyMabababababababababababababababababababababababababababababababababaaaaaa +aaaaaaaaababababababababababababwXababababababacbjmLaumLQYQYQYmLmLmLbkblbmbnmLQYaceBbobobpacabababababwXababababababababababababababababababababababababababababababaaaaaa +aaaaaaaaabababababababababababababababababababacacacacacacauacacmLQYacacacacmLmLaumLmLmLmLmuabababababababababababababwXabababababababababababababababababababababababaaaa +aaaaaaaaaaababababababababababababababababababacbxbrbsOImLmLbuacVamLmLmLmLmLmLbvacbwboXBehacabababababababababababababababababababababababababababababwXabababababababaaaa +aaaaaaaaaaaaabababababababababababababababababacmLmLbymLmLmLbzacbMbECtbCXMlhmLbFacacacacacacabababababababababababababababababababababababababababababababababababababaaaa +aaaaaaaaaaaaabababababababababababababababababacbGbHbImLQYmLbJacbMbECtXMbMuGQYbNacabababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaababababababwXabababababababababacbOmLQYQYmLbPbYacbRbSbEbEbEbEujbTacababababababababababababababababababababababababababababababababababababwXababababababaa +aaaaaaaaaaaaaaabababababababababwXababababababacbUmLQYQYbVmLbWacacacTVTVTVacacacacabababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaabababababababababababababababababacmLmLmLbXbWtgbYacababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaabababababababababababababababababaccdHSacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababaa +aaaaaaaaaaaaabababababababababababababababababaccaFZFZcbccacCJiMababababababababababceabQKabceabceQKababceabceabababababababababababababababababwXabababababababababababaa +aaaaaaaaaaaaaaababababababababwXabababababababaccacacacacaacKlKqicicuJqcuJuJicqVlHeXcGcGcGabcGeXcGcGeXabeXcGDdQKababababababababababababababababababababababababababababaa +aaaaaaaaaaaaaaaaabababababababababababababababacacacacrccdaciMqcababababababababqNabvIvIvIabvIvIvIvIvIvIabvIJhabababababababababwXabababababababababababababababababababaa +aaaaaaaaaaaaaaaaabababababababababababababababababababceceabababababababababababtSvIvIabababababvIabvIababvIMsceabababababababababababababababababababababababababababaaaa +aaaaaaaaaaaaaaaaabababababababababababababababababababceababceceababceababababababababvIabvIabababvIabababababababababababwXabababababababababababababababababababababaaaa +aaaaaaaaaaaaaaaaababababababwXabababababababababababceQKQKababQKQKabQKabceabQKabtSvIabababvIababababababababMsabababababababababababababababababababwXabababababababaaaaaa +aaaaaaaaaaaaaaaaababababababababababababababababababceabababceQKQKceababababceQKqNvIvIababvIvIabvIababvIvIvIJhabababababababababababababababababababababababababababaaaaaa +aaaaaaaaaaaaaaaaababababababababwXabwXabababababababababceabababceceQKceabceabcetSvIababababvIvIvIvIababvIvIMsQKabababababababababababababababababababababababababaaaaaaaa +aaaaaaaaaaaaaaaaabababababababababababababababababababababababababababwXababababcevIvIvIababababvIabvIababababababababababababababababababababababababababababababaaaaaaaa +aaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababcetSabvIabababvIabababvIabvIvIMsceababababababababababababababababababababaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababqNvIvIvIvIabvIvIvIvIvIvIvIvIJhababababababababababababababababababababaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababDdRQNNRQRQabNNRQRQabNNRQceNNUlceabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababQKceabQKababababQKabababceabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababaaaaaaababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/overmap/space_pois/derelict1.dmm b/maps/overmap/space_pois/derelict1.dmm deleted file mode 100644 index d1ebcb6820..0000000000 --- a/maps/overmap/space_pois/derelict1.dmm +++ /dev/null @@ -1,1799 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/submap/derelict1) -"c" = ( -/turf/simulated/wall, -/area/submap/derelict1) -"d" = ( -/obj/effect/alien/weeds, -/obj/effect/alien/resin/membrane, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"e" = ( -/obj/structure/girder, -/obj/effect/alien/weeds, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"f" = ( -/obj/effect/alien/weeds, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"g" = ( -/obj/effect/alien/weeds, -/obj/structure/table, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"h" = ( -/obj/effect/alien/weeds/node, -/obj/effect/landmark/loot_spawn, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"i" = ( -/obj/effect/alien/weeds, -/obj/structure/bed/nest, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"j" = ( -/obj/effect/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/remains/human, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"k" = ( -/obj/effect/alien/resin/wall, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"l" = ( -/obj/effect/alien/resin/membrane, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"m" = ( -/obj/effect/alien/weeds, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"n" = ( -/obj/effect/alien/weeds, -/obj/effect/decal/remains/robot, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"o" = ( -/obj/effect/alien/weeds/node, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"p" = ( -/obj/structure/girder, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"q" = ( -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"r" = ( -/obj/effect/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/remains/xeno, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"D" = ( -/obj/effect/alien/weeds, -/mob/living/simple_mob/animal/space/alien/sentinel/praetorian, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"E" = ( -/obj/item/stack/rods, -/turf/template_noop, -/area/submap/derelict1) -"G" = ( -/turf/simulated/floor/airless, -/area/submap/derelict1) -"M" = ( -/obj/effect/alien/weeds/node, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"N" = ( -/obj/structure/lattice, -/obj/item/stack/rods, -/turf/template_noop, -/area/submap/derelict1) -"O" = ( -/obj/effect/alien/weeds, -/mob/living/simple_mob/animal/space/alien/sentinel, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"P" = ( -/obj/effect/alien/weeds, -/obj/effect/landmark/loot_spawn/low, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) -"R" = ( -/obj/effect/alien/weeds/node, -/mob/living/simple_mob/animal/space/alien/sentinel, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict1) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -E -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -p -p -p -c -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -c -q -q -c -G -G -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -E -b -b -q -q -q -q -c -b -a -a -a -"} -(5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -q -q -q -q -c -b -a -a -a -"} -(6,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -q -q -q -q -p -b -a -a -a -"} -(7,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -E -c -q -q -q -c -q -b -b -a -a -a -"} -(8,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -E -a -a -b -b -q -q -q -b -b -b -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -E -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -a -a -E -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -E -a -a -a -a -a -a -a -G -a -a -E -b -b -G -b -N -b -G -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -a -a -a -E -a -b -b -b -b -b -a -a -E -b -b -b -b -b -b -G -G -a -a -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -k -c -a -E -b -b -b -b -b -b -G -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -b -b -k -f -f -e -a -c -d -p -b -b -E -a -a -a -a -a -a -E -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -b -G -k -f -f -f -c -c -c -f -c -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -a -a -a -E -b -b -G -k -f -i -f -c -m -m -f -c -b -a -E -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -b -e -f -M -f -f -e -P -M -f -c -c -c -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -a -a -G -c -f -f -f -f -O -c -j -f -f -c -M -f -e -b -G -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -a -a -a -a -E -c -c -c -c -c -f -c -f -j -f -c -f -f -l -G -G -G -a -a -a -a -a -a -a -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -c -g -f -f -f -f -f -f -f -f -f -f -f -f -l -q -b -a -a -a -a -a -a -a -a -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -b -b -c -h -f -f -O -f -D -f -f -f -f -f -f -r -d -G -b -a -a -a -a -a -a -a -a -a -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -a -a -a -b -b -b -c -c -c -c -c -f -c -f -f -f -c -P -f -f -d -b -b -a -a -a -a -a -a -a -a -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -a -E -a -b -b -b -d -f -f -f -f -f -c -f -f -i -c -i -g -d -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -a -b -b -b -c -i -f -M -f -f -c -f -R -f -c -c -c -M -b -b -a -E -a -a -a -a -a -a -a -a -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -a -b -c -j -f -f -f -f -e -i -f -f -k -q -G -G -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -E -a -a -a -b -c -c -c -f -f -f -c -f -i -k -q -p -b -b -b -a -E -a -a -a -a -a -a -a -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -G -b -c -c -f -n -c -c -c -q -G -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -G -b -b -c -m -o -c -a -a -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(28,1,1) = {" -a -a -a -a -a -a -a -a -a -E -a -a -b -b -l -l -p -p -a -a -a -a -E -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(29,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -a -E -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(31,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(32,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -E -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/maps/overmap/space_pois/derelict1_40x40.dmm b/maps/overmap/space_pois/derelict1_40x40.dmm new file mode 100644 index 0000000000..df6524e990 --- /dev/null +++ b/maps/overmap/space_pois/derelict1_40x40.dmm @@ -0,0 +1,73 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/lattice,/turf/template_noop,/area/submap/derelict1) +"c" = (/turf/simulated/wall,/area/submap/derelict1) +"d" = (/turf/simulated/wall/resin,/area/submap/derelict1) +"e" = (/obj/structure/girder,/obj/effect/alien/weeds,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"f" = (/obj/effect/alien/weeds,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"g" = (/obj/effect/alien/weeds,/obj/structure/table,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"h" = (/obj/effect/alien/weeds/node,/obj/effect/landmark/loot_spawn,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"i" = (/obj/effect/alien/weeds,/obj/structure/bed/nest,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"j" = (/obj/effect/alien/weeds,/obj/structure/bed/nest,/obj/effect/decal/remains/human,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"k" = (/obj/structure/simple_door/resin,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"l" = (/obj/structure/girder/resin,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"m" = (/obj/effect/alien/weeds,/obj/structure/table/standard,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"n" = (/obj/effect/alien/weeds,/obj/effect/decal/remains/robot,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"o" = (/obj/effect/alien/weeds/node,/obj/structure/table/standard,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"p" = (/obj/structure/girder,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"q" = (/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"r" = (/obj/effect/alien/weeds,/obj/structure/bed/nest,/obj/effect/decal/remains/xeno,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"D" = (/obj/effect/alien/weeds,/mob/living/simple_mob/animal/space/alien/sentinel/praetorian,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"E" = (/obj/item/stack/rods,/turf/template_noop,/area/submap/derelict1) +"F" = (/obj/structure/loot_pile/maint/boxfort,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"G" = (/turf/simulated/floor/airless,/area/submap/derelict1) +"K" = (/obj/effect/alien/weeds,/obj/structure/loot_pile/maint/boxfort,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"M" = (/obj/effect/alien/weeds/node,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"N" = (/obj/structure/lattice,/obj/item/stack/rods,/turf/template_noop,/area/submap/derelict1) +"O" = (/obj/effect/alien/weeds,/mob/living/simple_mob/animal/space/alien/sentinel,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"P" = (/obj/effect/alien/weeds,/obj/effect/landmark/loot_spawn/low,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"R" = (/obj/effect/alien/weeds/node,/mob/living/simple_mob/animal/space/alien/sentinel,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict1) +"X" = (/obj/item/stack/material/resin,/turf/template_noop,/area/template_noop) +"Y" = (/obj/structure/girder/resin,/turf/simulated/floor/airless,/area/submap/derelict1) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaEaaEaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaabbbaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaEaaaabbbbaaaaEaaaaaaaaaaaa +aaaaaaaaaaEaabbbGEbbbbbbbaaaaaaaaaaaaaaa +aaaaaaaaaaabbbbbcccccdcccGGaaaaaaaaaaaaa +aaaaaaaaaabbbGGefcghcKijcbbbbbaaaaaaaaaa +aaaaaaaaEbbbbdlffcffcfffccbbbbbaaaaaaaaa +aaaaaaaaabbblffMfcffcfMffccdbbbaaaaaaaaa +aaaaaaaaaEbdffiffcfOcfffffmdbbbaaaaaaaaa +aaaaaaaaaabcffffOkffkffffnolbbaaEaaaaaaa +aaaaaaaaXaaaecceccfDccceccclbaaaaaaaaaaa +aaaaaaaaaaaEacmPjffffffifcaaaEaaaaaaaaaa +aaaaaaaaaaEbccmMfjffffRficaaaaaaaaaaaaaa +aaaaaaaaaabbdffffffffiffqlbaaaaaaaaaaaaa +aaaaaaaaaabbpccccckkcccqdGbaaaaaaaaaaaaa +aaaaaaaaaabbbbbcMfffPiclqbaEaaaaaaaaaaaa +aaaaaaaaaGbbbaacfffffgcGbbaaaaaaaaaaaaaa +aaaaaaaaaabbEaEcelfrffMGbaaaaaaaaaaaaaaa +aaaaaaaEaabGaaaabGlffbbbbaaaaaaaaaaaaaaa +aaaaaaaaaEGaaaaaGGqYbbbbaaaaaaaaaaaaaaaa +aaaaaaaaabGaaaaaaGbbbaaaEaaaaaaaaaaaaaaa +aaaEaaEbbbaaaaaaaaaaaaEaaaaaaaaaaaaaaaaa +aaabaacbbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aabbbcqFbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +abbqqqqqbNaaEaaaaaaaaaaaaaaaaaaaaaaaaaaa +bpcqqqqqbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +bpqFqqcbbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +bpqqqqqbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +Eccccpbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaGbbbbaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/overmap/space_pois/derelict2.dmm b/maps/overmap/space_pois/derelict2.dmm deleted file mode 100644 index 98c821058e..0000000000 --- a/maps/overmap/space_pois/derelict2.dmm +++ /dev/null @@ -1,1808 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/obj/structure/window/reinforced{ - dir = 4; - tag = "icon-rwindow (EAST)" - }, -/turf/template_noop, -/area/submap/derelict2) -"c" = ( -/obj/machinery/door/airlock/external, -/turf/simulated/floor/plating, -/area/submap/derelict2) -"d" = ( -/obj/structure/window/reinforced{ - dir = 8; - tag = "icon-rwindow (WEST)" - }, -/turf/template_noop, -/area/submap/derelict2) -"e" = ( -/obj/structure/window/reinforced{ - dir = 4; - tag = "icon-rwindow (EAST)" - }, -/obj/structure/window/reinforced{ - dir = 8; - tag = "icon-rwindow (WEST)" - }, -/turf/simulated/floor/plating, -/area/submap/derelict2) -"f" = ( -/turf/simulated/wall, -/area/submap/derelict2) -"g" = ( -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/tiled/asteroid_steel, -/turf/simulated/floor/plating, -/area/submap/derelict2) -"h" = ( -/obj/machinery/light/small{ - dir = 1; - tag = "icon-bulb1 (NORTH)" - }, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict2) -"i" = ( -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict2) -"j" = ( -/obj/machinery/light/small{ - dir = 4; - tag = "icon-bulb1 (EAST)" - }, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict2) -"k" = ( -/obj/structure/window/reinforced, -/turf/template_noop, -/area/submap/derelict2) -"l" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1; - tag = "icon-rwindow (NORTH)" - }, -/turf/simulated/floor/plating, -/area/submap/derelict2) -"m" = ( -/obj/effect/decal/remains/human, -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict2) -"n" = ( -/obj/item/trash/plate{ - pixel_x = 10 - }, -/obj/item/trash/plate{ - pixel_x = -10 - }, -/obj/structure/table/glass, -/obj/item/weapon/flame/candle/everburn, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict2) -"o" = ( -/obj/effect/decal/remains/human, -/obj/structure/bed/chair{ - dir = 8 - }, -/obj/item/clothing/ears/earring/stud/diamond, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict2) -"p" = ( -/obj/structure/window/reinforced{ - dir = 1; - tag = "icon-rwindow (NORTH)" - }, -/turf/template_noop, -/area/submap/derelict2) -"q" = ( -/obj/machinery/light/small{ - dir = 8; - tag = "icon-bulb1 (WEST)" - }, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict2) -"r" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict2) -"D" = ( -/obj/item/toy/bosunwhistle/fluff/strix, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict2) -"I" = ( -/obj/item/weapon/coin/gold, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict2) -"V" = ( -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/plating, -/turf/space, -/area/submap/derelict2) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(6,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(7,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(8,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -c -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -l -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -l -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -l -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -f -V -c -V -f -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -f -i -i -i -i -q -f -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -f -h -I -i -i -i -i -D -f -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -g -i -i -i -m -i -i -i -V -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -c -e -e -e -c -i -i -i -n -i -i -i -c -e -e -e -c -a -a -a -a -a -a -a -a -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -d -d -d -d -g -i -i -i -o -i -i -i -g -d -d -d -d -a -a -a -a -a -a -a -a -a -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -f -i -i -i -i -i -i -r -f -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -f -j -i -i -i -i -f -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -f -g -c -V -f -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -l -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -l -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(28,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -l -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(29,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -k -c -p -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(31,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(32,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/maps/overmap/space_pois/derelict2_20x20.dmm b/maps/overmap/space_pois/derelict2_20x20.dmm new file mode 100644 index 0000000000..1a86e6acda --- /dev/null +++ b/maps/overmap/space_pois/derelict2_20x20.dmm @@ -0,0 +1,56 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/obj/structure/window/reinforced{dir = 4; tag = "icon-rwindow (EAST)"},/turf/template_noop,/area/submap/derelict2) +"c" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/submap/derelict2) +"d" = (/obj/structure/window/reinforced{dir = 8; tag = "icon-rwindow (WEST)"},/turf/template_noop,/area/submap/derelict2) +"e" = (/obj/structure/window/reinforced{dir = 4; tag = "icon-rwindow (EAST)"},/obj/structure/window/reinforced{dir = 8; tag = "icon-rwindow (WEST)"},/turf/simulated/floor/plating,/area/submap/derelict2) +"f" = (/turf/simulated/wall,/area/submap/derelict2) +"g" = (/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/tiled/asteroid_steel,/turf/simulated/floor/plating,/area/submap/derelict2) +"h" = (/obj/machinery/light/small{dir = 1; tag = "icon-bulb1 (NORTH)"},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"i" = (/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"j" = (/obj/machinery/light/small{dir = 4; tag = "icon-bulb1 (EAST)"},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"k" = (/obj/structure/window/reinforced,/turf/template_noop,/area/submap/derelict2) +"l" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1; tag = "icon-rwindow (NORTH)"},/turf/simulated/floor/plating,/area/submap/derelict2) +"m" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/heartbox,/obj/item/toy/bosunwhistle/fluff/strix,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"n" = (/obj/item/trash/plate{pixel_x = 10},/obj/item/trash/plate{pixel_x = -10},/obj/structure/table/glass,/obj/item/weapon/flame/candle/everburn,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"o" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/cigar/cohiba,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"p" = (/obj/structure/window/reinforced{dir = 1; tag = "icon-rwindow (NORTH)"},/turf/template_noop,/area/submap/derelict2) +"q" = (/obj/machinery/light/small{dir = 8; tag = "icon-bulb1 (WEST)"},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"r" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"t" = (/obj/item/clothing/head/cowboy/fancy,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"x" = (/obj/effect/decal/remains/human,/obj/item/clothing/under/cowboy/brown,/obj/item/clothing/accessory/cowboy_vest/brown,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"z" = (/obj/item/weapon/storage/fancy/blackcandle_box,/obj/structure/table/standard,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"A" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"D" = (/obj/item/weapon/storage/backpack/fancy,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"E" = (/obj/item/clothing/shoes/dress/white,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"I" = (/obj/item/weapon/coin/gold,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"J" = (/obj/item/clothing/gloves/weddingring,/obj/item/clothing/gloves/weddingring{pixel_y = -4; pixel_x = -5},/obj/structure/table/standard,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"L" = (/obj/item/clothing/shoes/boots/cowboy/fancy,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"M" = (/obj/effect/decal/remains/human,/obj/item/clothing/ears/earring/stud/diamond,/obj/item/clothing/under/dress/revealingdress,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"Q" = (/obj/item/weapon/storage/backpack/satchel/fancy,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"T" = (/mob/living/simple_mob/animal/passive/cat/bones{desc = "A very odd behaved cat, their scratched name tag reads 'Felix'. They look very malnourished."; name = "Felix"},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"V" = (/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/turf/space,/area/submap/derelict2) +"W" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) +"Z" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict2) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +aaaaaaaabcdaaaaaaaaa +aaaaaaaabedaaaaaaaaa +aaaaaaaabedaaaaaaaaa +aaaaaaaabedaaaaaaaaa +aaaaaaafgcgfaaaaaaaa +aaaaaafhWiiJfaaaaaaa +aaaaafzIiiiijfaaaaaa +akkkkViiZtiTigkkkkaa +aclllciDxnMAiclllcaa +appppViiLiEQiVppppaa +aaaaafqiiiiiofaaaaaa +aaaaaafmiiWrfaaaaaaa +aaaaaaafVcgfaaaaaaaa +aaaaaaaabedaaaaaaaaa +aaaaaaaabedaaaaaaaaa +aaaaaaaabedaaaaaaaaa +aaaaaaaabcdaaaaaaaaa +aaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/overmap/space_pois/derelict3.dmm b/maps/overmap/space_pois/derelict3.dmm deleted file mode 100644 index cec755ac87..0000000000 --- a/maps/overmap/space_pois/derelict3.dmm +++ /dev/null @@ -1,1766 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"c" = ( -/turf/simulated/floor/plating, -/area/submap/derelict3) -"d" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/submap/derelict3) -"e" = ( -/obj/structure/lattice, -/obj/structure/lattice, -/turf/template_noop, -/area/submap/derelict3) -"g" = ( -/obj/structure/salvageable/console_broken_os, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict3) -"h" = ( -/obj/structure/girder, -/turf/simulated/floor/plating, -/area/submap/derelict3) -"i" = ( -/obj/random/maintenance/clean, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict3) -"k" = ( -/obj/structure/salvageable/server, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict3) -"m" = ( -/obj/item/stack/rods{ - amount = 5 - }, -/turf/template_noop, -/area/submap/derelict3) -"w" = ( -/obj/structure/salvageable/autolathe, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict3) -"C" = ( -/obj/random/maintenance/security, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict3) -"E" = ( -/turf/simulated/wall, -/area/submap/derelict3) -"F" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/plating, -/area/submap/derelict3) -"J" = ( -/obj/random/maintenance, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict3) -"K" = ( -/obj/structure/table, -/turf/simulated/floor/plating, -/area/submap/derelict3) -"L" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict3) -"Q" = ( -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict3) -"U" = ( -/obj/structure/table, -/obj/random/maintenance/medical, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict3) -"W" = ( -/obj/structure/salvageable/computer, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict3) -"Y" = ( -/obj/structure/table, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict3) -"Z" = ( -/obj/structure/salvageable/machine, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict3) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -E -E -F -h -E -a -a -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -K -Q -J -Q -E -a -a -a -a -a -"} -(5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -Q -c -Q -i -Q -Q -Z -E -a -a -a -a -"} -(6,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -Q -Q -c -Q -k -E -a -a -a -a -"} -(7,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -m -d -d -d -Q -Q -k -E -a -a -a -a -"} -(8,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -d -c -Q -Q -E -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -d -c -Q -F -a -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -d -c -c -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -m -d -d -a -e -d -h -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -m -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -m -a -a -d -d -a -a -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -d -d -m -a -a -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -d -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -Q -Q -Q -Q -d -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -Q -c -E -Q -c -Q -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -m -d -d -Q -Q -Q -E -Q -c -J -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -m -a -a -d -d -Q -Q -Q -U -E -g -Q -Q -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -d -d -Q -d -Q -E -E -E -F -E -Q -Q -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -a -a -a -a -d -d -d -d -d -d -d -Q -c -Q -h -Q -Q -c -Q -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(22,1,1) = {" -a -a -a -a -a -a -a -a -a -Q -Q -Q -d -d -d -d -Q -h -i -Q -Q -Q -d -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -F -Q -i -Q -Q -Q -d -d -d -J -Q -Q -Q -d -d -d -d -d -m -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -m -c -Q -Q -Q -E -Y -Q -d -d -d -d -Q -Q -Q -d -d -Q -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -F -Q -Q -h -J -Q -Q -Q -d -d -d -d -d -d -d -d -d -d -m -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -c -Q -c -E -E -E -Q -Q -d -d -Q -d -d -d -d -d -d -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -c -Q -Q -E -w -Q -Q -Q -d -d -d -d -d -Q -Q -Q -Q -Q -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(28,1,1) = {" -a -a -a -a -a -a -a -Q -Q -Q -E -E -Q -d -d -d -d -Q -C -Q -c -c -Q -Q -Q -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(29,1,1) = {" -a -a -a -a -a -a -a -c -Q -Q -Q -Q -Q -d -d -d -d -Q -Q -c -c -Q -Q -Q -F -m -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -m -a -m -a -a -c -Q -Q -Q -d -d -d -Q -Q -Q -J -W -E -Q -Q -Q -Q -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(31,1,1) = {" -a -a -a -a -a -a -a -a -a -d -d -d -d -d -d -d -Q -L -Q -Q -E -E -E -E -h -h -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(32,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -d -d -Q -d -d -Q -Q -E -E -Q -h -Q -h -Q -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -m -a -d -d -d -d -Q -Q -Q -Q -Q -E -Q -Q -a -m -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -d -d -d -h -c -h -Q -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -m -a -a -a -a -a -m -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/maps/overmap/space_pois/derelict3_40x40.dmm b/maps/overmap/space_pois/derelict3_40x40.dmm new file mode 100644 index 0000000000..df0e02d008 --- /dev/null +++ b/maps/overmap/space_pois/derelict3_40x40.dmm @@ -0,0 +1,64 @@ +"a" = (/turf/template_noop,/area/template_noop) +"c" = (/turf/simulated/floor/plating,/area/submap/derelict3) +"d" = (/obj/structure/lattice,/turf/template_noop,/area/submap/derelict3) +"e" = (/obj/structure/lattice,/obj/structure/lattice,/turf/template_noop,/area/submap/derelict3) +"g" = (/obj/structure/salvageable/console_broken_os,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict3) +"h" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/submap/derelict3) +"i" = (/obj/random/maintenance/clean,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict3) +"k" = (/obj/structure/salvageable/server,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict3) +"m" = (/obj/item/stack/rods{amount = 5},/turf/template_noop,/area/submap/derelict3) +"w" = (/obj/structure/salvageable/autolathe,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict3) +"C" = (/obj/random/maintenance/security,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict3) +"E" = (/turf/simulated/wall,/area/submap/derelict3) +"F" = (/obj/structure/girder/displaced,/turf/simulated/floor/plating,/area/submap/derelict3) +"J" = (/obj/random/maintenance,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict3) +"K" = (/obj/structure/table,/turf/simulated/floor/plating,/area/submap/derelict3) +"L" = (/obj/structure/girder/displaced,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict3) +"Q" = (/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict3) +"U" = (/obj/structure/table,/obj/random/maintenance/medical,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict3) +"W" = (/obj/structure/salvageable/computer,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict3) +"Y" = (/obj/structure/table,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict3) +"Z" = (/obj/structure/salvageable/machine,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict3) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaacFccaamaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaFQQQQQcaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaQQQcQQQaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaadQiQhEEQQcdaaaaaaaaa +aaaaaaaaaaaaaaaaaaaadQQEJEwEQQdamaaaaaaa +aaaaaaaaaaaaaaaaaamadQQYQEQEQQddaaaaaaaa +aaaaaaaaaaaaaaaaaaadddQQQQQQQQdddaaaaaaa +aaaaaaaaaaaaaaaaaaadddddQQQddddQddaaaaaa +aaaaaaaaaaaaaaaaamdQddddddddddddddaaaaaa +aaaaaaaaaaaaaaaaadddddddddddddddddmaaaaa +aaaaaaaaaaaaaaaaddQQQQJddQdddQQQQdaaaaaa +aaaaaaaaaaaaaaaadQQEchQQdddQQQLQQdaaaaaa +aaaaaaaaaaaaaaaaQQQEQiQQdddCQQQEQhaaaaaa +aaaaaaaaaaaaaaaQcQUEhQQQddQQcJQEQcaaaaaa +aaaaaaaaaaaaaaaQEEEFQQddddQccWEQQhaaaaaa +aaaaaaaaaaaaaadQQQgEQQddddQcQEEhEQmaaaaa +aaaaaaaaaaaaaadQccQQcddQddQQQQEQQaaaaaaa +aaaaaaaaaaaamdddQJQQQdddddQQQQEhQaaaaaaa +aaaaaaaaaaaaaddddddddddamddQFQhQaaaaaaaa +aaaaaaaaaaaaadddaaaaaamaaaddmQhamaaaaaaa +aaaaaaaaaaaaddaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaadmaaaaaaaaaaaaaaaaaaaaaaaaaa +aaacQamaaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaEccdddaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaEKQQdddddaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaFQiQddddamaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aahJQcQcddeaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaEQQQQQccdaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaEZkkQQchaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaEEEEFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/overmap/space_pois/derelict4.dmm b/maps/overmap/space_pois/derelict4.dmm deleted file mode 100644 index 5ff514fd9f..0000000000 --- a/maps/overmap/space_pois/derelict4.dmm +++ /dev/null @@ -1,1814 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"b" = ( -/turf/simulated/mineral, -/area/submap/derelict4) -"d" = ( -/turf/simulated/mineral/floor/vacuum, -/area/submap/derelict4) -"e" = ( -/turf/simulated/shuttle/wall, -/area/submap/derelict4) -"f" = ( -/obj/machinery/door/airlock/maintenance/rnd, -/turf/simulated/floor/airless, -/area/submap/derelict4) -"g" = ( -/turf/simulated/floor/airless, -/area/submap/derelict4) -"h" = ( -/obj/random/trash, -/turf/simulated/shuttle/floor, -/area/submap/derelict4) -"i" = ( -/obj/structure/window/reinforced{ - dir = 8; - tag = "icon-rwindow (WEST)" - }, -/obj/structure/bed/chair/bay/comfy/lime, -/turf/simulated/shuttle/floor, -/area/submap/derelict4) -"j" = ( -/obj/structure/bed/chair/bay/comfy/lime, -/turf/simulated/shuttle/floor, -/area/submap/derelict4) -"k" = ( -/obj/random/maintenance, -/turf/simulated/shuttle/floor, -/area/submap/derelict4) -"l" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 4; - tag = "icon-propulsion (WEST)" - }, -/turf/simulated/shuttle/plating, -/area/submap/derelict4) -"m" = ( -/obj/item/weapon/material/shard, -/turf/simulated/floor/airless, -/area/submap/derelict4) -"n" = ( -/obj/structure/bed/chair/bay/comfy/captain{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/submap/derelict4) -"o" = ( -/obj/structure/grille, -/turf/simulated/shuttle/floor, -/area/submap/derelict4) -"p" = ( -/obj/structure/table, -/turf/simulated/shuttle/floor, -/area/submap/derelict4) -"q" = ( -/obj/item/weapon/material/shard, -/obj/structure/bed/chair/bay/comfy/captain{ - dir = 8 - }, -/turf/simulated/shuttle/floor, -/area/submap/derelict4) -"r" = ( -/obj/structure/window/reinforced{ - dir = 8; - tag = "icon-rwindow (WEST)" - }, -/obj/structure/bed/chair/bay/comfy/lime{ - dir = 1 - }, -/turf/simulated/shuttle/floor, -/area/submap/derelict4) -"s" = ( -/obj/structure/bed/chair/bay/comfy/lime{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/submap/derelict4) -"t" = ( -/obj/structure/girder, -/turf/simulated/floor/airless, -/area/submap/derelict4) -"w" = ( -/obj/random/maintenance, -/turf/simulated/mineral/floor/vacuum, -/area/submap/derelict4) -"x" = ( -/obj/item/stack/rods{ - amount = 5 - }, -/turf/simulated/mineral/floor/vacuum, -/area/submap/derelict4) -"z" = ( -/turf/simulated/shuttle/floor, -/area/submap/derelict4) -"G" = ( -/obj/random/outcrop, -/turf/simulated/mineral/floor/vacuum, -/area/submap/derelict4) -"S" = ( -/obj/random/junk, -/turf/simulated/shuttle/floor, -/area/submap/derelict4) -"U" = ( -/obj/random/trash, -/turf/simulated/mineral/floor/vacuum, -/area/submap/derelict4) -"V" = ( -/obj/random/maintenance, -/turf/simulated/floor/airless, -/area/submap/derelict4) -"W" = ( -/obj/random/junk, -/turf/simulated/floor/airless, -/area/submap/derelict4) -"X" = ( -/obj/item/weapon/storage/backpack/holding, -/turf/simulated/shuttle/floor, -/area/submap/derelict4) -"Z" = ( -/obj/structure/prop/blackbox/quarantined_shuttle, -/turf/simulated/floor/airless, -/area/submap/derelict4) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -a -a -a -a -a -a -a -a -a -"} -(6,1,1) = {" -a -a -a -a -a -a -a -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -a -a -a -a -a -a -a -a -a -"} -(7,1,1) = {" -a -a -a -a -a -a -b -d -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -a -a -a -b -b -a -a -a -a -a -a -a -a -a -a -"} -(8,1,1) = {" -a -a -a -a -a -b -b -G -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a -a -b -b -b -b -b -a -a -a -a -a -a -G -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -b -b -b -b -b -a -a -a -a -a -a -d -d -d -d -d -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -b -b -a -a -a -a -a -a -a -d -d -d -d -d -d -d -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -a -b -b -a -a -a -a -a -b -G -d -d -d -d -d -d -d -d -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -d -d -d -d -d -d -G -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -b -b -d -d -b -b -b -b -b -b -b -a -a -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -G -d -b -b -b -b -b -b -b -b -d -a -a -a -a -a -a -a -b -b -b -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -b -b -d -d -b -b -b -d -b -b -b -b -b -a -a -a -a -a -a -a -a -b -b -b -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -d -G -b -b -b -b -b -b -b -b -b -b -b -b -b -b -a -a -a -a -a -a -b -b -b -b -b -"} -(18,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -d -b -b -b -g -g -o -b -b -d -b -b -d -d -a -a -a -a -a -d -b -b -b -d -d -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -b -b -d -e -Z -m -p -g -e -d -b -b -d -G -a -a -a -a -d -d -b -b -G -d -d -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -d -b -b -b -d -e -V -n -q -z -e -d -b -b -d -d -a -a -a -G -b -b -b -d -d -d -a -"} -(21,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -b -d -e -W -z -S -k -e -d -w -b -b -b -a -a -a -b -b -b -b -d -d -d -a -"} -(22,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -d -x -e -h -z -X -z -e -d -d -d -G -b -a -a -d -b -b -G -d -d -d -d -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -d -d -f -z -z -S -z -f -x -d -d -d -b -a -b -b -b -b -d -d -d -a -a -a -"} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -d -e -i -z -z -r -e -U -d -d -d -a -a -b -b -b -d -d -d -a -a -a -a -"} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -b -a -a -b -b -b -d -e -j -z -h -s -t -d -x -d -d -a -a -b -b -d -a -a -a -a -a -a -a -"} -(26,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -d -w -e -k -S -g -g -g -x -d -a -a -a -a -a -b -d -a -a -a -a -a -a -a -"} -(27,1,1) = {" -a -a -a -a -a -a -a -a -b -b -a -a -a -b -b -b -d -x -e -e -e -e -e -e -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(28,1,1) = {" -a -a -a -a -a -a -a -b -b -b -a -a -a -b -b -b -d -d -e -l -l -l -l -e -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(29,1,1) = {" -a -a -a -a -a -a -a -a -b -b -a -a -a -b -b -b -b -b -d -d -d -d -d -d -x -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -b -G -d -d -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(31,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -d -d -d -d -d -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(32,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(33,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(34,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -G -a -a -a -a -a -a -"} -(35,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -b -b -a -a -a -a -a -a -"} -(36,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -d -d -G -b -a -a -a -a -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -a -b -d -b -b -a -a -a -a -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -b -b -a -a -a -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/maps/overmap/space_pois/derelict4_40x40.dmm b/maps/overmap/space_pois/derelict4_40x40.dmm new file mode 100644 index 0000000000..a7f46fcc6f --- /dev/null +++ b/maps/overmap/space_pois/derelict4_40x40.dmm @@ -0,0 +1,72 @@ +"a" = (/turf/template_noop,/area/template_noop) +"b" = (/turf/simulated/mineral,/area/submap/derelict4) +"d" = (/turf/simulated/mineral/floor/vacuum,/area/submap/derelict4) +"e" = (/turf/simulated/shuttle/wall,/area/submap/derelict4) +"f" = (/obj/machinery/door/airlock/maintenance/rnd,/turf/simulated/floor/airless,/area/submap/derelict4) +"g" = (/turf/simulated/floor/airless,/area/submap/derelict4) +"h" = (/obj/random/trash,/turf/simulated/shuttle/floor,/area/submap/derelict4) +"i" = (/obj/structure/window/reinforced{dir = 8; tag = "icon-rwindow (WEST)"},/obj/structure/bed/chair/bay/comfy/lime,/turf/simulated/shuttle/floor,/area/submap/derelict4) +"j" = (/obj/structure/bed/chair/bay/comfy/lime,/turf/simulated/shuttle/floor,/area/submap/derelict4) +"k" = (/obj/random/maintenance,/turf/simulated/shuttle/floor,/area/submap/derelict4) +"l" = (/obj/structure/shuttle/engine/propulsion{dir = 4; tag = "icon-propulsion (WEST)"},/turf/simulated/shuttle/plating,/area/submap/derelict4) +"m" = (/obj/item/weapon/material/shard,/turf/simulated/floor/airless,/area/submap/derelict4) +"n" = (/obj/structure/bed/chair/bay/comfy/captain{dir = 8},/turf/simulated/floor/airless,/area/submap/derelict4) +"o" = (/obj/structure/grille,/turf/simulated/shuttle/floor,/area/submap/derelict4) +"p" = (/obj/structure/table,/turf/simulated/shuttle/floor,/area/submap/derelict4) +"q" = (/obj/item/weapon/material/shard,/obj/structure/bed/chair/bay/comfy/captain{dir = 8},/turf/simulated/shuttle/floor,/area/submap/derelict4) +"r" = (/obj/structure/window/reinforced{dir = 8; tag = "icon-rwindow (WEST)"},/obj/structure/bed/chair/bay/comfy/lime{dir = 1},/turf/simulated/shuttle/floor,/area/submap/derelict4) +"s" = (/obj/structure/bed/chair/bay/comfy/lime{dir = 1},/turf/simulated/floor/airless,/area/submap/derelict4) +"t" = (/obj/structure/girder,/turf/simulated/floor/airless,/area/submap/derelict4) +"w" = (/obj/random/maintenance,/turf/simulated/mineral/floor/vacuum,/area/submap/derelict4) +"x" = (/obj/item/stack/rods{amount = 5},/turf/simulated/mineral/floor/vacuum,/area/submap/derelict4) +"z" = (/turf/simulated/shuttle/floor,/area/submap/derelict4) +"G" = (/obj/random/outcrop,/turf/simulated/mineral/floor/vacuum,/area/submap/derelict4) +"S" = (/obj/random/junk,/turf/simulated/shuttle/floor,/area/submap/derelict4) +"U" = (/obj/random/trash,/turf/simulated/mineral/floor/vacuum,/area/submap/derelict4) +"V" = (/obj/random/maintenance,/turf/simulated/floor/airless,/area/submap/derelict4) +"W" = (/obj/random/junk,/turf/simulated/floor/airless,/area/submap/derelict4) +"X" = (/obj/item/weapon/storage/backpack/holding,/turf/simulated/shuttle/floor,/area/submap/derelict4) +"Z" = (/obj/structure/prop/blackbox/quarantined_shuttle,/turf/simulated/floor/airless,/area/submap/derelict4) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaabbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaabbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaddGbbbbaaaaaaaaaaaaaaabaaaaaaaaaaaa +aaaaadddbbbbaaaaaaaaaaaaaabbbaaaaaaaaaaa +aaaaaaddbbaaaaaaaaaaaaaaaabbbaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaabbdddddbbaaabbbbaaaaaaaaaaa +aaaaaaaaaaabbbbdGddbbbbbbbbbbbaaaaaaaaaa +aaaaaaaaaaaGbbbbbdbbbbbbbbbbbbbaaaaaaaaa +aaaaaaaaGdddbbbbbbbbbddbbdddbbbaaaaaaaaa +aaaaaaaadddddbGdbbdddxdddwxdbGdaaaaaaaaa +aaaaaaaaaddddbddbbeeeefeeeeedddaaaaaaaaa +aaaaaaaaadddddbbbgZVWhzijkeldddaaaaaaaaa +aaaaaaaaadddddbbbgmnzzzzzSeldddaaaaaaaaa +aaaaaaaaaddddbbbbopqSXSzhgeldddaaaaaaaaa +aaaaaaaaaddddbbdbbgzkzzrsgeldaaaaaaaaaaa +aaaaaaaaaabdGbbbbbeeeefetgeedaaaaaaaaaaa +aaaaaabaaabbbbbbbdddddxUdxddxaaaaaaaaaaa +aaaaaaaaaabbbbbbbbbbwdddxddddaaaaaaaaaaa +aaabaaaaaaaabbbbbbbbbddddaaaaaaaaaaaaaaa +aaaaaaaaaaaaabdbbdddbGdddaaaaaaaaaaaaaaa +aaaaabbaaaaaaaaabdGdbbbaaaaaaaaaaaaabaaa +aaaabbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaabbaaaaaaaaaaaaaaaabbbaaaaaaaaaddbbaa +aaaaaaaaaaaaaaaaaaaaadbbbbaaaaaaaddddbaa +aaaaaaaaaaaaaaaaaaaGbbbbddaaaaaaadbGbaaa +aaaaaaaaaaaaaaaaaadbbbbdaaaaaaaaaGbbbaaa +aaaaaaaaaaaaaaaaaddbbGddaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaababbbbbdddaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaabbbbbddddaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaabbbbGdddaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaabbdddddaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaabddaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/overmap/space_pois/derelict5.dmm b/maps/overmap/space_pois/derelict5.dmm deleted file mode 100644 index cdb963d20a..0000000000 --- a/maps/overmap/space_pois/derelict5.dmm +++ /dev/null @@ -1,1823 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"c" = ( -/turf/simulated/mineral, -/area/submap/derelict5) -"e" = ( -/turf/simulated/wall, -/area/submap/derelict5) -"f" = ( -/obj/effect/floor_decal/rust, -/turf/simulated/wall, -/area/submap/derelict5) -"h" = ( -/obj/structure/closet/crate, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"i" = ( -/obj/effect/landmark/loot_spawn/low, -/turf/simulated/shuttle/plating, -/area/submap/derelict5) -"j" = ( -/obj/structure/door_assembly, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"k" = ( -/obj/structure/table, -/obj/item/weapon/storage/toolbox/electrical, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"l" = ( -/obj/effect/decal/remains/human, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"m" = ( -/obj/structure/table, -/obj/item/weapon/storage/toolbox/syndicate, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"n" = ( -/obj/structure/table, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"o" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"p" = ( -/obj/machinery/door/airlock/external, -/obj/random/obstruction, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict5) -"q" = ( -/obj/machinery/door/airlock/external, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"r" = ( -/turf/simulated/mineral/floor/vacuum, -/area/submap/derelict5) -"s" = ( -/obj/random/trash, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"t" = ( -/obj/random/maintenance/engineering, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"u" = ( -/turf/simulated/floor/plating, -/area/submap/derelict5) -"w" = ( -/obj/random/maintenance/research, -/turf/simulated/shuttle/plating, -/area/submap/derelict5) -"y" = ( -/obj/random/junk, -/turf/simulated/shuttle/plating, -/area/submap/derelict5) -"z" = ( -/obj/effect/landmark/loot_spawn/low, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"A" = ( -/obj/effect/landmark/loot_spawn/low, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict5) -"C" = ( -/obj/random/junk, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"D" = ( -/obj/item/stack/rods{ - amount = 5 - }, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"H" = ( -/obj/effect/landmark/loot_spawn, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"I" = ( -/turf/simulated/shuttle/plating, -/area/submap/derelict5) -"L" = ( -/obj/random/maintenance/engineering, -/turf/simulated/shuttle/plating, -/area/submap/derelict5) -"N" = ( -/obj/random/trash, -/turf/simulated/shuttle/plating, -/area/submap/derelict5) -"O" = ( -/obj/effect/landmark/loot_spawn, -/turf/simulated/shuttle/plating, -/area/submap/derelict5) -"R" = ( -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict5) -"T" = ( -/obj/random/maintenance/research, -/turf/simulated/floor/plating, -/area/submap/derelict5) -"V" = ( -/obj/random/junk, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict5) -"W" = ( -/obj/random/trash, -/obj/random/junk, -/turf/simulated/floor/tiled/asteroid_steel/airless, -/area/submap/derelict5) -"X" = ( -/obj/item/stack/rods{ - amount = 5 - }, -/turf/simulated/mineral/floor/vacuum, -/area/submap/derelict5) -"Z" = ( -/obj/random/outcrop, -/turf/simulated/mineral/floor/vacuum, -/area/submap/derelict5) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -c -a -a -a -a -"} -(3,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -c -a -a -a -a -"} -(4,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -a -a -a -c -"} -(5,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(6,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -r -r -r -r -a -a -a -a -a -a -a -a -a -c -a -a -a -a -a -a -a -a -a -a -a -a -a -c -a -"} -(7,1,1) = {" -a -a -a -a -a -a -a -a -a -r -Z -r -r -r -r -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(8,1,1) = {" -a -a -a -a -a -a -a -a -c -c -c -c -c -r -r -r -r -a -a -a -a -a -a -a -a -a -c -c -c -a -a -a -a -a -a -a -a -a -a -a -"} -(9,1,1) = {" -a -a -a -a -a -a -a -c -c -c -c -c -c -Z -r -r -r -r -r -r -a -a -a -a -a -a -c -c -c -a -a -a -a -a -a -a -a -a -a -a -"} -(10,1,1) = {" -a -a -a -a -a -a -a -c -c -c -c -c -c -c -c -c -r -r -r -r -r -a -a -a -a -a -a -c -c -c -c -a -a -a -a -a -a -a -a -a -"} -(11,1,1) = {" -a -a -a -a -a -a -a -c -c -c -c -c -c -c -c -c -c -c -c -r -r -a -a -a -a -a -a -c -c -c -c -a -a -a -a -a -a -a -a -a -"} -(12,1,1) = {" -a -a -a -a -a -a -c -c -c -r -Z -c -c -c -c -c -c -c -c -Z -r -r -r -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(13,1,1) = {" -a -a -a -a -a -a -c -c -c -Z -r -Z -c -c -c -c -c -c -c -c -r -r -r -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(14,1,1) = {" -a -a -a -a -a -a -c -c -c -c -c -c -c -c -c -c -c -c -c -c -Z -r -r -r -r -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(15,1,1) = {" -a -a -a -a -a -a -c -c -c -c -c -c -c -f -f -e -f -e -e -e -c -c -r -r -r -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(16,1,1) = {" -a -a -a -a -a -a -c -c -c -c -c -c -i -O -z -l -H -f -C -u -c -c -r -r -r -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(17,1,1) = {" -a -a -a -a -a -a -a -a -c -c -c -e -I -L -C -w -h -f -I -L -e -c -r -r -r -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(18,1,1) = {" -a -a -a -a -a -a -a -a -c -c -c -e -z -s -k -m -u -e -I -N -c -c -Z -r -r -r -a -a -a -a -a -a -c -c -c -a -a -a -a -a -"} -(19,1,1) = {" -a -a -a -a -a -a -a -a -c -c -c -f -e -j -f -f -e -e -R -I -e -c -c -c -r -r -r -r -r -a -a -a -c -c -c -c -c -a -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -c -c -c -i -I -O -h -l -e -u -I -f -c -c -c -r -r -r -r -r -r -r -r -r -Z -c -c -c -a -a -a -"} -(21,1,1) = {" -a -a -a -a -a -a -a -a -a -c -c -c -y -I -t -s -u -e -I -W -f -c -c -c -r -r -r -r -r -r -r -r -r -r -c -c -c -c -c -a -"} -(22,1,1) = {" -a -a -a -a -a -a -a -a -a -c -c -e -s -T -y -I -I -j -D -u -e -c -c -c -r -X -r -r -r -r -r -r -r -r -r -Z -c -c -c -a -"} -(23,1,1) = {" -a -a -a -a -a -a -a -a -a -a -c -e -h -h -z -n -s -e -T -V -e -e -e -c -r -r -r -r -r -r -r -r -r -r -r -r -c -c -c -c -"} -(24,1,1) = {" -a -a -a -a -a -a -a -a -a -a -c -c -f -f -j -f -I -e -A -o -p -o -q -X -r -r -r -r -r -Z -r -r -r -r -r -r -c -c -c -c -"} -(25,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -c -i -h -I -f -H -e -e -c -e -e -e -c -r -r -r -r -r -r -r -r -Z -r -r -r -c -c -c -c -"} -(26,1,1) = {" -a -a -a -c -a -a -a -a -a -a -a -c -c -e -f -e -c -c -c -c -c -c -c -c -Z -r -r -X -r -r -r -r -r -r -r -r -r -c -c -c -"} -(27,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -r -r -r -r -r -r -r -r -r -r -Z -c -c -"} -(28,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -r -r -r -r -r -r -r -r -r -r -c -c -"} -(29,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -r -r -r -r -r -r -r -r -r -r -c -c -"} -(30,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -c -c -c -c -c -c -Z -r -r -Z -c -c -c -c -c -c -r -r -r -r -Z -r -r -r -r -r -r -c -c -"} -(31,1,1) = {" -a -a -a -c -c -a -a -a -a -a -a -a -c -c -c -c -c -r -r -r -r -r -Z -c -c -c -c -Z -r -r -r -r -r -r -r -r -c -c -c -c -"} -(32,1,1) = {" -a -a -c -c -c -a -a -a -a -a -a -a -c -c -c -c -c -c -Z -r -r -c -c -c -c -c -c -c -r -r -r -r -r -r -r -Z -c -c -c -a -"} -(33,1,1) = {" -a -a -c -c -c -c -a -a -a -a -a -a -a -a -c -c -c -c -c -c -c -c -c -c -c -c -c -c -Z -r -r -r -r -r -c -c -c -c -c -a -"} -(34,1,1) = {" -a -a -a -c -c -c -a -a -a -a -a -a -a -a -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -r -Z -c -c -c -c -c -a -"} -(35,1,1) = {" -a -a -c -a -a -a -a -a -a -c -a -a -a -a -a -a -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -a -a -"} -(36,1,1) = {" -a -a -c -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -a -a -"} -(37,1,1) = {" -a -a -a -a -a -a -c -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -a -a -"} -(38,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -c -c -c -c -c -c -c -a -a -a -a -a -"} -(39,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} -(40,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -a -"} diff --git a/maps/overmap/space_pois/derelict5_40x40.dmm b/maps/overmap/space_pois/derelict5_40x40.dmm new file mode 100644 index 0000000000..7d99e43d56 --- /dev/null +++ b/maps/overmap/space_pois/derelict5_40x40.dmm @@ -0,0 +1,78 @@ +"a" = (/turf/template_noop,/area/template_noop) +"c" = (/turf/simulated/mineral,/area/submap/derelict5) +"e" = (/turf/simulated/wall,/area/submap/derelict5) +"f" = (/obj/effect/floor_decal/rust,/turf/simulated/wall,/area/submap/derelict5) +"h" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/submap/derelict5) +"i" = (/obj/effect/landmark/loot_spawn/low,/turf/simulated/shuttle/plating,/area/submap/derelict5) +"j" = (/obj/structure/door_assembly,/turf/simulated/floor/plating,/area/submap/derelict5) +"k" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/plating,/area/submap/derelict5) +"l" = (/obj/effect/decal/remains/human,/turf/simulated/floor/plating,/area/submap/derelict5) +"m" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/plating,/area/submap/derelict5) +"n" = (/obj/structure/table,/turf/simulated/floor/plating,/area/submap/derelict5) +"o" = (/obj/random/obstruction,/turf/simulated/floor/plating,/area/submap/derelict5) +"p" = (/obj/machinery/door/airlock/external,/obj/random/obstruction,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict5) +"q" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/submap/derelict5) +"r" = (/turf/simulated/mineral/floor/vacuum,/area/submap/derelict5) +"s" = (/obj/random/trash,/turf/simulated/floor/plating,/area/submap/derelict5) +"t" = (/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/submap/derelict5) +"u" = (/turf/simulated/floor/plating,/area/submap/derelict5) +"w" = (/obj/random/maintenance/research,/turf/simulated/shuttle/plating,/area/submap/derelict5) +"y" = (/obj/random/junk,/turf/simulated/shuttle/plating,/area/submap/derelict5) +"z" = (/obj/effect/landmark/loot_spawn/low,/turf/simulated/floor/plating,/area/submap/derelict5) +"A" = (/obj/effect/landmark/loot_spawn/low,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict5) +"C" = (/obj/random/junk,/turf/simulated/floor/plating,/area/submap/derelict5) +"D" = (/obj/item/stack/rods{amount = 5},/turf/simulated/floor/plating,/area/submap/derelict5) +"H" = (/obj/effect/landmark/loot_spawn,/turf/simulated/floor/plating,/area/submap/derelict5) +"I" = (/turf/simulated/shuttle/plating,/area/submap/derelict5) +"L" = (/obj/random/maintenance/engineering,/turf/simulated/shuttle/plating,/area/submap/derelict5) +"N" = (/obj/random/trash,/turf/simulated/shuttle/plating,/area/submap/derelict5) +"O" = (/obj/effect/landmark/loot_spawn,/turf/simulated/shuttle/plating,/area/submap/derelict5) +"R" = (/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict5) +"T" = (/obj/random/maintenance/research,/turf/simulated/floor/plating,/area/submap/derelict5) +"V" = (/obj/random/junk,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict5) +"W" = (/obj/random/trash,/obj/random/junk,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/submap/derelict5) +"X" = (/obj/item/stack/rods{amount = 5},/turf/simulated/mineral/floor/vacuum,/area/submap/derelict5) +"Z" = (/obj/random/outcrop,/turf/simulated/mineral/floor/vacuum,/area/submap/derelict5) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccaccaaaa +aaaaaaaaaaaaaaaaaaaaaaaaacaaaaccccaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccaaaaaa +aaaaaaaaaaacccccaaaaaaaaaaaaaaaaaaaacaaa +aaaaaaaaccccccccaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaccccccccccccaaaaaaaaaaaaaaaaaaaaa +aaaaaarccccrZcccccccccaaaaaaaaaaaacaaaaa +aaaaaaZccccZrcccccccccccaaaaaaaaaaaaaaaa +aaaaarrcccccZccceefcceecccccccaaaaaaaaaa +aaaaarrcccccccciIzeiyshficccccccaaaaaaaa +aaaaarrrZcccccfOLsjIIThfheccccccaaaaaaaa +aaaaarrrrcccccfzCkfOtyzjIfccccccccaaaaaa +aaaaaaarrcccccelwmfhsInffeccccccccaaaaaa +aaaaaaarrrccccfHhueluIsIHcccccccccccaaaa +aaaaaaaarrcccceffeeeejeeeccccZrcccccaaaa +aaaaaaaarrcccceCIIRuIDTAeccccrrZccccaaaa +aaaaaaaarrrZcceuLNIIWuVocccccrrrccccaaaa +aaacaaaaarrrrZcceceffeepeccccZrrccccaaaa +aaaaaaaaaaarrrcccccccceoecccccrccccccaaa +aaaaaaaaaaarrrrrrZcccceqecccccZccccccaaa +aaaaaaaaaaaaarrrrrcccccXcccccccccccccaaa +aaaaacaaaaaaarrrrrrrrrrrrZcccccccccccaaa +aaaaaaaaaaaaaaaaarrrrXrrrrcccccccccccaaa +aaaaaaaccaaaaaaaaarrrrrrrrcccccccccccaaa +aaaaaaaccccaaaaaaarrrrrrrXrccrZccccccaaa +aaaaaaaccccaaaaaaarrrrrrrrrrrrrrZcccccaa +aaaaaaaaaccaaaaaaaarrrrZrrrrrrrrrcccccaa +aaaaaaaaaccaaaaaaaarrrrrrrrrrrrrrcccccaa +aaaaaaaaaaaaaaaaaaarrrrrrrrrrZrrrcccccaa +aaaaaaaaaaaaaaaaaccrrrrrZrrrrrrrrrccccaa +accaaaaaaaaaaaaaaccZrrrrrrrrrrrrrZccccaa +accaaaaaaaaaaaaaaccccrrrrrrrrrrrccccccaa +acccaaaaaaaaaaaaaacccZrrrrrrrrrZcccccaaa +aaaaaaaaaaaaaaaaaacccccccrrrrrcccccccaaa +aaaaaaaaaaaaaaaaaaaaccccccZrrrcccccccaaa +aaaaacaaaaaaaaaaaaaaccccccccccccccaaaaaa +aaacaaaaaaaaaaaaaaaaaacccccccccaaaaaaaaa +"} diff --git a/maps/overmap/space_pois/dj.dmm b/maps/overmap/space_pois/dj.dmm deleted file mode 100644 index ca4efa3510..0000000000 --- a/maps/overmap/space_pois/dj.dmm +++ /dev/null @@ -1,1683 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/obj/structure/grille, -/turf/template_noop, -/area/space) -"ac" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, -/turf/template_noop, -/area/space) -"ad" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/space) -"af" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/catwalk_plated/dark, -/turf/template_noop, -/area/submap/dj) -"ag" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, -/obj/structure/lattice, -/turf/template_noop, -/area/space) -"ai" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/catwalk_plated/dark, -/turf/template_noop, -/area/submap/dj) -"aj" = ( -/obj/structure/lattice, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, -/turf/template_noop, -/area/space) -"ak" = ( -/obj/structure/lattice, -/obj/structure/lattice, -/turf/template_noop, -/area/space) -"al" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/shuttle/wall, -/area/submap/dj) -"am" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/shuttle/window, -/turf/simulated/floor/plating, -/area/submap/dj) -"an" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/shuttle/window, -/turf/simulated/floor/plating, -/area/submap/dj) -"ap" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/shuttle/window, -/turf/simulated/floor/plating, -/area/submap/dj) -"aq" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/shuttle/wall, -/area/submap/dj) -"ar" = ( -/obj/machinery/power/solar/fake, -/turf/simulated/floor/airless{ - icon_state = "solarpanel" - }, -/area/submap/dj) -"as" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/shuttle/window, -/turf/simulated/floor/plating, -/area/submap/dj) -"at" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/submap/dj) -"au" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/status_display{ - layer = 4; - pixel_y = 32 - }, -/obj/machinery/telecomms/relay/preset/ruskie, -/turf/simulated/floor/plating, -/area/submap/dj) -"av" = ( -/turf/simulated/floor/plating, -/area/submap/dj) -"ax" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/catwalk_plated/dark, -/turf/template_noop, -/area/submap/dj) -"ay" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/catwalk_plated/dark, -/turf/template_noop, -/area/submap/dj) -"az" = ( -/obj/machinery/power/terminal, -/turf/simulated/floor/plating, -/area/submap/dj) -"aB" = ( -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/submap/dj) -"aD" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/catwalk_plated/dark, -/turf/template_noop, -/area/submap/dj) -"aE" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/shuttle/wall, -/area/submap/dj) -"aF" = ( -/obj/item/weapon/extinguisher, -/turf/simulated/floor/plating, -/area/submap/dj) -"aG" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/smes, -/turf/simulated/floor/plating, -/area/submap/dj) -"aH" = ( -/obj/effect/catwalk_plated/dark, -/turf/template_noop, -/area/submap/dj) -"aI" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating, -/area/submap/dj) -"aJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/submap/dj) -"aK" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/shuttle/window, -/turf/simulated/floor/plating, -/area/submap/dj) -"aL" = ( -/obj/structure/grille, -/obj/structure/shuttle/window, -/turf/simulated/floor/plating, -/area/submap/dj) -"aM" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/hyper{ - pixel_y = -20 - }, -/turf/simulated/floor/plating, -/area/submap/dj) -"aN" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/weapon/storage/box/lights/mixed, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; - pixel_y = -32 - }, -/turf/simulated/floor/plating, -/area/submap/dj) -"aO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/submap/dj) -"aP" = ( -/obj/machinery/light_switch{ - pixel_y = -28 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/submap/dj) -"aQ" = ( -/obj/item/clothing/suit/space/syndicate/orange{ - desc = "This spacesuit is emblazoned with the emblem of the USSP. Glory to Space Russia!"; - name = "Cosmonaut Security Suit" - }, -/obj/item/clothing/head/helmet/space/syndicate/orange{ - desc = "This spacesuit is emblazoned with the emblem of the USSP. Glory to Space Russia!"; - name = "Cosmonaut Security Helmet" - }, -/obj/item/clothing/mask/breath, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/submap/dj) -"aR" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "0" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/submap/dj) -"aS" = ( -/turf/simulated/shuttle/wall, -/area/submap/dj) -"aT" = ( -/obj/structure/closet/emcloset, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/submap/dj) -"aW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light{ - dir = 1; - on = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/submap/dj) -"aX" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/cigarette, -/turf/simulated/floor/tiled/dark, -/area/submap/dj) -"aY" = ( -/obj/machinery/cell_charger, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/submap/dj) -"aZ" = ( -/obj/machinery/status_display{ - layer = 4; - pixel_y = 32 - }, -/obj/item/weapon/paper/djstation{ - info = "Station has stopped responding to my reports for about the past month. I assume Vostok just has his knickers in a twist.

Hell, not my problem. Got all the vodka and cigarettes I need to last me a year."; - name = "communications update" - }, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/submap/dj) -"ba" = ( -/obj/machinery/vending/sovietsoda, -/turf/simulated/floor/tiled/white, -/area/submap/dj) -"bb" = ( -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/flora/pottedplant/minitree, -/turf/simulated/floor/tiled/white, -/area/submap/dj) -"bg" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, -/area/submap/dj) -"bh" = ( -/obj/structure/safe/floor, -/obj/structure/table/woodentable, -/obj/item/weapon/gun/projectile/revolver/cerberus, -/obj/item/ammo_magazine/s38, -/obj/item/ammo_magazine/s38, -/turf/simulated/floor/carpet, -/area/submap/dj) -"bi" = ( -/obj/machinery/status_display{ - layer = 4; - pixel_y = 32 - }, -/turf/simulated/floor/carpet, -/area/submap/dj) -"bj" = ( -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/turf/simulated/floor/carpet, -/area/submap/dj) -"bk" = ( -/obj/structure/bed, -/obj/item/weapon/bedsheet/blue, -/turf/simulated/floor/carpet, -/area/submap/dj) -"bl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/standard, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/white, -/area/submap/dj) -"bm" = ( -/turf/simulated/floor/tiled/white, -/area/submap/dj) -"bn" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/dark, -/area/submap/dj) -"br" = ( -/obj/machinery/door/airlock/glass{ - name = "Library" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/submap/dj) -"bs" = ( -/turf/simulated/floor/carpet, -/area/submap/dj) -"bt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/tiled/white, -/area/submap/dj) -"bu" = ( -/obj/machinery/light/small, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/white, -/area/submap/dj) -"bw" = ( -/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{ - pixel_x = 7; - pixel_y = 10 - }, -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass{ - pixel_x = 28; - pixel_y = 3 - }, -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/structure/table/standard, -/obj/random/maintenance/engineering, -/turf/simulated/floor/tiled/dark, -/area/submap/dj) -"bx" = ( -/obj/structure/table/standard, -/obj/random/maintenance/engineering, -/turf/simulated/floor/tiled/dark, -/area/submap/dj) -"by" = ( -/obj/item/weapon/paper/djstation{ - info = "Welcome new owner!

You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
  1. Equip yourself with a multi-tool
  2. Use the multitool on each machine, that is the broadcaster, receiver and the relay.
  3. Turn all the machines on, it has already been configured for you to listen on.
Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.