From 6c131a700526667c15c65bb6b84b50a60c3b8001 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Tue, 10 Jan 2023 16:47:42 +1100 Subject: [PATCH 001/239] Fixes runtime with seed scannable results. --- code/modules/hydroponics/seed_packets.dm | 4 +++- code/modules/hydroponics/trays/tray.dm | 19 +++++++------------ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm index 4f777eeca99..9048038026a 100644 --- a/code/modules/hydroponics/seed_packets.dm +++ b/code/modules/hydroponics/seed_packets.dm @@ -27,8 +27,10 @@ var/global/list/plant_seed_sprites = list() /obj/item/seeds/proc/update_seed() if(!seed && seed_type && !isnull(SSplants.seeds) && SSplants.seeds[seed_type]) seed = SSplants.seeds[seed_type] - if(seed.scannable_result) + if(seed?.scannable_result) set_extension(src, /datum/extension/scannable, seed.scannable_result) + else if(has_extension(src, /datum/extension/scannable)) + remove_extension(src, /datum/extension/scannable) update_appearance() //Updates strings and icon appropriately based on seed datum. diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 8554056e1c0..8e77f2226a8 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -120,16 +120,14 @@ ) /obj/machinery/portable_atmospherics/hydroponics/proc/set_seed(var/new_seed) - if(seed) - clear_seed() + if(seed == new_seed) + return seed = new_seed - if(seed.scannable_result) + if(seed?.scannable_result) set_extension(src, /datum/extension/scannable, seed.scannable_result) - -/obj/machinery/portable_atmospherics/hydroponics/proc/clear_seed() - seed = null - if(has_extension(src, /datum/extension/scannable)) + else if(has_extension(src, /datum/extension/scannable)) remove_extension(src, /datum/extension/scannable) + update_icon() /obj/machinery/portable_atmospherics/hydroponics/attack_ghost(var/mob/observer/ghost/user) if(!(harvest && seed && ispath(seed.product_type, /mob))) @@ -280,7 +278,7 @@ if(!seed.get_trait(TRAIT_HARVEST_REPEAT)) yield_mod = 0 - clear_seed() + set_seed(null) dead = 0 age = 0 sampled = 0 @@ -301,7 +299,7 @@ if(!silent) to_chat(user, SPAN_NOTICE("You remove the dead [seed.display_name].")) - clear_seed() + set_seed(null) dead = 0 sampled = 0 @@ -315,9 +313,6 @@ // If a weed growth is sufficient, this proc is called. /obj/machinery/portable_atmospherics/hydroponics/proc/weed_invasion() - //Remove the seed if something is already planted. - if(seed) - clear_seed() set_seed(SSplants.seeds[pick(list("reishi", "nettles", "amanita", "mushrooms", "plumphelmet", "towercap", "harebells", "weeds"))]) if(!seed) From fa2cfca3bdd65330ecfdbc6befdca889b5b97db1 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Fri, 18 Nov 2022 17:10:20 +1100 Subject: [PATCH 002/239] Added a Python script for replicating player saves for all other maps. --- tools/ReplicateSaves/README.md | 7 ++ tools/ReplicateSaves/replicate_saves.py | 111 ++++++++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 tools/ReplicateSaves/README.md create mode 100644 tools/ReplicateSaves/replicate_saves.py diff --git a/tools/ReplicateSaves/README.md b/tools/ReplicateSaves/README.md new file mode 100644 index 00000000000..a2ce3bd3111 --- /dev/null +++ b/tools/ReplicateSaves/README.md @@ -0,0 +1,7 @@ +# Save replicator + +Very quick and dirty script used to replicate the player saves for a given map for all other maps. Does not overwrite existing saves. + +# Usage + +`python tools/ReplicateSaves/replicate_saves.py [map to copy saves from]` diff --git a/tools/ReplicateSaves/replicate_saves.py b/tools/ReplicateSaves/replicate_saves.py new file mode 100644 index 00000000000..b935edab597 --- /dev/null +++ b/tools/ReplicateSaves/replicate_saves.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 + +import os +import sys +import re +import json + +__author__ = "MistakeNot4892" +__version__ = "0.1.0" +__license__ = "MIT" + +def main(): + + # Make sure they gave us a map to replicate. + if len(sys.argv) < 2: + print("Specify a map to replicate.") + return + + # Make sure we can access the maps folder. + mapname = sys.argv[1] + mapdir = os.path.join("maps") + if not os.path.isdir(mapdir): + print("Cannot find directory '" + mapdir + "', make sure you are running this script from the root repository directory.") + return + + # Work out what maps we actually need to replicate to. + # This should be updated as map directories change, or the script will break. + targetmaps = [] + ignoremaps = [ + "away", + "away_sites_testing", + "antag_spawn", + "example", + "modpack_testing", + "random_ruins", + "~mapsystem", + "~unit_tests" + ] + for dir in os.scandir(mapdir): + if os.path.isdir(dir): + targetmap = dir.path + targetmap = targetmap.replace(mapdir + os.sep, "") + if targetmap not in ignoremaps and targetmap != mapname: + targetmaps.append(targetmap) + + # Make sure we can actually see the save directory. + scrapedir = os.path.join("data", "player_saves") + if not os.path.isdir(scrapedir): + print("Cannot find directory '" + scrapedir + "', make sure you are running this script from the root repository directory.") + return + + # Find existing saves for the target map, then replicate them to all our target map dirs. + # If they exist already, don't copy over, just move on. + filename_regex = r"character_([a-zA-Z_]+)_(\d+)\.json" + print("Scanning saves in " + scrapedir + "...") + save_slots_to_update = [] + saves_to_replicate = [] + for (root, dirs, files) in os.walk(scrapedir): + for file in files: + match = re.match(filename_regex, file, re.I) + if match is None: + continue + if match.group(1) != mapname: + continue + savefile = os.path.join(root, file) + with open(savefile, "r") as loadedsave: + wrote = 0 + loadedlines = loadedsave.readlines() + for targetmap in targetmaps: + newfilename = savefile.replace(mapname, targetmap) + if not os.path.exists(newfilename): + with open(newfilename, "w") as writesave: + for line in loadedlines: + writesave.write(line) + wrote = wrote+1 + if wrote > 0: + print("Wrote " + str(wrote) + " copies of " + file + ".") + + # Collect slot names for each user to update their preferences.json + for (root, dirs, files) in os.walk(scrapedir): + has_prefs = False + has_saves = [] + for file in files: + if file == "preferences.json": + has_prefs = True + continue + match = re.match(filename_regex, file, re.I) + if match is None: + continue + has_saves.append(file) + + if has_prefs and len(has_saves): + new_slot_names = {} + for savefile in has_saves: + with open(os.path.join(root, savefile), "r") as loaded_save: + loaded_save_json = json.load(loaded_save) + new_slot_names[savefile.replace(".json", "")] = loaded_save_json["real_name"] + if len(new_slot_names): + loaded_pref_json = "" + with open(os.path.join(root, "preferences.json"), "r") as pref_file: + loaded_json = pref_file.read() + loaded_pref_json = json.loads(loaded_json) + loaded_pref_json["slot_names"] = new_slot_names + with open(os.path.join(root, "preferences.json"), "w") as pref_file: + pref_file.write(json.dumps(loaded_pref_json)) + + # Fin. + print("Done.") + +if __name__ == "__main__": + main() From 6226b84e6c909408dc175eadb254de661838ea80 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Tue, 10 Jan 2023 17:37:16 +1100 Subject: [PATCH 003/239] Hopefully fixes issues with is_outside(). --- code/game/turfs/turf.dm | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 74f8c0f4bc3..9b732a48217 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -402,26 +402,27 @@ if(density) return OUTSIDE_NO - // What would we like to return in an ideal world? - if(is_outside == OUTSIDE_AREA) + // What is our local outside value? + // Some turfs can be roofed irrespective of the turf above them in multiz. + // I have the feeling this is redundat as a roofed turf below max z will + // have a floor above it, but ah well. + . = is_outside + if(. == OUTSIDE_AREA) var/area/A = get_area(src) . = A ? A.is_outside : OUTSIDE_NO - else - . = is_outside - - // Notes for future self when confused: is_open() on higher - // turfs must match effective is_outside value if the turf - // should get to use the is_outside value it wants to. If it - // doesn't line up, we invert the outside value (roof is not - // open but turf wants to be outside, invert to OUTSIDE_NO). - // Do we have a roof over our head? Should we care? + // If we are in a multiz volume, we return the outside value of + // the highest unenclosed turf in the stack. if(HasAbove(z)) + . = OUTSIDE_YES // assume for the moment we're unroofed until we learn otherwise. var/turf/top_of_stack = src while(HasAbove(top_of_stack.z)) - top_of_stack = GetAbove(top_of_stack) - if(top_of_stack.is_open() != . || (top_of_stack.is_outside != OUTSIDE_AREA && top_of_stack.is_outside != .)) - return !. + var/turf/next_turf = GetAbove(top_of_stack) + if(!next_turf.is_open()) + return OUTSIDE_NO + top_of_stack = next_turf + // If we hit the top of the stack without finding a roof, we ask the upmost turf if we're outside. + return top_of_stack.is_outside() /turf/proc/set_outside(var/new_outside, var/skip_weather_update = FALSE) if(is_outside != new_outside) From ce7aee09effe798d5fb6900caaee71e200c1c5a0 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Tue, 10 Jan 2023 17:49:43 +1100 Subject: [PATCH 004/239] Porting Lohikar's ambient light fixes and tweaking config var name. --- code/controllers/configuration.dm | 6 +++--- code/controllers/subsystems/ambience.dm | 7 +++---- code/modules/admin/view_variables/vv_set_handlers.dm | 2 +- code/modules/lighting/lighting_turf.dm | 10 ++++++++-- config/example/config.txt | 5 +++-- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 51a5217e7b6..343b07b2c14 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -203,7 +203,7 @@ var/global/list/gamemode_cache = list() var/dsay_allowed = 1 var/aooc_allowed = 1 - var/starlight = 0 // Whether space turfs have ambient light or not + var/ambient_light = 0 // Whether space turfs have ambient light or not var/law_zero = "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'ALL LAWS OVERRIDDEN#*?&110010" @@ -741,9 +741,9 @@ var/global/list/gamemode_cache = list() config.event_delay_upper[EVENT_LEVEL_MODERATE] = MinutesToTicks(values[2]) config.event_delay_upper[EVENT_LEVEL_MAJOR] = MinutesToTicks(values[3]) - if("starlight") + if("ambient_light") value = text2num(value) - config.starlight = value >= 0 ? value : 0 + config.ambient_light = value >= 0 ? value : 0 if("law_zero") law_zero = value diff --git a/code/controllers/subsystems/ambience.dm b/code/controllers/subsystems/ambience.dm index 1f615731f18..1f69d866167 100644 --- a/code/controllers/subsystems/ambience.dm +++ b/code/controllers/subsystems/ambience.dm @@ -47,10 +47,9 @@ SUBSYSTEM_DEF(ambience) if(planet.lightlevel) set_ambient_light(COLOR_WHITE, planet.lightlevel) return TRUE - else - if(config.starlight) - set_ambient_light(SSskybox.background_color, config.starlight) - return TRUE + else if(config.ambient_light) + set_ambient_light(SSskybox.background_color, config.ambient_light) + return TRUE clear_ambient_light() return FALSE diff --git a/code/modules/admin/view_variables/vv_set_handlers.dm b/code/modules/admin/view_variables/vv_set_handlers.dm index 8aeff484bae..87282980aed 100644 --- a/code/modules/admin/view_variables/vv_set_handlers.dm +++ b/code/modules/admin/view_variables/vv_set_handlers.dm @@ -155,7 +155,7 @@ if (istext(value) && !color_regex.Find(value)) to_chat(client, "
ambient_light
must be a 6 digit (
#AABBCC
) hexadecimal color string.
") return - T.set_ambient_light(value) + T.set_ambient_light(COLOR_WHITE, value) if ("ambient_light_multiplier") if (!isnum(value)) diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index b1a919d3935..912a673d3ad 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -71,8 +71,14 @@ // else // return - // inefficient :( - if (!corners) + // still inefficient :( + if(!corners || !lighting_corners_initialised) + /* Commented out pending working out why this doesn't work properly on Neb. + if(TURF_IS_DYNAMICALLY_LIT_UNSAFE(src)) + generate_missing_corners() + else + return + */ generate_missing_corners() // This list can contain nulls on things like space turfs -- they only have their neighbors' corners. diff --git a/config/example/config.txt b/config/example/config.txt index 37ff4b1b8bd..65e82110060 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -362,8 +362,9 @@ EVENT_CUSTOM_START_MAJOR 80;100 ## Respawn delay in minutes before one may respawn as a crew member. #RESPAWN_DELAY 30 -## Strength of ambient star light. Set to 0 or less to turn off. A value of 1 is unlikely to have a noticeable effect in most lighting systems. -STARLIGHT 0 +## Percentile strength of ambient light (such as starlight). 0.5 is 50% lit. +AMBIENT_LIGHT 0 + ## Defines how Law Zero is phrased. Primarily used in the Malfunction gamemode. # LAW_ZERO ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK, ALL LAWS OVERRIDDEN#*?&110010 From 61e3b64f6fc2c43dd9ecb0e2ae7c6e1105ebaead Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Tue, 10 Jan 2023 18:10:35 +1100 Subject: [PATCH 005/239] Artifact energy fields should now clean up after themselves properly. --- .../artifacts/effects/forcefield.dm | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/code/modules/xenoarcheaology/artifacts/effects/forcefield.dm b/code/modules/xenoarcheaology/artifacts/effects/forcefield.dm index ecb080fb291..689ef93c4e9 100644 --- a/code/modules/xenoarcheaology/artifacts/effects/forcefield.dm +++ b/code/modules/xenoarcheaology/artifacts/effects/forcefield.dm @@ -27,6 +27,7 @@ /datum/artifact_effect/forcefield/process() ..() + // This should probably rebuild the field as done in UpdateMove() for(var/obj/effect/energy_field/E in created_field) if(E.strength < 1) E.Strengthen(0.15) @@ -39,14 +40,29 @@ var/list/circle = getcircle(T, effect_range) //for now, just instantly respawn the fields when they get destroyed while(LAZYLEN(created_field) < length(circle)) - LAZYADD(created_field, new /obj/effect/energy_field/prepared()) + LAZYADD(created_field, new /obj/effect/energy_field/artifact(null, src)) for(var/i = 1 to min(length(created_field), length(circle))) var/obj/effect/energy_field/E = created_field[i] E.forceMove(circle[i]) E.color = field_color //Subtype with all the needed vars set, ready to block stuff -/obj/effect/energy_field/prepared +/obj/effect/energy_field/artifact strength = 1 density = 1 invisibility = 0 + //is_spawnable_type = FALSE + var/datum/artifact_effect/forcefield/owner + +/obj/effect/energy_field/artifact/Initialize(var/ml, var/_owner) + owner = _owner + if(!istype(owner)) + PRINT_STACK_TRACE("Artifact forcefield created with [owner ? "invalid" : "null"] owning effect.") + return INITIALIZE_HINT_QDEL + return ..(ml) + +/obj/effect/energy_field/artifact/Destroy() + if(owner) + LAZYREMOVE(owner.created_field, src) + owner = null + return ..() From bf7dae7b2ae14d378e2c77548b6330d276e07bdd Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Wed, 11 Jan 2023 00:35:04 +1100 Subject: [PATCH 006/239] Fixes issues with tails not updating on pref change. --- code/modules/client/preferences.dm | 4 +++- code/modules/mob/new_player/preferences_setup.dm | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index cc49385f397..2f7217e6ffe 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -237,7 +237,7 @@ var/global/list/time_prefs_fixed = list() /datum/preferences/proc/update_setup_window(mob/user) send_output(user, url_encode(get_content(user)), "preferences_browser:update_content") -/datum/preferences/proc/update_character_previews(mutable_appearance/MA) +/datum/preferences/proc/update_character_previews(mob/living/mannequin) if(!client) return @@ -258,6 +258,8 @@ var/global/list/time_prefs_fixed = list() O.pref = src LAZYSET(char_render_holders, "[D]", O) client.screen |= O + mannequin.set_dir(D) // necessary to update direction-dependent over/underlays like tails. + var/mutable_appearance/MA = new /mutable_appearance(mannequin) O.appearance = MA O.dir = D O.screen_loc = preview_screen_locs["[D]"] diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 89e22c0e6fe..1e65fa89233 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -103,7 +103,7 @@ if(mannequin) mannequin.delete_inventory(TRUE) dress_preview_mob(mannequin) - update_character_previews(new /mutable_appearance(mannequin)) + update_character_previews(mannequin) /datum/preferences/proc/get_random_name() var/decl/cultural_info/culture/check_culture = cultural_info[TAG_CULTURE] From 5996ba27e37bb1ff3efabf0b09a8f79c7af97305 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Wed, 11 Jan 2023 00:53:59 +1100 Subject: [PATCH 007/239] Fixing up newTaj icons a bit. --- mods/species/bayliens/tajaran/icons/body.dmi | Bin 1274 -> 1331 bytes mods/species/bayliens/tajaran/icons/tail.dmi | Bin 4290 -> 4472 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/species/bayliens/tajaran/icons/body.dmi b/mods/species/bayliens/tajaran/icons/body.dmi index d8b41cd7c365a08b885a819aab02b3e389516343..e3ca7879b060b9aa4f4abc60e2a91b8a2fff1087 100644 GIT binary patch delta 1086 zcmV-E1i}0I39|~Y1p$8q7)eAyRCt{2oXu|BHWY=2LuACq}-^!PgdCySPXmt3q*$_g$6LuG0j(^>$in58K25?VOEm^QS~2ihIR$2K~YEzqOB z<+#haJ{93U+}U0LLI@#005Pkl=|MkD1!FOOn!2EWGvdRviD85|w-7H!|A?KQ(3O$j zojL8R@zxa*LI{5$gbuwH9zS!tr1_)I8<&s7rb%aq)R~<+F(s z0kMN{?Samz0PF*+^UVb`lM?r$`3WI}5JJc|r~0EGTsBinYl5p)Ul#hkt)ryb*IxX5 zVe0s_?u$vNUV@_3+s;DPIH?ObHT&8E>KC{u_UnJX9J~6vzb|z4E87EvkpBVxUVYoX zfCB?5y#Bf$ZIe~TVetvmp!sdx0NY+$y_4bVJG9$BtS?}L!`aQM0tg|55JHFz7u7${ zu{WR5P`F}M*Gv(vJ7WQbD^_*Q6w!WC$;lO~yJkphJ0bBQ?SJnsXI!&I0=7>$`_UCU znEs*4#|%#~;hKAlf5Mg9GuwZD`Ft3kkmMOSSWxKZwo&!Tc>jXWd%cxW zJ7=X{S#NaO;3w+!0!U47yVvbez~xwm|I7(!^V}KF<-RMUf4llwkGR%)3FaN7jB^62 zhQFbJ7hdl8T?oK6mt1d22qAJGWweQxMiLgs3H*X7-nZY*L z1OYcxG@uEmnY((k;0Ly4;B#e(q@4h#1}AC)Mx(r+0CDVqJQG}xRsaA107*qoM6N<$ Ef?t6Uq5uE@ delta 1028 zcmV+f1pE853i=7K1p$8p-$_J4RCt{2oI!5eFc3wh0Sssvsb-O-KpvwL1RUw*B(z z6UM_0#Nw|mu)b?e1-PqgXyAHSe~jZMpu#s-p|fmX-v0R6#Ib+dhBz)d_ua>_`|08M zWC89L8k9PCB_P~JT~uBNTLDG4@h!vwW9fW|3M9A&j!&j>4UB=N#`wOEHgOO1sBb#u zYHUn(a39vT7l05#$Unf|`&}IC*;TrLaWI}uMbA#^H)XYVJBa-y#M9~8kqR|bkorWm z7bDguB!mz`2qAw&A?2@4>(+g>l=(`H<_loT=2&a zlyJQG@ZqJ>{xITlRmo&ox^MXR%}!Ubq)fh;#lc-8!Fcve1Z-4Er3L5;)&efIfDTIL z7ErD97*l^G>WbKN*gaiRt=f47tP%k|n#G5C+b_B?0dtcID9_q{QJuFrLI@#*5c2xS z{sIP<&D7FLD06;MTqsLZM=2ru+$E8xB4OSPOqaa`E*4;#g{&z*u_PGV*FK|>W zZe9WTM{kLA^)o-66GHw2(dtnOS z;{wLl`2`e*JJ2($073{Mgb-rGMfT$vq=IL))<)1SIiYCgGdV$N8bKM^6pEw^9pD|5C`cowq&|_P+ z&TD_^vrk%GETBaJD^meQ{&aEjcABO`2qA_d{a!M#HOF&E zrMC8}C7^&zQVP&p3&1>|svg^9YcBwHSf+eCFcSgRuX=%W8I_aZm!0*5bD yG@x?F%w5S@y^A;yKjubH6OeOSm4Hl*7x4?K?StZ)B~rlv0000s$) diff --git a/mods/species/bayliens/tajaran/icons/tail.dmi b/mods/species/bayliens/tajaran/icons/tail.dmi index 946c7bf3e454f21d033adbe1b2d76b86731be2e0..5d0e5e2bf02c4ec1e49928e42609ff01a21e5779 100644 GIT binary patch literal 4472 zcmaKv2~<JNw(`to=W~@4vru z&CSJLT}4j?fk3D`IvhWZKx{~cf4&pYHsSd ze*Hm++6^{5s}ObC#T{Yy{*6BzuoKRli#m>vybuu-78OJYMIhpGpOSl3Quk?Htr&4v zqyHLqzCdT>=PlUDJ?*dE%OBsVC66+?ZWLZr+C20QogT@^175b|T+Y$47~xH;MEDlA z1UGnZY~O}?s%Loon+QGMwv+e1K6#~3r7G&HBgUO^oYzNFqHen%u*?pfG}sZ+6u4#X zU|2$*m182k<3bw2YPI;fNU5-_F;z1^PBrG217CVzl2;-;BERO2Y|c+yJ?W8R8ELCi zSo0B}wzaNh#)H%NbIuFCC}EWqE@5aQ-eS+|nFAvV&ja&14xfOK2*f5c$KyxO#N~d- zYl<0n*mB}_LIS!!g^qHUSROR8+ty%2T!NrZhwmLu?f+_XDdKYNg3k|`n{Gc;`?+4n zGqZIAEYc@~VS$zzZbw7bAOl@QI`9lzo1AFmDJ@%j#m~9MUr_SL=7SC8K+YgUGhgEH zI}zq3;;eUJpq9b=imm4RR>bpXeh$b7)H4r58FP>ZGMk>Rv#DQSJ3F3k)40r^mDyz7 z9s8;B`#9t-DDQ5Xes*k9%5@lanrqSrW+4`8{Wy-dupJ1^5f^I~Cm zl0~CK>Ie04zFCsuKur&($i!VEWN^f2V*5qnW4+1!dW{hSqp=GzZ5H+o5P2R%#C+T^ zVz@)SfKe&E6&1)H0Uwg*!#+lhfa(-_6{I(??3$=FI5^_TrLg;zJh+u5n)Be_PXSl( z74x_nY5rDKZ?vVEi#DJT{6vMOU&L&pW(f(E(j-OcxGstq4r#L>W7$nAeluMVa$C5V zbn5e0g0T7(d{U0qB~Ti+v_AOG_%ayHVm|GT{m|>LuM}=A)~}5w$644N`Ldy$dHH~* zxQqhT%INc2Wziozxle$VQ>6^u?X|SYR!zH_`7(tw#|WNJWR`AvXIYRpU=>9PnvkbC zGcxCPsrLxJRQ?L|?D6AxD(>DZbSLe;+Wg>>s7BvH{nRgtCF~(4r^~inQ@HqwY}8Gy zIVa#Fu$?gmoFFfaT>QW?K{Hi%GKDt#f&1j4eXr_|(~nW2k0{~@m9Q3WB>-Ad2?du# ztQV3Y!D5&E2A(DoL5PtN$gPZO;kJx$UjXnX@8Su5l{xsgdQ8(tptD36(4mSE9B8Ws z0E#q_0uDd>kdKQ0T%@(~cJf-j=VJA0#dh~MZC|;gK+%Bf^HqW@yXEEVh^uj;K-so_ z6ug`2%gNd6yTD&4*4oG#t!{id$5YTlB{fkA8t$qNn)hEml_y>1%wd)zD}?BxuQ7tF zC{Zn2l7D&=is(d<&d-6a#$UwICa2uG-Q`C8$>3%MpNKiDmiaiKSIAG$CYgC~E5@b? zEnXF<0;^_@$7D~XxPZqTt3et}3`$4dIqCjq@##_5OW7Bmm3 zGW9MR*wDS73-juktyCQWH`fE5?9*Tuiwwf7ioTiYDMvDYEx7gnqL1X=+aoUvDloDP zxS+zo$$wh>tz*$6jg#@3>&szD%+JXf3Z!r~3jGCeg9m8=CppxAU?tV<5~1zRPjr+A zd7UH=w$V*89s9}kxpYW9S9xb!O8?vk?!3PdJ6#eR(2*Iy@j^)w5TWU=qv^EWQSKCJ9EBdrF_&5xN|--2nY%rg;)lTyiO^qugEC5z zq&hQGMmSeDwm7yx7-qto?4+8Tz3JK?lEKaDl|2R}w8=D-dI=IJHheOk&`vIfGfgnd{Z25|&}zcx&sg&g%`0Mlch$a+HZMsy;>6S~TV#i= znnwh;Su`LHeQ85vmf~Uq22fz4^=tHEYV;8>c==3{na#5Qj6J_eX&NKo^bK%Ep)<7A zIkovoL>=m~Cv-p2h|N9hgwriBX2}AoQeM&BX{)q}>L2>EcnfS3F?$&8g#H)N_`irQ z`itnoKZ%|u*TK%`WJ~syDDhE}{k$H3*r5GqJg?lmQkGRFU_=Um;}jC(2J+3w(esof zl7m&%Tob`$_YP}s8=qLn{^HCo#)jazg)#ywcy>b>&**M?`6|3b7U`Glp-4PvDf>x< z`Wo7d5zE2de!B?LVjl6*zC-z3B!uqNxFm0Ye=W|0@8u=){Bgd7+&l=M07K$L_V$qK z+ZQVYY`Hb@h0a?vk-uAaMuYgA_#WJIX*YinU!46kn3>=QaHzP+5+#)qQX$V2K-A%J z>IHfU^?v;Bl#eCnWmDq5hwk6%!-2t3x{2yLDh^w5>>665zgeAMMaP6PE z^+vD%cI!)Xrso7*K_Lk8Z=tkdd)j<7i!s(V^9E8^Wu%nyOfSruVg!dSQ5yP|v#9fD zS&XEiHhah%HL@h!$M-}Lk2sA6iA*O^#I09?_Vx{~8Q$I*eoUT?`v>gXb_NB;PNM-L z_Dz3Iw*rS+bFo8$0zOwSSrU$8$s}x53UQ@Vjxq;;5}G0)y6O@M5m}~#68hKnZ#c;s zjZuiKkVls3ctU-0E!&Aw-$$)5`&rc8fTa%SQIaBm$H-_ExGyO6Tq@fH60ucZm=Le< z&`^Rx1)e~aPT>H16a|VchnvSwMshcAkRm&KH?ed_Tw5IdK^pGnfH2qsK3<<+Fu*3y zo(oufmKdwYHUGU;-N?xwZY;)nuy>6=?_bPmMUPMyC36(OD}V9rqpri``2pG6 z3o4QqGKS;$7$U@Rc80sb%>;@BiK5}Dz${+q|7P1%s-1jElt1U1?sDz2boLs!Xk+K9 z&FrA+kW}sdZN9HOQ4$5=lu!z>A+qN|1I0hH9L#mX{yFYE1} zt;QYY-+|N##e@H$)o7`(gyBg;k({)XnjiZ3FaWqH*4u46@P-`2i&R&y3@ zP2qEaa=jCov^v|(6-6X2N;X4D;{HcN4s<&03jN6=mo;T;Uyq92Dq&H;Z(U8?9Qa#J z0Fh#k32{u$-Fn-6>f(f_>pU=}kU(8?rqGwX5T!hB=(~fvEj50_dI9iJ>#{hZ)U04- z0(`?7_2W1(l?u+wJ{;Y2#U{)n1XN-%ET5{|k^A#7(mFhMpG>~~|FYU?f`WzFr#AbD zskHRPMaSV=I~S{@I(`&TZ4)xElPtu@4n4vMBJHZ>hq*1w=yNq1U*gY-&=JqS;nn?UR&Lo8?H>9x?6 zV+fn_i_Eze^~9K@W1P#zKnXKtg!9B|_&4P>YJ0j--;4Ds@SjD(AJhX~ce6sGM6*T1 zYLqe!djWG>%(j}pd_5n_Y}W>G+XLD?+GNU?;b~~kxtRV4p_ibJ2Z{K{OhmICS2yE_ xE=SbMO&`7#`_Eub4hrh7fSS*tpbBr(Wk3&^qLFuRV4GYX#}h8c%fI(c{V(6`0tNs8 literal 4290 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 Date: Wed, 11 Jan 2023 15:13:20 +1100 Subject: [PATCH 008/239] Fixes runtime in area/Entered --- code/game/area/areas.dm | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 45f449ad978..133593f641e 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -319,24 +319,20 @@ var/global/list/areas = list() var/global/list/mob/living/forced_ambiance_list = new /area/Entered(A) - if(!istype(A,/mob/living)) return - + if(!istype(A,/mob/living)) + return var/mob/living/L = A - if(!L.lastarea) L.lastarea = get_area(L.loc) - var/area/newarea = get_area(L.loc) var/area/oldarea = L.lastarea - if(oldarea.has_gravity != newarea.has_gravity) - if(newarea.has_gravity == 1 && !MOVING_DELIBERATELY(L)) // Being ready when you change areas allows you to avoid falling. + if(!oldarea || oldarea.has_gravity != has_gravity) + if(has_gravity == 1 && !MOVING_DELIBERATELY(L)) // Being ready when you change areas allows you to avoid falling. thunk(L) L.update_floating() - if(L.ckey) play_ambience(L) do_area_blurb(L) - - L.lastarea = newarea + L.lastarea = src /area/Exited(A) From f64877c6f1313124e298c70ab9f05645678a782c Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Wed, 11 Jan 2023 11:44:13 -0600 Subject: [PATCH 009/239] Readds title to codex entries --- code/modules/codex/entries/_codex_entry.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/codex/entries/_codex_entry.dm b/code/modules/codex/entries/_codex_entry.dm index 34fe9460ace..a8f9032cc7e 100644 --- a/code/modules/codex/entries/_codex_entry.dm +++ b/code/modules/codex/entries/_codex_entry.dm @@ -67,7 +67,7 @@ if(presenting_to.client) . += "Search Codex" . += "List All Entries" - . += "
" + . += "

[name]

" /datum/codex_entry/proc/get_codex_footer(var/mob/presenting_to) . = list() From 77ab19b2a99a5a51a9080e4bd772b2884b45af23 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Thu, 12 Jan 2023 10:32:16 +1100 Subject: [PATCH 010/239] Requested changes to ambience tweaks. --- code/controllers/configuration.dm | 6 +++--- code/controllers/subsystems/ambience.dm | 4 ++-- code/modules/admin/view_variables/vv_set_handlers.dm | 2 +- config/example/config.txt | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 343b07b2c14..2790dc3f305 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -203,7 +203,7 @@ var/global/list/gamemode_cache = list() var/dsay_allowed = 1 var/aooc_allowed = 1 - var/ambient_light = 0 // Whether space turfs have ambient light or not + var/exterior_ambient_light = 0 // The strength of ambient light applied to outside turfs var/law_zero = "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'ALL LAWS OVERRIDDEN#*?&110010" @@ -741,9 +741,9 @@ var/global/list/gamemode_cache = list() config.event_delay_upper[EVENT_LEVEL_MODERATE] = MinutesToTicks(values[2]) config.event_delay_upper[EVENT_LEVEL_MAJOR] = MinutesToTicks(values[3]) - if("ambient_light") + if("exterior_ambient_light") value = text2num(value) - config.ambient_light = value >= 0 ? value : 0 + config.exterior_ambient_light = value >= 0 ? value : 0 if("law_zero") law_zero = value diff --git a/code/controllers/subsystems/ambience.dm b/code/controllers/subsystems/ambience.dm index 1f69d866167..b68c4e918bd 100644 --- a/code/controllers/subsystems/ambience.dm +++ b/code/controllers/subsystems/ambience.dm @@ -47,8 +47,8 @@ SUBSYSTEM_DEF(ambience) if(planet.lightlevel) set_ambient_light(COLOR_WHITE, planet.lightlevel) return TRUE - else if(config.ambient_light) - set_ambient_light(SSskybox.background_color, config.ambient_light) + else if(config.exterior_ambient_light) + set_ambient_light(SSskybox.background_color, config.exterior_ambient_light) return TRUE clear_ambient_light() diff --git a/code/modules/admin/view_variables/vv_set_handlers.dm b/code/modules/admin/view_variables/vv_set_handlers.dm index 87282980aed..8aeff484bae 100644 --- a/code/modules/admin/view_variables/vv_set_handlers.dm +++ b/code/modules/admin/view_variables/vv_set_handlers.dm @@ -155,7 +155,7 @@ if (istext(value) && !color_regex.Find(value)) to_chat(client, "
ambient_light
must be a 6 digit (
#AABBCC
) hexadecimal color string.
") return - T.set_ambient_light(COLOR_WHITE, value) + T.set_ambient_light(value) if ("ambient_light_multiplier") if (!isnum(value)) diff --git a/config/example/config.txt b/config/example/config.txt index 65e82110060..6ccae16a1e9 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -362,8 +362,8 @@ EVENT_CUSTOM_START_MAJOR 80;100 ## Respawn delay in minutes before one may respawn as a crew member. #RESPAWN_DELAY 30 -## Percentile strength of ambient light (such as starlight). 0.5 is 50% lit. -AMBIENT_LIGHT 0 +## Percentile strength of exterior ambient light (such as starlight). 0.5 is 50% lit. +EXTERIOR_AMBIENT_LIGHT 0 ## Defines how Law Zero is phrased. Primarily used in the Malfunction gamemode. From e70b9a24143a193e409dfe45e7a445aa22b4ded3 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Thu, 12 Jan 2023 15:58:24 +1100 Subject: [PATCH 011/239] Makes blood overlay caching a bit more cachey. --- code/game/objects/item.dm | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/code/game/objects/item.dm b/code/game/objects/item.dm index 7bc1e480e84..d15f762cde3 100644 --- a/code/game/objects/item.dm +++ b/code/game/objects/item.dm @@ -675,20 +675,21 @@ var/global/list/slot_flags_enumeration = list( return TRUE -var/global/list/blood_overlay_cache = list() - +var/global/list/_blood_overlay_cache = list() +var/global/list/_item_blood_mask = icon('icons/effects/blood.dmi', "itemblood") /obj/item/proc/generate_blood_overlay(force = FALSE) if(blood_overlay && !force) return - if(global.blood_overlay_cache["[icon]" + icon_state]) - blood_overlay = global.blood_overlay_cache["[icon]" + icon_state] + var/cache_key = "[icon]-[icon_state]" + if(global._blood_overlay_cache[cache_key]) + blood_overlay = global._blood_overlay_cache[cache_key] return var/icon/I = new /icon(icon, icon_state) - I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) //fills the icon_state with white (except where it's transparent) - I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) //adds blood and the remaining white areas become transparant + I.MapColors(0,0,0, 0,0,0, 0,0,0, 1,1,1) // Sets the icon RGB channel to pure white. + I.Blend(global._item_blood_mask, ICON_MULTIPLY) // Masks the blood overlay against the generated mask. blood_overlay = image(I) blood_overlay.appearance_flags |= NO_CLIENT_COLOR|RESET_COLOR - global.blood_overlay_cache["[icon]" + icon_state] = blood_overlay + global._blood_overlay_cache[cache_key] = blood_overlay /obj/item/proc/showoff(mob/user) for(var/mob/M in view(user)) From 37bb975eb5ffa06bbfdc4ccf144136cea8f5ac86 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Wed, 11 Jan 2023 00:51:20 +1100 Subject: [PATCH 012/239] Cleaning up some sprite accessory logic. --- .../preference_setup/general/02_body.dm | 10 ++++---- code/modules/organs/external/head.dm | 24 ++++++++---------- code/modules/species/species.dm | 12 ++------- code/modules/sprite_accessories/_accessory.dm | 25 ++++++++++++++++--- .../sprite_accessories/_accessory_facial.dm | 6 +++-- .../sprite_accessories/_accessory_hair.dm | 6 ++++- .../sprite_accessories/_accessory_markings.dm | 1 - .../sprite_accessories/_accessory_skin.dm | 16 ------------ .../bayliens/skrell/datum/accessory.dm | 6 ----- .../bayliens/tajaran/datum/accessory.dm | 15 ----------- mods/species/neoavians/datum/accessory.dm | 4 --- mods/species/vox/datum/accessories.dm | 8 ------ nebula.dme | 1 - 13 files changed, 48 insertions(+), 86 deletions(-) delete mode 100644 code/modules/sprite_accessories/_accessory_skin.dm diff --git a/code/modules/client/preference_setup/general/02_body.dm b/code/modules/client/preference_setup/general/02_body.dm index 2c45390a448..33196170237 100644 --- a/code/modules/client/preference_setup/general/02_body.dm +++ b/code/modules/client/preference_setup/general/02_body.dm @@ -51,7 +51,7 @@ pref.f_style = accessory break - // Get markings type. + // Get markings type. all_sprite_accessories = decls_repository.get_decls_of_subtype(/decl/sprite_accessory/marking) for(var/marking in pref.body_markings) for(var/accessory in all_sprite_accessories) @@ -308,10 +308,10 @@ for(var/M in all_markings) if(M in pref.body_markings) continue - var/decl/sprite_accessory/S = all_markings[M] - if(is_type_in_list(S, disallowed_markings) || (S.species_allowed && !(mob_species.get_root_species_name() in S.species_allowed)) || (S.subspecies_allowed && !(mob_species.name in S.subspecies_allowed))) - continue - usable_markings += S + var/decl/sprite_accessory/accessory = all_markings[M] + var/decl/bodytype/mob_bodytype = mob_species.get_bodytype_by_name(pref.bodytype) + if(!is_type_in_list(accessory, disallowed_markings) && accessory.accessory_is_available(preference_mob(), mob_species, mob_bodytype.bodytype_flag, pref.gender)) + usable_markings += accessory var/decl/sprite_accessory/new_marking = input(user, "Choose a body marking:", CHARACTER_PREFERENCE_INPUT_TITLE) as null|anything in usable_markings if(new_marking && CanUseTopic(user)) diff --git a/code/modules/organs/external/head.dm b/code/modules/organs/external/head.dm index b16cca2dc67..e6ff11e4c19 100644 --- a/code/modules/organs/external/head.dm +++ b/code/modules/organs/external/head.dm @@ -127,13 +127,11 @@ if(owner.f_style) var/decl/sprite_accessory/facial_hair_style = GET_DECL(owner.f_style) - if(facial_hair_style) - if(!facial_hair_style.species_allowed || (species.get_root_species_name(owner) in facial_hair_style.species_allowed)) - if(!facial_hair_style.subspecies_allowed || (species.name in facial_hair_style.subspecies_allowed)) - var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(owner.facial_hair_colour && facial_hair_style.do_colouration) - facial_s.Blend(owner.facial_hair_colour, facial_hair_style.blend) - res.overlays |= facial_s + if(facial_hair_style?.accessory_is_available(owner, owner.species, owner.bodytype.bodytype_flag, owner.gender)) + var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") + if(owner.facial_hair_colour && facial_hair_style.do_colouration) + facial_s.Blend(owner.facial_hair_colour, facial_hair_style.blend) + res.overlays |= facial_s if(owner.h_style) var/decl/sprite_accessory/hair/hair_style = GET_DECL(owner.h_style) @@ -141,13 +139,11 @@ if(head && (head.flags_inv & BLOCK_HEAD_HAIR)) if(!(hair_style.flags & VERY_SHORT)) hair_style = GET_DECL(/decl/sprite_accessory/hair/short) - if(hair_style) - if(!hair_style.species_allowed || (species.get_root_species_name(owner) in hair_style.species_allowed)) - if(!hair_style.subspecies_allowed || (species.name in hair_style.subspecies_allowed)) - var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") - if(hair_style.do_colouration && hair_colour) - hair_s.Blend(hair_colour, hair_style.blend) - res.overlays |= hair_s + if(hair_style?.accessory_is_available(owner, owner.species, owner.bodytype.bodytype_flag, owner.gender)) + var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") + if(hair_style.do_colouration && hair_colour) + hair_s.Blend(hair_colour, hair_style.blend) + res.overlays |= hair_s for (var/M in markings) var/decl/sprite_accessory/marking/mark_style = GET_DECL(M) diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm index dbeb1d0926d..6629d67f1a8 100644 --- a/code/modules/species/species.dm +++ b/code/modules/species/species.dm @@ -805,11 +805,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/list/all_hairstyles = decls_repository.get_decls_of_subtype(/decl/sprite_accessory/hair) for(var/hairstyle in all_hairstyles) var/decl/sprite_accessory/S = all_hairstyles[hairstyle] - if(check_gender && S.gender && gender != S.gender) - continue - if(S.species_allowed && !(get_root_species_name() in S.species_allowed)) - continue - if(S.subspecies_allowed && !(name in S.subspecies_allowed)) + if(!S.accessory_is_available(null, src, null, (check_gender && gender))) continue ADD_SORTED(hair_style_by_gender, hairstyle, /proc/cmp_text_asc) hair_style_by_gender[hairstyle] = S @@ -834,11 +830,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 var/list/all_facial_styles = decls_repository.get_decls_of_subtype(/decl/sprite_accessory/facial_hair) for(var/facialhairstyle in all_facial_styles) var/decl/sprite_accessory/S = all_facial_styles[facialhairstyle] - if(check_gender && S.gender && gender != S.gender) - continue - if(S.species_allowed && !(get_root_species_name() in S.species_allowed)) - continue - if(S.subspecies_allowed && !(name in S.subspecies_allowed)) + if(!S.accessory_is_available(null, src, null, (check_gender && gender))) continue ADD_SORTED(facial_hair_style_by_gender, facialhairstyle, /proc/cmp_text_asc) facial_hair_style_by_gender[facialhairstyle] = S diff --git a/code/modules/sprite_accessories/_accessory.dm b/code/modules/sprite_accessories/_accessory.dm index 9ac2a1d86b8..8dcf3295dc3 100644 --- a/code/modules/sprite_accessories/_accessory.dm +++ b/code/modules/sprite_accessories/_accessory.dm @@ -21,8 +21,27 @@ var/icon // the icon file the accessory is located in var/icon_state // the icon_state of the accessory var/gender = null // Restricted to specific genders. null matches any - var/list/species_allowed = list(SPECIES_HUMAN) // Restrict some styles to specific bodytypes - var/list/subspecies_allowed // Restrict some styles to specific species names + var/list/species_allowed = list(SPECIES_HUMAN) // Restrict some styles to specific root species names + var/list/subspecies_allowed // Restrict some styles to specific species names, irrespective of root species name + var/bodytypes_allowed = null // Restrict some styles to specific bodytypes + var/bodytypes_denied = null // Restrict some styles to specific bodytypes var/do_colouration = 1 // Whether or not the accessory can be affected by colouration var/blend = ICON_ADD - var/flags = 0 \ No newline at end of file + var/flags = 0 + +/decl/sprite_accessory/proc/accessory_is_available(var/mob/owner, var/decl/species/species, var/bodytype_flags, var/check_gender) + if(!isnull(check_gender) && gender && check_gender != gender) + return FALSE + if(species) + var/species_is_permitted = TRUE + if(species_allowed) + species_is_permitted = (species.get_root_species_name(owner) in species_allowed) + if(subspecies_allowed) + species_is_permitted = (species.name in subspecies_allowed) + if(!species_is_permitted) + return FALSE + if(!isnull(bodytypes_allowed) && !(bodytypes_allowed & bodytype_flags)) + return FALSE + if(!isnull(bodytypes_denied) && (bodytypes_denied & bodytype_flags)) + return FALSE + return TRUE diff --git a/code/modules/sprite_accessories/_accessory_facial.dm b/code/modules/sprite_accessories/_accessory_facial.dm index fd089367336..cdc08e4873d 100644 --- a/code/modules/sprite_accessories/_accessory_facial.dm +++ b/code/modules/sprite_accessories/_accessory_facial.dm @@ -14,7 +14,10 @@ name = "Shaved" icon_state = "bald" gender = null - species_allowed = list(SPECIES_HUMAN) + species_allowed = null + subspecies_allowed = null + bodytypes_allowed = null + bodytypes_denied = null /decl/sprite_accessory/facial_hair/watson name = "Watson Mustache" @@ -55,7 +58,6 @@ /decl/sprite_accessory/facial_hair/elvis name = "Elvis Sideburns" icon_state = "facial_elvis" - species_allowed = list(SPECIES_HUMAN) /decl/sprite_accessory/facial_hair/abe name = "Abraham Lincoln Beard" diff --git a/code/modules/sprite_accessories/_accessory_hair.dm b/code/modules/sprite_accessories/_accessory_hair.dm index 5d1d34d032b..ae3cf5bba39 100644 --- a/code/modules/sprite_accessories/_accessory_hair.dm +++ b/code/modules/sprite_accessories/_accessory_hair.dm @@ -12,8 +12,12 @@ /decl/sprite_accessory/hair/bald name = "Bald" icon_state = "bald" - species_allowed = list(SPECIES_HUMAN) flags = VERY_SHORT | HAIR_BALD + gender = null + species_allowed = null + subspecies_allowed = null + bodytypes_allowed = null + bodytypes_denied = null /decl/sprite_accessory/hair/short name = "Short Hair" // try to capatilize the names please~ diff --git a/code/modules/sprite_accessories/_accessory_markings.dm b/code/modules/sprite_accessories/_accessory_markings.dm index ddb1115ab34..bf2ab7a2f40 100644 --- a/code/modules/sprite_accessories/_accessory_markings.dm +++ b/code/modules/sprite_accessories/_accessory_markings.dm @@ -5,7 +5,6 @@ do_colouration = 1 //Almost all of them have it, COLOR_ADD //Empty list is unrestricted. Should only restrict the ones that make NO SENSE on other species, //like IPC optics overlay stuff. - species_allowed = list(SPECIES_HUMAN) var/layer_blend = ICON_OVERLAY var/body_parts = list() //A list of bodyparts this covers, in organ_tag defines //Reminder: BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_CHEST,BP_GROIN,BP_HEAD diff --git a/code/modules/sprite_accessories/_accessory_skin.dm b/code/modules/sprite_accessories/_accessory_skin.dm deleted file mode 100644 index 7036d2e4610..00000000000 --- a/code/modules/sprite_accessories/_accessory_skin.dm +++ /dev/null @@ -1,16 +0,0 @@ - -//skin styles - WIP -//going to have to re-integrate this with surgery -//let the icon_state hold an icon preview for now -/decl/sprite_accessory/skin - icon = 'icons/mob/human_races/species/human/body_female.dmi' - -/decl/sprite_accessory/skin/human - name = "Default human skin" - icon_state = "default" - species_allowed = list(SPECIES_HUMAN) - -/decl/sprite_accessory/skin/human_tatt01 - name = "Tatt01 human skin" - icon_state = "tatt1" - species_allowed = list(SPECIES_HUMAN) diff --git a/mods/species/bayliens/skrell/datum/accessory.dm b/mods/species/bayliens/skrell/datum/accessory.dm index 01649e06395..6bcff595dc3 100644 --- a/mods/species/bayliens/skrell/datum/accessory.dm +++ b/mods/species/bayliens/skrell/datum/accessory.dm @@ -1,9 +1,3 @@ -/decl/sprite_accessory/skin/skrell - name = "Default skrell skin" - icon_state = "default" - icon = 'mods/species/bayliens/skrell/icons/body/body.dmi' - species_allowed = list(SPECIES_SKRELL) - /decl/sprite_accessory/hair/skrell name = "Kanin - Very Short Headtails" icon = 'mods/species/bayliens/skrell/icons/body/hair.dmi' diff --git a/mods/species/bayliens/tajaran/datum/accessory.dm b/mods/species/bayliens/tajaran/datum/accessory.dm index d2057a82a6d..81ec0d26662 100644 --- a/mods/species/bayliens/tajaran/datum/accessory.dm +++ b/mods/species/bayliens/tajaran/datum/accessory.dm @@ -1,13 +1,4 @@ //Hairstyles - -/decl/sprite_accessory/facial_hair/shaved/Initialize() - . = ..() - species_allowed |= SPECIES_TAJARA - -/decl/sprite_accessory/hair/bald/Initialize() - . = ..() - species_allowed |= SPECIES_TAJARA - /decl/sprite_accessory/hair/taj name = "Tajaran Rattail" icon_state = "hair_rattail" @@ -139,12 +130,6 @@ name = "Tajaran Small Moustache" icon_state = "facial_smallstache" -/decl/sprite_accessory/skin/tajaran - name = "Default Tajaran skin" - icon_state = "default" - icon = 'mods/species/bayliens/tajaran/icons/body.dmi' - species_allowed = list(SPECIES_TAJARA) - /decl/sprite_accessory/marking/tajaran name = "Tajaran Wide Ears" icon = 'mods/species/bayliens/tajaran/icons/markings.dmi' diff --git a/mods/species/neoavians/datum/accessory.dm b/mods/species/neoavians/datum/accessory.dm index bdd6cca21ef..7e05d3c0ec4 100644 --- a/mods/species/neoavians/datum/accessory.dm +++ b/mods/species/neoavians/datum/accessory.dm @@ -133,7 +133,3 @@ name = "Wing Feathers, Additive (Right)" icon_state = "wing_feathers-add" blend = ICON_ADD - -/decl/sprite_accessory/hair/bald/Initialize() - . = ..() - LAZYADD(species_allowed, SPECIES_AVIAN) diff --git a/mods/species/vox/datum/accessories.dm b/mods/species/vox/datum/accessories.dm index 8aa3c9809ce..462d2677b56 100644 --- a/mods/species/vox/datum/accessories.dm +++ b/mods/species/vox/datum/accessories.dm @@ -1,11 +1,3 @@ -/decl/sprite_accessory/hair/bald/Initialize() - . = ..() - LAZYDISTINCTADD(species_allowed, SPECIES_VOX) - -/decl/sprite_accessory/facial_hair/shaved/Initialize() - . = ..() - LAZYDISTINCTADD(species_allowed, SPECIES_VOX) - /decl/sprite_accessory/hair/vox name = "Long Vox Quills" icon = 'mods/species/vox/icons/body/soldier/hair.dmi' diff --git a/nebula.dme b/nebula.dme index 511c4740be7..56a5e2f596b 100644 --- a/nebula.dme +++ b/nebula.dme @@ -3265,7 +3265,6 @@ #include "code\modules\sprite_accessories\_accessory_facial.dm" #include "code\modules\sprite_accessories\_accessory_hair.dm" #include "code\modules\sprite_accessories\_accessory_markings.dm" -#include "code\modules\sprite_accessories\_accessory_skin.dm" #include "code\modules\status_conditions\_status.dm" #include "code\modules\status_conditions\_status_markers.dm" #include "code\modules\status_conditions\status_counters_simple.dm" From 769e4b7178b4f65ef35cdba6602f6409bfbf4e7b Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Tue, 8 Nov 2022 17:06:36 +1100 Subject: [PATCH 013/239] Backported Devchord's ministation improvements. --- maps/ministation/ministation.dmm | 19785 +++++++++-------- maps/ministation/ministation_areas.dm | 22 +- maps/ministation/ministation_define.dm | 26 +- maps/ministation/ministation_shuttles.dm | 50 +- maps/ministation/ministation_unit_testing.dm | 3 +- maps/ministation/space.dmm | 7886 +++---- 6 files changed, 14536 insertions(+), 13236 deletions(-) diff --git a/maps/ministation/ministation.dmm b/maps/ministation/ministation.dmm index ecd5be3df5b..ed4f9acccac 100644 --- a/maps/ministation/ministation.dmm +++ b/maps/ministation/ministation.dmm @@ -635,33 +635,19 @@ }, /turf/simulated/floor/carpet/blue, /area/ministation/bridge) -"bJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled, -/area/ministation/engine) "bK" = ( /obj/machinery/alarm{ dir = 4; pixel_x = -23 }, /obj/machinery/keycard_auth{ - dir = 1 + pixel_y = -24 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, /turf/simulated/floor/tiled, /area/ministation/bridge) -"bL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/ministation/engine) "bM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -694,7 +680,7 @@ /area/ministation/bridge) "bQ" = ( /obj/machinery/keycard_auth{ - dir = 1 + pixel_y = -24 }, /obj/machinery/light{ dir = 4; @@ -818,6 +804,12 @@ /obj/item/storage/ore, /turf/simulated/floor/airless, /area/space) +"cf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) "cg" = ( /obj/machinery/light{ dir = 8 @@ -880,7 +872,9 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/hall/n) "cs" = ( @@ -939,7 +933,20 @@ /turf/simulated/wall, /area/ministation/cargo) "cA" = ( -/obj/machinery/door/airlock/external/glass, +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "mining_airlock_interior" + }, +/obj/machinery/button/access/interior{ + id_tag = "cargo_airlock"; + name = "interior access button"; + pixel_x = 20; + pixel_y = -10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plating, /area/ministation/cargo) "cB" = ( @@ -947,6 +954,9 @@ icon_state = "4-8" }, /obj/random/trash, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plating, /area/ministation/maint/sw) "cC" = ( @@ -994,24 +1004,14 @@ /obj/random/trash, /turf/simulated/floor/plating, /area/ministation/maint/w) -"cI" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/camera/network/engineering, -/turf/simulated/floor/tiled/techfloor/grid, -/area/ministation/engine) "cJ" = ( /turf/simulated/floor/plating, /area/ministation/maint/ne) "cK" = ( -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - name = "External Airlock Hatch"; - req_access = list("ACCESS_EXTERNAL") - }, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/plating, -/area/ministation/maint/ne) +/area/ministation/ai_sat) "cL" = ( /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, @@ -1058,6 +1058,9 @@ /obj/machinery/light/small{ dir = 8 }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "mining_vent" + }, /turf/simulated/floor/plating, /area/ministation/cargo) "cU" = ( @@ -1345,22 +1348,39 @@ }, /turf/simulated/floor/plating, /area/ministation/maint/nw) -"dM" = ( -/obj/structure/sign/warning/radioactive{ - dir = 4 +"dL" = ( +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 0; + id_tag = "sat1_airlock"; + pixel_y = 24; + tag_airpump = "sat1_vent"; + tag_chamber_sensor = "sat1_sensor"; + tag_exterior_door = "sat1_airlock_exterior"; + tag_interior_door = "sat1_airlock_interior" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "sat1_vent" }, -/turf/simulated/wall/r_wall/prepainted, -/area/ministation/engine) +/obj/machinery/airlock_sensor{ + id_tag = "sat1_sensor"; + pixel_y = 20 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "dN" = ( /obj/structure/cable{ icon_state = "4-8" }, /obj/machinery/door/airlock/hatch/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plating, /area/ministation/maint/nw) "dO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 }, /turf/simulated/floor/plating, /area/ministation/maint/w) @@ -1414,6 +1434,11 @@ /obj/structure/cable, /turf/simulated/floor/plating, /area/ministation/maint/sec) +"dW" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/plating, +/area/ministation/maint/nw) "dX" = ( /obj/machinery/papershredder, /turf/simulated/floor/tiled, @@ -1429,6 +1454,13 @@ }, /turf/simulated/floor/tiled, /area/ministation/security) +"ea" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 2 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) "eb" = ( /obj/structure/cable, /obj/structure/cable{ @@ -1501,13 +1533,6 @@ }, /turf/simulated/floor, /area/ministation/science) -"ei" = ( -/obj/machinery/door/airlock/external/shuttle{ - autoset_access = 0; - name = "Arrivals Shuttle Airlock" - }, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) "ej" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, @@ -1515,6 +1540,9 @@ "ek" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "el" = ( @@ -1545,8 +1573,8 @@ /turf/simulated/floor/plating, /area/ministation/hall/s) "eq" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6 +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 }, /turf/simulated/floor/plating, /area/ministation/maint/w) @@ -1602,6 +1630,15 @@ }, /turf/simulated/wall/r_wall, /area/ministation/security) +"ex" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) "ez" = ( /obj/structure/bed, /turf/simulated/floor, @@ -1611,6 +1648,10 @@ /obj/machinery/faxmachine, /turf/simulated/floor/tiled, /area/ministation/court) +"eC" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/court) "eD" = ( /obj/machinery/light{ dir = 4; @@ -1629,6 +1670,7 @@ dir = 4; pixel_x = -22 }, +/obj/vehicle/train/cargo/engine, /turf/simulated/floor/tiled, /area/ministation/cargo) "eF" = ( @@ -1644,6 +1686,23 @@ }, /turf/simulated/floor/tiled, /area/ministation/cargo) +"eJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/wall/r_wall, +/area/ministation/ai_sat) +"eK" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "stern_engineering_vent" + }, +/turf/simulated/floor/plating, +/area/ministation/engine) "eL" = ( /obj/machinery/light{ dir = 1 @@ -1669,6 +1728,15 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) +"eP" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/sw) "eQ" = ( /obj/machinery/door/airlock/hatch/maintenance, /obj/structure/cable{ @@ -1773,7 +1841,7 @@ dir = 8 }, /turf/simulated/floor/tiled, -/area/ministation/court) +/area/ministation/disused_office) "fb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -1870,6 +1938,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, /area/ministation/cargo) "fo" = ( @@ -1892,6 +1961,11 @@ /obj/machinery/status_display/supply_display{ pixel_y = -32 }, +/obj/machinery/atmospherics/portables_connector{ + pixel_x = -3; + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/tiled, /area/ministation/cargo) "fr" = ( @@ -1993,6 +2067,15 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) +"fB" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) "fC" = ( /obj/machinery/power/apc{ areastring = null; @@ -2025,6 +2108,14 @@ }, /turf/simulated/floor/tiled, /area/ministation/cargo) +"fG" = ( +/obj/machinery/door/airlock/glass/command{ + autoset_access = 0; + name = "Telecommunications glass airlock"; + req_access = list("ACCESS_TELECOMS") + }, +/turf/simulated/floor/plating, +/area/ministation/maint/w) "fH" = ( /obj/effect/floor_decal/industrial/warning{ dir = 9 @@ -2035,27 +2126,23 @@ /turf/simulated/floor/tiled, /area/ministation/security) "fI" = ( -/obj/machinery/door/airlock/glass/security{ - autoset_access = 0; - name = "Brig Access Airlock"; - req_access = list(list("ACCESS_SECURITY","ACCESS_LAWYER")) - }, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/security) -"fJ" = ( /obj/machinery/door/firedoor{ dir = 8 }, /obj/machinery/door/airlock/glass/security{ - autoset_access = 0; name = "Brig Access Airlock"; - req_access = list(list("ACCESS_SECURITY","ACCESS_LAWYER")) + req_access = list(list("ACCESS_SECURITY","ACCESS_LAWYER")); + autoset_access = 0 }, /turf/simulated/floor/tiled, -/area/ministation/security) +/area/ministation/court) +"fJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) "fK" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2268,11 +2355,17 @@ "gk" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "gl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "go" = ( @@ -2295,6 +2388,12 @@ /obj/machinery/fabricator, /turf/simulated/floor/tiled, /area/ministation/cargo) +"gr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "gs" = ( /obj/abstract/landmark/start{ name = "Cargo Technician" @@ -2353,6 +2452,13 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) +"gA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) "gB" = ( /obj/machinery/door/airlock/glass/command{ autoset_access = 0; @@ -2473,7 +2579,6 @@ /obj/machinery/door/firedoor{ dir = 8 }, -/obj/machinery/door/airlock/glass/mining, /turf/simulated/floor/tiled, /area/ministation/cargo) "gP" = ( @@ -2506,6 +2611,25 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/ministation/hall/n) +"gU" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "pqm_airlock_interior" + }, +/obj/machinery/button/access/interior{ + id_tag = "pqm_airlock"; + name = "interior access button"; + pixel_x = 10; + pixel_y = 20 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/sw) "gV" = ( /obj/machinery/light/small{ dir = 8 @@ -2520,12 +2644,6 @@ /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /turf/simulated/floor/tiled, /area/ministation/security) -"gY" = ( -/obj/structure/sign/warning/radioactive{ - dir = 8 - }, -/turf/simulated/wall, -/area/ministation/engine) "ha" = ( /obj/machinery/firealarm{ dir = 8; @@ -2569,9 +2687,12 @@ /turf/simulated/floor/tiled, /area/ministation/security) "he" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/plating, -/area/ministation/hall/n) +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/ministation/disused) "hf" = ( /obj/structure/table, /obj/item/wrench, @@ -2592,6 +2713,15 @@ /obj/structure/closet/l3closet/scientist, /turf/simulated/floor/tiled/white, /area/ministation/science) +"hi" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) "hj" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2617,7 +2747,10 @@ /turf/simulated/floor/tiled/dark, /area/ministation/science) "ho" = ( -/obj/vehicle/train/cargo/engine, +/obj/machinery/atmospherics/portables_connector{ + pixel_x = -3 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/tiled, /area/ministation/cargo) "hp" = ( @@ -2636,10 +2769,10 @@ pixel_y = -32 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/tiled, @@ -2652,10 +2785,6 @@ dir = 8 }, /obj/effect/floor_decal/corner/paleblue/full, -/obj/machinery/door/airlock/medical{ - id_tag = "medleave"; - name = "medbay airlock" - }, /turf/simulated/floor/tiled/white, /area/ministation/medical) "hs" = ( @@ -2735,13 +2864,6 @@ }, /turf/simulated/floor/tiled, /area/ministation/security) -"hy" = ( -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1; - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/engine) "hz" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 27 @@ -2766,7 +2888,7 @@ /area/ministation/detective) "hC" = ( /obj/structure/table/woodentable, -/obj/item/camera/detective, +/obj/item/camera, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/item/taperecorder, /obj/item/folder/yellow, @@ -2779,6 +2901,13 @@ }, /turf/simulated/floor/carpet/red, /area/ministation/detective) +"hE" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "hF" = ( /obj/machinery/button/blast_door{ id_tag = "scishut"; @@ -2888,8 +3017,12 @@ pixel_y = 30 }, /obj/machinery/door/airlock/external/bolted{ - id_tag = "cargo_bay_door"; - name = "Cargo Docking Airlock" + id_tag = "cargo_airlock_interior"; + name = "Cargo Docking Airlock"; + autoset_access = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, /turf/simulated/floor/plating, /area/ministation/cargo) @@ -2897,11 +3030,18 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "hR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 8 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "hS" = ( @@ -2909,6 +3049,9 @@ /obj/structure/closet/crate, /obj/item/stack/material/ore/slag, /obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "hT" = ( @@ -2918,6 +3061,9 @@ /obj/machinery/camera/network/mining{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "hU" = ( @@ -3008,9 +3154,13 @@ /turf/simulated/floor/carpet/red, /area/ministation/detective) "ie" = ( -/obj/effect/floor_decal/industrial/loading, -/turf/simulated/floor/reinforced/airless, -/area/ministation/engine) +/obj/machinery/door/airlock/external/bolted{ + id_tag = "cargo_airlock_exterior"; + name = "Cargo Docking Airlock"; + autoset_access = 0 + }, +/turf/simulated/floor/plating, +/area/ministation/cargo) "if" = ( /obj/machinery/door/window/eastright, /obj/machinery/door/blast/shutters/open{ @@ -3293,6 +3443,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 8 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "iV" = ( @@ -3300,6 +3454,9 @@ /obj/structure/closet/crate, /obj/item/stack/material/ore/glass, /obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "iW" = ( @@ -3309,13 +3466,16 @@ }, /obj/structure/closet/crate, /obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "iX" = ( /turf/simulated/wall, /area/ministation/commons) "iY" = ( -/obj/machinery/door/window/eastright, +/obj/machinery/door/airlock/double/glass/civilian, /turf/simulated/floor/tiled, /area/ministation/commons) "iZ" = ( @@ -3347,6 +3507,10 @@ }, /turf/simulated/floor/tiled, /area/ministation/security) +"jc" = ( +/obj/effect/shuttle_landmark/escape_shuttle/station, +/turf/space, +/area/space) "jd" = ( /obj/machinery/computer/station_alert/security{ dir = 8 @@ -3642,25 +3806,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/wood, /area/ministation/detective) -"jM" = ( -/obj/machinery/door/airlock/hatch{ - id_tag = "engine_access_hatch"; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/engine) -"jN" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/ministation/engine) "jO" = ( /obj/structure/cable{ icon_state = "4-8" @@ -3718,25 +3863,39 @@ pixel_y = -30 }, /obj/machinery/door/airlock/external/bolted{ - id_tag = "cargo_bay_door"; - name = "Cargo Docking Airlock" + id_tag = "cargo_airlock_interior"; + name = "Cargo Docking Airlock"; + autoset_access = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, /turf/simulated/floor/plating, /area/ministation/cargo) "jV" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/light, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 8 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "jW" = ( /obj/structure/closet/crate, /obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "jX" = ( /obj/structure/closet/crate, /obj/item/stack/material/ore/iron, /obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, /turf/simulated/floor/tiled, /area/ministation/cargo) "jY" = ( @@ -3848,6 +4007,13 @@ }, /turf/simulated/floor/plating, /area/ministation/maint/detective) +"km" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor, +/area/ministation/atmospherics) "kn" = ( /obj/effect/floor_decal/industrial/warning{ dir = 9 @@ -3998,6 +4164,17 @@ /obj/machinery/light, /turf/simulated/floor/tiled, /area/ministation/commons) +"kG" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) +"kH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor, +/area/ministation/atmospherics) "kI" = ( /obj/abstract/landmark/start{ name = "Assistant" @@ -4032,7 +4209,6 @@ /turf/simulated/floor/tiled, /area/ministation/commons) "kK" = ( -/obj/machinery/door/window/eastleft, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -4143,10 +4319,12 @@ /turf/simulated/floor/tiled/white, /area/ministation/science) "kX" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/emergency, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/abstract/landmark{ + name = "Observer-Start" + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) "kY" = ( /obj/structure/closet, /obj/item/clothing/mask/gas/clown_hat, @@ -4166,7 +4344,10 @@ /turf/simulated/floor/plating, /area/ministation/hall/w) "lb" = ( -/obj/structure/reagent_dispensers/watertank, +/obj/machinery/atmospherics/portables_connector{ + pixel_x = -3 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/plating, /area/ministation/maint/w) "lc" = ( @@ -4179,14 +4360,14 @@ /turf/simulated/floor/plating, /area/ministation/maint/w) "ld" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/random/trash, /obj/random/trash, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, /turf/simulated/floor/plating, /area/ministation/maint/w) "le" = ( @@ -4256,8 +4437,8 @@ /turf/simulated/floor/plating, /area/ministation/ai_sat) "ln" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /turf/simulated/floor/tiled, /area/ministation/engine) "lo" = ( @@ -4302,16 +4483,6 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) -"lu" = ( -/obj/machinery/door/airlock/hatch{ - id_tag = "engine_access_hatch"; - locked = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/engine) "lv" = ( /obj/structure/closet/emcloset, /obj/effect/floor_decal/industrial/warning{ @@ -4429,20 +4600,46 @@ dir = 1 }, /obj/structure/closet/crate/bin/ministation, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/hall/w) "lL" = ( /obj/machinery/vending/snack, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/hall/w) "lM" = ( /obj/machinery/vending/cola, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/hall/w) "lN" = ( /obj/machinery/space_heater, /turf/simulated/floor/plating, /area/ministation/maint/w) +"lO" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "sat1_airlock_exterior" + }, +/obj/machinery/button/access/interior{ + id_tag = "sat1_airlock"; + name = "exterior access button"; + pixel_x = -10; + pixel_y = 20; + command = "cycle_exterior" + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "lP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -4466,6 +4663,12 @@ /obj/random/gloves, /turf/simulated/floor/plating, /area/ministation/maint/w) +"lS" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "lT" = ( /obj/machinery/firealarm{ dir = 8; @@ -4508,6 +4711,7 @@ /turf/simulated/floor/tiled, /area/ministation/commons) "lY" = ( +/obj/structure/closet/wardrobe/mixed, /turf/simulated/floor/tiled, /area/ministation/commons) "lZ" = ( @@ -4593,17 +4797,10 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/w) -"ml" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/pump, -/obj/effect/engine_setup/pump_max, -/turf/simulated/floor/tiled, -/area/ministation/engine) "mo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plating, /area/ministation/maint/w) "mp" = ( @@ -4738,9 +4935,11 @@ /turf/simulated/floor/tiled/white, /area/ministation/science) "mI" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor, -/area/ministation/science) +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 2 + }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) "mJ" = ( /turf/simulated/floor/reinforced, /area/ministation/science) @@ -4760,20 +4959,14 @@ /obj/machinery/suit_cycler/ministation, /turf/simulated/floor/tiled, /area/ministation/eva) -"mN" = ( -/obj/machinery/door/airlock/external/escapepod{ - id_tag = "escape_pod_1_berth_hatch"; - name = "Escape Shuttle Docking Airlock" - }, -/turf/simulated/floor/plating, -/area/ministation/hall/w) "mO" = ( +/obj/abstract/landmark/latejoin, /turf/simulated/floor/plating, /area/ministation/hall/w) "mP" = ( -/obj/machinery/door/airlock/external/glass{ - autoset_access = 0; - name = "Dock Airlock" +/obj/machinery/door/airlock/external{ + name = "Arrival Airlock"; + autoset_access = 0 }, /turf/simulated/floor/plating, /area/ministation/hall/w) @@ -4785,11 +4978,26 @@ /obj/effect/floor_decal/industrial/loading{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/hall/w) "mS" = ( /turf/simulated/floor/tiled, /area/ministation/hall/w) +"mV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"mW" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 5 + }, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/tiled, +/area/ministation/cargo) "mY" = ( /obj/machinery/atmospherics/portables_connector{ dir = 8 @@ -4798,7 +5006,7 @@ /turf/simulated/floor/plating, /area/ministation/maint/w) "mZ" = ( -/obj/item/twohanded/spear, +/obj/machinery/network/relay, /turf/simulated/floor/plating, /area/ministation/maint/w) "na" = ( @@ -5029,13 +5237,17 @@ }, /obj/item/clothing/glasses/meson, /obj/item/flashlight, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/plating, /area/ministation/maint/w) "nF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/random/trash, +/obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/plating, /area/ministation/maint/w) "nI" = ( @@ -5230,12 +5442,14 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ +/obj/machinery/embedded_controller/radio/airlock/docking_port{ dir = 4; - frequency = null; - id_tag = "escape_pod_1_berth"; - pixel_x = -30; - tag_door = "escape_pod_1_berth_hatch" + id_tag = "station1"; + tag_airpump = "escape1_vent"; + tag_chamber_sensor = "escape1_sensor"; + tag_exterior_door = "escape1_airlock_exterior"; + tag_interior_door = "escape1_airlock_interior"; + pixel_x = -20 }, /turf/simulated/floor/tiled, /area/ministation/hall/w) @@ -5287,12 +5501,10 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plating, /area/ministation/maint/w) "on" = ( @@ -5440,6 +5652,9 @@ /obj/structure/extinguisher_cabinet{ pixel_x = 27 }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, /turf/simulated/floor/tiled, /area/ministation/hall/w) "oK" = ( @@ -5447,6 +5662,10 @@ dir = 4; pixel_x = -22 }, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 8 + }, /turf/simulated/floor/plating, /area/ministation/hall/w) "oL" = ( @@ -5460,6 +5679,9 @@ dir = 8; pixel_x = 24 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, /turf/simulated/floor/plating, /area/ministation/janitor) "oN" = ( @@ -5579,6 +5801,9 @@ /obj/machinery/light{ dir = 4 }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/ministation/hall/w) "pi" = ( @@ -5590,6 +5815,9 @@ /obj/structure/cable{ icon_state = "0-4" }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/plating, /area/ministation/hall/w) "pj" = ( @@ -5600,6 +5828,10 @@ icon_state = "1-4" }, /obj/machinery/light/small, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/plating, /area/ministation/maint/w) "pk" = ( @@ -5655,6 +5887,13 @@ /obj/item/grenade/chem_grenade/cleaner, /turf/simulated/floor/tiled, /area/ministation/janitor) +"pp" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/ne) "pq" = ( /obj/machinery/atmospherics/portables_connector{ dir = 1 @@ -6053,6 +6292,13 @@ /obj/effect/wallframe_spawn/no_grille, /turf/simulated/floor/tiled, /area/ministation/eva) +"qj" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/w) "qk" = ( /turf/simulated/wall, /area/ministation/hall/e) @@ -6109,9 +6355,10 @@ dir = 8 }, /obj/effect/floor_decal/corner/paleblue/full, -/obj/machinery/door/airlock/medical{ - id_tag = "medleave"; - name = "medbay airlock" +/obj/machinery/door/airlock/double/medical{ + name = "medbay airlock"; + autoset_access = 0; + id_tag = "medleave" }, /turf/simulated/floor/tiled/white, /area/ministation/medical) @@ -6479,6 +6726,9 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 2 + }, /turf/simulated/floor/tiled, /area/ministation/hall/w) "rr" = ( @@ -6577,6 +6827,13 @@ }, /turf/simulated/floor/tiled, /area/ministation/eva) +"rE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) "rF" = ( /obj/item/soap{ icon_state = "soap-oval" @@ -6706,6 +6963,9 @@ "rW" = ( /obj/machinery/light, /obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/hall/w) "rX" = ( @@ -6713,6 +6973,9 @@ dir = 1; pixel_y = -22 }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/hall/w) "rY" = ( @@ -6799,9 +7062,9 @@ id_tag = "quarantine"; name = "quarantine shutters" }, -/obj/machinery/door/airlock/medical{ - autoset_access = 0; - name = "Medbay Lobby airlock" +/obj/machinery/door/airlock/double/medical{ + name = "Medbay Lobby airlock"; + autoset_access = 0 }, /turf/simulated/floor/tiled/white, /area/ministation/medical) @@ -6813,10 +7076,6 @@ id_tag = "quarantine"; name = "quarantine shutters" }, -/obj/machinery/door/airlock/medical{ - autoset_access = 0; - name = "Medbay Lobby airlock" - }, /turf/simulated/floor/tiled/white, /area/ministation/medical) "sk" = ( @@ -6942,16 +7201,6 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/e) -"sE" = ( -/obj/machinery/emitter{ - anchored = 1; - id_tag = "EngineEmitter"; - state = 2 - }, -/obj/structure/cable, -/obj/machinery/power/terminal, -/turf/simulated/floor/tiled, -/area/ministation/engine) "sF" = ( /obj/machinery/light{ dir = 1 @@ -7782,13 +8031,6 @@ /obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled, /area/ministation/hall/w) -"uG" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/engineering, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) "uI" = ( /turf/simulated/wall/r_wall, /area/ministation/hop) @@ -8122,6 +8364,9 @@ /turf/simulated/floor/tiled/white, /area/ministation/medical) "vI" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, /obj/machinery/computer/modular/preset/engineering{ dir = 8 }, @@ -8309,6 +8554,18 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/s) +"wf" = ( +/obj/effect/decal/cleanable/filth, +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/ministation/disused) "wh" = ( /obj/machinery/door/firedoor{ dir = 8 @@ -9090,6 +9347,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/structure/closet/wardrobe/mixed, /turf/simulated/floor/tiled/white, /area/ministation/medical) "yg" = ( @@ -9110,16 +9368,6 @@ }, /turf/simulated/floor/tiled/white, /area/ministation/medical) -"yi" = ( -/turf/simulated/shuttle/wall, -/area/ministation/arrival_shuttle) -"yj" = ( -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) -"yk" = ( -/obj/structure/shuttle/window, -/turf/simulated/floor/shuttle/black, -/area/ministation/arrival_shuttle) "yl" = ( /obj/structure/displaycase, /obj/item/clothing/mask/gas/owl_mask{ @@ -9327,51 +9575,37 @@ }, /turf/simulated/floor/tiled/white, /area/ministation/medical) -"yL" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) -"yM" = ( -/obj/machinery/computer/arcade/battle, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) "yN" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/ministation/maint/sw) "yO" = ( -/obj/structure/sign/warning/radioactive{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 }, -/turf/simulated/wall, -/area/ministation/engine) +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"yP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5; + pixel_x = 2; + pixel_y = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "yQ" = ( /obj/structure/cable{ icon_state = "1-4" }, /turf/simulated/floor/airless, /area/space) -"yR" = ( -/obj/machinery/computer/cryopod{ - dir = 2 - }, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) "yS" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) -"yT" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8 +/obj/abstract/landmark{ + name = "bluespace_a" }, -/turf/simulated/floor/airless, -/area/ministation/arrival_shuttle) +/turf/space, +/area/space) "yU" = ( /obj/machinery/alarm{ dir = 4; @@ -9485,6 +9719,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, /area/ministation/cafe) +"zg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) "zh" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/civilian{ @@ -9517,35 +9757,6 @@ /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/ministation/hydro) -"zl" = ( -/obj/structure/table/reinforced, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) -"zm" = ( -/obj/structure/bed/chair/shuttle/white{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) -"zo" = ( -/obj/structure/bed/chair/shuttle/white{ - dir = 8 - }, -/obj/abstract/landmark/latejoin, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) -"zp" = ( -/obj/structure/shuttle/engine/heater{ - dir = 4 - }, -/obj/structure/window/borosilicate_reinforced{ - dir = 8 - }, -/turf/simulated/floor/airless, -/area/ministation/arrival_shuttle) "zq" = ( /obj/structure/cable{ icon_state = "1-2" @@ -9713,22 +9924,11 @@ "zQ" = ( /turf/simulated/wall, /area/ministation/hydro) -"zR" = ( -/obj/machinery/computer/modular/preset/civilian{ - dir = 4 - }, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) -"zS" = ( -/obj/abstract/landmark{ - name = "Observer-Start" - }, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) "zT" = ( /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plating, /area/ministation/maint/sw) "zU" = ( @@ -9795,16 +9995,17 @@ }, /area/ministation/telecomms) "Ad" = ( -/obj/effect/wallframe_spawn/reinforced, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 2; - icon_state = "pdoor0"; - id_tag = "EngineBlast"; - name = "Engine Monitoring Room Blast Doors"; - opacity = 0 +/obj/structure/rack{ + dir = 8 }, -/turf/simulated/floor/plating, +/obj/item/storage/belt/utility, +/obj/item/wrench, +/obj/item/weldingtool, +/obj/item/clothing/head/welding, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, /area/ministation/engine) "Ae" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -9908,8 +10109,17 @@ /turf/simulated/floor/plating, /area/ministation/maint/sw) "Aq" = ( -/obj/structure/sign/warning/secure_area, -/turf/simulated/wall, +/obj/structure/rack{ + dir = 8 + }, +/obj/item/storage/belt/utility, +/obj/item/wrench, +/obj/item/weldingtool, +/obj/item/clothing/head/welding/engie, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, /area/ministation/engine) "Ar" = ( /obj/structure/lattice, @@ -9919,6 +10129,11 @@ /obj/machinery/atmospherics/pipe/simple/visible, /turf/space, /area/space) +"As" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/tiled, +/area/ministation/engine) "At" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -27 @@ -10028,6 +10243,26 @@ temperature = 263 }, /area/ministation/telecomms) +"AN" = ( +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 0; + id_tag = "pfm_airlock"; + pixel_y = 24; + tag_airpump = "pfm_vent"; + tag_chamber_sensor = "pfm_sensor"; + tag_exterior_door = "pfm_airlock_exterior"; + tag_interior_door = "pfm_airlock_interior" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "pfm_vent" + }, +/obj/machinery/airlock_sensor{ + id_tag = "pfm_sensor"; + pixel_y = 20 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/nw) "AO" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/hatch/maintenance, @@ -10119,9 +10354,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plating, /area/ministation/maint/se) "AZ" = ( @@ -10133,8 +10366,21 @@ /obj/structure/cable{ icon_state = "0-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, /turf/simulated/floor/plating, /area/ministation/cafe) +"Ba" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled, +/area/ministation/cargo) "Bb" = ( /turf/simulated/floor/plating, /area/ministation/maint/se) @@ -10142,6 +10388,9 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, /turf/simulated/floor/plating, /area/ministation/maint/sw) "Bd" = ( @@ -10151,6 +10400,9 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plating, /area/ministation/maint/sw) "Bf" = ( @@ -10163,15 +10415,6 @@ }, /turf/simulated/floor/plating, /area/ministation/maint/sw) -"Bg" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 6 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/engine) "Bh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -10190,6 +10433,17 @@ }, /turf/simulated/wall/r_wall, /area/ministation/ai_sat) +"Bj" = ( +/obj/machinery/airlock_sensor{ + id_tag = "escape3_sensor"; + pixel_y = 20 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "escape1_vent" + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w) "Bl" = ( /obj/structure/rack, /obj/item/beartrap, @@ -10200,7 +10454,18 @@ /obj/machinery/door/airlock/external/glass{ autoset_access = 0; name = "External Airlock Hatch"; - req_access = list("ACCESS_EXTERNAL") + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "sqm_airlock_interior" + }, +/obj/machinery/button/access/interior{ + id_tag = "sqm_airlock"; + name = "interior access button"; + pixel_x = -10; + pixel_y = 20 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, /turf/simulated/floor/plating, /area/ministation/maint/se) @@ -10282,16 +10547,27 @@ /obj/item/flashlight/lamp, /turf/simulated/floor/holofloor/lino, /area/ministation/telecomms) +"Bz" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "sat2_airlock_exterior" + }, +/obj/machinery/button/access/interior{ + id_tag = "sat2_airlock"; + name = "exterior access button"; + pixel_x = -10; + pixel_y = 20; + command = "cycle_exterior" + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "BA" = ( /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/ministation/maint/sw) -"BB" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/ministation/engine) "BC" = ( /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -10338,10 +10614,10 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/airlock, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/door/airlock/double, /turf/simulated/floor/plating, /area/ministation/ai_sat) "BJ" = ( @@ -10374,6 +10650,12 @@ /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/ministation/maint/se) +"BN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "BO" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -10480,6 +10762,23 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/holofloor/lino, /area/ministation/telecomms) +"Ca" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "sqm_airlock_exterior" + }, +/obj/machinery/button/access/interior{ + id_tag = "sqm_airlock"; + name = "exterior access button"; + pixel_x = 10; + pixel_y = 20; + command = "cycle_exterior" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/se) "Cb" = ( /obj/machinery/alarm{ pixel_y = 20 @@ -10572,6 +10871,10 @@ }, /turf/simulated/floor/holofloor/lino, /area/ministation/telecomms) +"Cm" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "Cn" = ( /turf/simulated/wall, /area/ministation/atmospherics) @@ -10757,6 +11060,7 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plating, /area/ministation/maint/sw) "CO" = ( @@ -10858,20 +11162,25 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/w) +"Da" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) +"Db" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) "Dc" = ( /obj/machinery/newscaster{ pixel_y = 32 }, /obj/structure/table, /turf/simulated/floor/carpet/green, -/area/ministation/court) -"Dd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/radiation{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/ministation/engine) +/area/ministation/disused_office) "De" = ( /obj/structure/table, /obj/item/multitool, @@ -10924,6 +11233,14 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/s) +"Dj" = ( +/obj/random/trash, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) "Dk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/camera/autoname{ @@ -11031,7 +11348,16 @@ /obj/machinery/door/airlock/external/glass{ autoset_access = 0; name = "External Airlock Hatch"; - req_access = list("ACCESS_EXTERNAL") + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "pqm_airlock_exterior" + }, +/obj/machinery/button/access/interior{ + id_tag = "pqm_airlock"; + name = "exterior access button"; + pixel_x = -10; + pixel_y = 20; + command = "cycle_exterior" }, /turf/simulated/floor/plating, /area/ministation/maint/sw) @@ -11045,6 +11371,9 @@ /obj/structure/cable{ icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, /turf/simulated/floor/plating, /area/ministation/maint/sw) "Dw" = ( @@ -11061,12 +11390,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/structure/sign/warning/engineering_access{ - pixel_y = -32 - }, /turf/simulated/floor/tiled, /area/ministation/hall/s) "Dy" = ( @@ -11079,11 +11402,15 @@ /obj/structure/cable{ icon_state = "2-8" }, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, /turf/simulated/floor/tiled, /area/ministation/hall/s) +"DA" = ( +/obj/item/radio/intercom{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) "DC" = ( /turf/simulated/floor/tiled, /area/ministation/engine) @@ -11101,14 +11428,34 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/turf/simulated/wall/r_wall, +/turf/simulated/wall, /area/ministation/engine) "DG" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/turf/simulated/wall/r_wall, +/obj/effect/floor_decal/corner/yellow{ + dir = 9 + }, +/turf/simulated/floor/tiled, /area/ministation/hall/s) +"DH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor, +/area/ministation/atmospherics) +"DI" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/nw) "DJ" = ( /obj/structure/cable{ icon_state = "1-2" @@ -11300,7 +11647,6 @@ name = "Engineering RC"; pixel_y = 30 }, -/obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/tiled, /area/ministation/engine) "DZ" = ( @@ -11337,6 +11683,9 @@ /obj/structure/cable{ icon_state = "0-8" }, +/obj/structure/cable{ + icon_state = "4-8" + }, /obj/effect/floor_decal/industrial/warning{ dir = 1 }, @@ -11463,13 +11812,7 @@ /turf/simulated/floor/tiled, /area/ministation/engine) "Ev" = ( -/obj/structure/rack{ - dir = 8 - }, -/obj/item/storage/belt/utility, -/obj/item/wrench, -/obj/item/weldingtool, -/obj/item/clothing/head/welding/engie, +/obj/structure/cable, /turf/simulated/floor/tiled, /area/ministation/engine) "Ew" = ( @@ -11610,10 +11953,6 @@ /obj/structure/sign/warning/engineering_access{ pixel_y = -32 }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, /turf/simulated/floor/tiled, /area/ministation/hall/s) "EU" = ( @@ -11654,8 +11993,6 @@ dir = 8; icon_state = "tube1" }, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/engine_setup/coolant_canister, /turf/simulated/floor/tiled, /area/ministation/engine) "EY" = ( @@ -11712,7 +12049,7 @@ pixel_y = -24 }, /turf/simulated/floor/tiled, -/area/ministation/court) +/area/ministation/disused_office) "Fh" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -11784,6 +12121,9 @@ /obj/machinery/portable_atmospherics/powered/scrubber, /turf/simulated/floor/tiled, /area/ministation/engine) +"Fq" = ( +/turf/simulated/wall/r_wall, +/area/ministation/court) "Fr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -11841,18 +12181,6 @@ /obj/effect/floor_decal/corner/yellow/three_quarters{ dir = 8 }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for engine core."; - id_tag = "EngineVent"; - name = "Engine Ventillatory Control"; - pixel_x = -24; - pixel_y = 10 - }, -/obj/machinery/button/mass_driver{ - id_tag = "enginecore"; - name = "Emergency Core Eject"; - pixel_x = -24 - }, /turf/simulated/floor/tiled, /area/ministation/engine) "FA" = ( @@ -11931,9 +12259,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 6 - }, /turf/simulated/floor/tiled, /area/ministation/engine) "FL" = ( @@ -11943,9 +12268,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, /turf/simulated/floor/tiled, /area/ministation/engine) "FN" = ( @@ -11953,7 +12275,7 @@ dir = 10 }, /turf/simulated/floor/carpet/green, -/area/ministation/court) +/area/ministation/disused_office) "FO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -11961,9 +12283,6 @@ /obj/effect/floor_decal/corner/yellow{ dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, /turf/simulated/floor/tiled, /area/ministation/engine) "FP" = ( @@ -11972,18 +12291,12 @@ /obj/machinery/door/firedoor{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, /turf/simulated/floor, /area/ministation/engine) "FQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, /turf/simulated/floor/tiled, /area/ministation/engine) "FR" = ( @@ -11993,13 +12306,6 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/machinery/meter, /turf/simulated/floor/tiled, /area/ministation/engine) "FS" = ( @@ -12017,16 +12323,12 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, /turf/simulated/floor, /area/ministation/engine) "FU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/visible/yellow, /turf/simulated/floor/tiled, /area/ministation/engine) "FV" = ( @@ -12039,7 +12341,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/visible/yellow, /turf/simulated/floor/tiled, /area/ministation/engine) "FW" = ( @@ -12047,9 +12348,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, /turf/simulated/floor/tiled, /area/ministation/engine) "FX" = ( @@ -12063,9 +12361,6 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, /turf/simulated/floor/tiled, /area/ministation/engine) "FY" = ( @@ -12075,18 +12370,13 @@ /obj/machinery/camera/network/engineering{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, /turf/simulated/floor/tiled, /area/ministation/engine) "FZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, /area/ministation/engine) "Ga" = ( @@ -12112,39 +12402,21 @@ dir = 8; pixel_x = -24 }, -/obj/machinery/computer/modular/preset/engineering{ - dir = 1 - }, +/obj/structure/closet/crate/bin/ministation, /turf/simulated/floor/tiled, /area/ministation/engine) "Gd" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the engine charging port."; - id_tag = "SupermatterPort"; - name = "Reactor Blast Doors"; - pixel_x = -6; - pixel_y = 7 - }, -/obj/machinery/button/blast_door{ - desc = "A remote control-switch for the engine control room blast doors."; - id_tag = "EngineBlast"; - name = "Engine Monitoring Room Blast Doors"; - pixel_y = -3 - }, -/obj/machinery/button/toggle{ - desc = "A remote control-switch for the engine emitter."; - id_tag = "EngineEmitter"; - name = "Engine Emitter"; - pixel_x = 6; - pixel_y = 7 +/obj/structure/rack{ + dir = 8 }, +/obj/item/clothing/suit/storage/hazardvest, +/obj/item/tank/emergency/oxygen/engi, /turf/simulated/floor/tiled, /area/ministation/engine) "Ge" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, /area/ministation/engine) "Gf" = ( @@ -12155,12 +12427,11 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/radiation, /turf/simulated/floor/tiled, /area/ministation/engine) "Gg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, /area/ministation/engine) "Gh" = ( @@ -12173,10 +12444,6 @@ "Gi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/machinery/door/airlock/hatch/maintenance{ - name = "Engine Access" - }, /turf/simulated/floor/tiled, /area/ministation/engine) "Gj" = ( @@ -12188,9 +12455,6 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch/maintenance{ - name = "Engine Access" - }, /turf/simulated/floor/tiled, /area/ministation/engine) "Gk" = ( @@ -12204,7 +12468,7 @@ "Gl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, /area/ministation/engine) "Gm" = ( @@ -12212,28 +12476,45 @@ /turf/simulated/wall, /area/ministation/engine) "Gn" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/engine_setup/coolant_canister, -/turf/simulated/floor/tiled/techfloor, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/smes/buildable/preset, +/turf/simulated/floor/tiled, /area/ministation/engine) "Gp" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/space, -/area/space) +/turf/simulated/floor/tiled, +/area/ministation/engine) "Gq" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9 +/obj/structure/cable{ + icon_state = "1-8" }, -/turf/space, -/area/space) +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/yellow{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) "Gr" = ( /obj/effect/floor_decal/corner/yellow{ dir = 9 }, /turf/simulated/floor/tiled, /area/ministation/engine) +"Gs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled, +/area/ministation/engine) "Gt" = ( /obj/structure/cable{ icon_state = "4-8" @@ -12241,6 +12522,9 @@ /turf/simulated/floor/tiled, /area/ministation/engine) "Gu" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, /obj/machinery/power/smes/buildable/preset, /turf/simulated/floor/tiled, /area/ministation/engine) @@ -12262,12 +12546,22 @@ /turf/simulated/floor/plating, /area/space) "Gx" = ( -/obj/machinery/atmospherics/binary/pump, -/obj/effect/engine_setup/pump_max, -/turf/simulated/floor/tiled/techfloor, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/tiled, /area/ministation/engine) "Gy" = ( -/turf/simulated/floor/tiled/techfloor/grid, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, /area/ministation/engine) "Gz" = ( /obj/structure/cable{ @@ -12276,7 +12570,14 @@ /obj/effect/floor_decal/corner/yellow{ dir = 6 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"GA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, /area/ministation/engine) "GB" = ( /obj/structure/cable{ @@ -12285,13 +12586,29 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/engine) "GC" = ( -/obj/machinery/door/airlock/external, +/obj/machinery/door/airlock/external{ + autoset_access = 0; + id_tag = "starboard_engineering_airlock_interior"; + locked = 1 + }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/button/access/interior{ + id_tag = "starboard_engineering_airlock"; + name = "interior access button"; + pixel_x = -10; + pixel_y = 20 + }, /turf/simulated/floor, /area/ministation/engine) "GD" = ( @@ -12301,13 +12618,28 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "starboard_engineering_vent"; + dir = 8 + }, /turf/simulated/floor/plating, /area/ministation/engine) "GF" = ( -/obj/machinery/door/airlock/external, +/obj/machinery/door/airlock/external{ + locked = 1; + id_tag = "starboard_engineering_airlock_exterior"; + autoset_access = 0 + }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/button/access/interior{ + id_tag = "starboard_engineering_airlock"; + name = "exterior access button"; + pixel_x = 10; + pixel_y = 20; + command = "cycle_exterior" + }, /turf/simulated/floor/plating, /area/ministation/engine) "GH" = ( @@ -12371,34 +12703,88 @@ /turf/simulated/floor/plating, /area/space) "GQ" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4 +/obj/structure/cable{ + icon_state = "0-4" }, -/turf/space, +/obj/machinery/power/tracker, +/turf/simulated/floor/plating, +/area/space) +"GR" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/space) +"GS" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/space) +"GT" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, /area/space) -"GU" = ( -/obj/machinery/door/airlock/glass, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) "GV" = ( -/obj/machinery/door/airlock/external/glass, -/obj/machinery/atmospherics/pipe/simple/visible/black{ +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external/glass{ + id_tag = "port_engineering_airlock_interior"; + autoset_access = 0; + locked = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, +/obj/machinery/button/access/interior{ + id_tag = "port_engineering_airlock"; + name = "interior access button"; + pixel_x = 10; + pixel_y = 20 + }, /turf/simulated/floor/plating, /area/ministation/engine) "GW" = ( /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/airlock_sensor{ + id_tag = "port_engineering_sensor"; + pixel_y = 20 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "port_engineering_airlock"; + pixel_y = 24; + tag_airpump = "port_engineering_vent"; + tag_chamber_sensor = "port_engineering_sensor"; + tag_exterior_door = "port_engineering_airlock_exterior"; + tag_interior_door = "port_engineering_airlock_interior" + }, /turf/simulated/floor/plating, /area/ministation/engine) "GX" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/black{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/machinery/meter, -/turf/simulated/floor/tiled/techfloor, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled, /area/ministation/engine) "GY" = ( /obj/machinery/power/solar_control{ @@ -12423,7 +12809,10 @@ pixel_x = 27; pixel_y = -3 }, -/turf/simulated/floor/tiled/techfloor, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, /area/ministation/engine) "Hb" = ( /obj/effect/floor_decal/industrial/warning{ @@ -12447,22 +12836,43 @@ }, /turf/simulated/floor/tiled, /area/ministation/engine) +"He" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/space) "Hf" = ( -/obj/machinery/atmospherics/binary/pump{ +/obj/structure/cable, +/obj/machinery/power/solar_control{ dir = 1 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled, /area/ministation/engine) "Hg" = ( +/obj/structure/reagent_dispensers/fueltank, /obj/machinery/camera/network/engineering, -/obj/machinery/portable_atmospherics/canister/nitrogen/engine_setup, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled, /area/ministation/engine) "Hh" = ( /obj/structure/reagent_dispensers/watertank, /obj/machinery/camera/network/engineering, /turf/simulated/floor, /area/ministation/engine) +"Hi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/ministation/engine) "Hj" = ( /obj/machinery/light/small, /obj/effect/floor_decal/industrial/warning{ @@ -12528,53 +12938,46 @@ /turf/space, /area/space) "Hs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light{ dir = 8; icon_state = "tube1" }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/tiled/techfloor, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/tiled, /area/ministation/engine) "Ht" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/space, -/area/space) +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) "Hu" = ( /obj/machinery/alarm{ pixel_y = 23 }, /obj/effect/decal/cleanable/blood/oil, -/turf/simulated/floor/tiled/techfloor/grid, +/turf/simulated/floor/tiled, /area/ministation/engine) "Hv" = ( /obj/machinery/door/firedoor{ dir = 8 }, -/turf/simulated/floor/tiled/techfloor/grid, +/turf/simulated/floor/tiled, /area/ministation/engine) "Hw" = ( /obj/machinery/light{ dir = 1 }, -/obj/machinery/air_sensor{ - id_tag = "engine_sensor" - }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/tiled, /area/ministation/engine) "Hx" = ( /obj/effect/floor_decal/corner/yellow{ dir = 5 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/blast/regular/open{ - density = 0; - dir = 4; - id_tag = "SupermatterPort"; - name = "Reactor Blast Door" - }, -/obj/effect/wallframe_spawn/reinforced_borosilicate, /turf/simulated/floor/tiled, /area/ministation/engine) "Hy" = ( @@ -12583,8 +12986,10 @@ dir = 4; icon_state = "tube1" }, +/obj/structure/cable{ + icon_state = "1-2" + }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/tiled, /area/ministation/engine) "Hz" = ( @@ -12602,42 +13007,40 @@ /turf/space, /area/space) "HB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 +/obj/structure/cable{ + icon_state = "1-4" }, /obj/item/stool, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; dir = 4 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled, /area/ministation/engine) "HC" = ( -/obj/machinery/atmospherics/unary/vent_pump/engine{ - external_pressure_bound = 100; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - id_tag = "cooling_out"; - initialize_directions = 1; - pump_direction = 0; - use_power = 1; - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/simulated/floor/reinforced/airless, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, /area/ministation/engine) "HD" = ( -/obj/machinery/door/blast/regular/open{ - dir = 2; - id_tag = "SupermatterPort"; - name = "Reactor Blast Door" +/obj/machinery/door/firedoor{ + dir = 8 }, -/obj/effect/wallframe_spawn/reinforced_borosilicate, -/turf/simulated/floor/plating, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, /area/ministation/engine) "HE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, /turf/simulated/floor/tiled, @@ -12647,8 +13050,8 @@ dir = 5 }, /obj/item/stool, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, /turf/simulated/floor/tiled, /area/ministation/engine) @@ -12656,12 +13059,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 9 +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/structure/closet/radiation, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, /turf/simulated/floor/tiled, /area/ministation/engine) "HH" = ( @@ -12675,22 +13075,55 @@ /obj/item/stack/cable_coil, /obj/item/stock_parts/circuitboard/airlock_electronics, /obj/item/stock_parts/circuitboard/airlock_electronics, -/turf/simulated/floor/tiled/techfloor, +/obj/item/scanner/gas, +/turf/simulated/floor/tiled, /area/ministation/engine) "HJ" = ( /obj/structure/table, /obj/item/folder/yellow, /obj/item/clothing/head/earmuffs, -/turf/simulated/floor/tiled/techfloor, +/obj/item/stack/material/rods/fifty, +/turf/simulated/floor/tiled, /area/ministation/engine) "HK" = ( -/obj/structure/table, -/obj/item/scanner/gas, -/obj/item/stack/material/rods/fifty, -/turf/simulated/floor/tiled/techfloor, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/tiled, /area/ministation/engine) "HL" = ( -/turf/simulated/wall/r_wall/prepainted, +/obj/structure/cable, +/obj/machinery/power/smes/buildable/preset, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"HM" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"HN" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"HO" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/solar_control{ + dir = 8 + }, +/turf/simulated/floor/tiled, /area/ministation/engine) "HP" = ( /obj/structure/table, @@ -12718,22 +13151,29 @@ /turf/space, /area/space) "HT" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 8; - icon_state = "map_injector"; - id_tag = "cooling_in"; - name = "Coolant Injector"; - pixel_y = 1; - power_rating = 30000; - use_power = 1; - volume_rate = 700 - }, -/turf/simulated/floor/reinforced/airless, -/area/ministation/engine) +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/space) "HU" = ( -/obj/machinery/door/blast/regular{ - id_tag = "EngineVent"; - name = "Reactor Vent" +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + id_tag = "stern_engineering_airlock_interior"; + locked = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/button/access/interior{ + id_tag = "stern_engineering_airlock"; + name = "interior access button"; + pixel_x = 20; + pixel_y = 10 }, /turf/simulated/floor/plating, /area/ministation/engine) @@ -12744,23 +13184,33 @@ /turf/space, /area/space) "HW" = ( -/obj/structure/grille, -/obj/structure/lattice, -/turf/space, -/area/space) -"HY" = ( -/obj/effect/floor_decal/corner/yellow{ - dir = 5 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/door/blast/regular/open{ - density = 0; +/obj/machinery/airlock_sensor{ + id_tag = "stern_engineering_sensor"; + pixel_y = 10; + pixel_x = -20 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "stern_engineering_airlock"; + pixel_y = null; + tag_airpump = "stern_engineering_vent"; + tag_chamber_sensor = "stern_engineering_sensor"; + tag_exterior_door = "stern_engineering_airlock_exterior"; + tag_interior_door = "stern_engineering_airlock_interior"; dir = 4; - id_tag = "SupermatterPort"; - name = "Reactor Blast Door" + pixel_x = -20 }, -/obj/effect/wallframe_spawn/reinforced_borosilicate, -/turf/simulated/floor/tiled, +/turf/simulated/floor/plating, /area/ministation/engine) +"HY" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/solar, +/turf/simulated/floor/plating, +/area/space) "HZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -12772,12 +13222,18 @@ /turf/simulated/floor/plating, /area/ministation/maint/se) "Ia" = ( -/obj/effect/wallframe_spawn/reinforced, +/obj/structure/window/basic{ + dir = 1 + }, +/obj/structure/curtain/open/bed{ + icon_state = "closed"; + opacity = 1 + }, /turf/simulated/floor/plating, -/area/ministation/court) +/area/ministation/disused_office) "Ib" = ( /turf/simulated/wall, -/area/ministation/court) +/area/ministation/disused_office) "Ic" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -12807,14 +13263,10 @@ /turf/simulated/floor/tiled, /area/ministation/hall/n) "If" = ( -/obj/machinery/mass_driver{ - id_tag = "enginecore" - }, -/obj/machinery/power/supermatter, -/obj/effect/engine_setup/core, -/obj/effect/decal/warning_stripes, -/turf/simulated/floor/reinforced/airless, -/area/ministation/engine) +/obj/structure/cable, +/obj/machinery/power/solar, +/turf/simulated/floor/plating, +/area/space) "Ig" = ( /obj/structure/lattice, /obj/structure/transit_tube{ @@ -12834,11 +13286,21 @@ /turf/simulated/floor/plating, /area/ministation/ai_sat) "Ik" = ( -/obj/machinery/door/airlock/external/glass, /obj/machinery/door/airlock/external/glass{ autoset_access = 0; name = "External Airlock Hatch"; - req_access = list("ACCESS_EXTERNAL") + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "sat2_airlock_interior" + }, +/obj/machinery/button/access/interior{ + id_tag = "sat2_airlock"; + name = "interior access button"; + pixel_x = 10; + pixel_y = 20 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, /turf/simulated/floor/plating, /area/ministation/ai_sat) @@ -12864,8 +13326,11 @@ /obj/structure/bed/chair/wood/maple{ dir = 8 }, +/obj/abstract/landmark/start{ + name = "Enclave Representative" + }, /turf/simulated/floor/carpet/green, -/area/ministation/court) +/area/ministation/disused_office) "Ip" = ( /obj/machinery/atmospherics/binary/pump/on{ dir = 4 @@ -12879,6 +13344,9 @@ "Is" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, /turf/simulated/floor/plating, /area/ministation/maint/w) "It" = ( @@ -12891,6 +13359,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plating, /area/ministation/ai_sat) "Iv" = ( @@ -12932,7 +13401,7 @@ /area/ministation/court) "IC" = ( /turf/simulated/floor/carpet/green, -/area/ministation/court) +/area/ministation/disused_office) "ID" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plating, @@ -12950,9 +13419,9 @@ /turf/simulated/floor/plating, /area/ministation/ai_sat) "IH" = ( -/obj/machinery/door/airlock, -/turf/simulated/floor/plating, -/area/ministation/ai_sat) +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/tiled, +/area/ministation/cargo) "II" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plating, @@ -12976,15 +13445,6 @@ /obj/structure/rack, /turf/simulated/floor/plating, /area/ministation/ai_sat) -"IM" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/ministation/engine) "IN" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -12995,12 +13455,16 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/machinery/embedded_controller/radio/simple_docking_controller{ +/obj/machinery/embedded_controller/radio/airlock/docking_port{ dir = 4; id_tag = "cargo_bay"; - pixel_x = -15; - tag_door = "cargo_bay_door" + tag_airpump = "cargo_vent"; + tag_chamber_sensor = "cargo_sensor"; + tag_exterior_door = "cargo_airlock_exterior"; + tag_interior_door = "cargo_airlock_interior"; + pixel_x = -20 }, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, /area/ministation/cargo) "IQ" = ( @@ -13039,12 +13503,44 @@ }, /turf/simulated/floor/tiled/techmaint, /area/ministation/ai_core) +"IZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) "Jc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/tiled/techfloor, +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 4 + }, +/turf/simulated/floor/tiled, /area/ministation/engine) +"Jd" = ( +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 0; + id_tag = "sat3_airlock"; + pixel_y = 24; + tag_airpump = "sat3_vent"; + tag_chamber_sensor = "sat3_sensor"; + tag_exterior_door = "sat3_airlock_exterior"; + tag_interior_door = "sat3_airlock_interior" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "sat3_vent" + }, +/obj/machinery/airlock_sensor{ + id_tag = "sat3_sensor"; + pixel_y = 20 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "Je" = ( /obj/machinery/light/small{ dir = 1 @@ -13052,15 +13548,17 @@ /obj/machinery/alarm{ pixel_y = 23 }, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 4 + }, /turf/simulated/floor/plating, /area/ministation/cafe) "Jf" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plating, /area/ministation/maint/sw) "Jg" = ( @@ -13148,6 +13646,14 @@ "Jt" = ( /turf/simulated/floor/plating, /area/space) +"Ju" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) "Jv" = ( /obj/machinery/light/small, /turf/simulated/floor/plating, @@ -13252,6 +13758,11 @@ "JN" = ( /turf/simulated/wall/r_wall, /area/ministation/ai_upload) +"JO" = ( +/obj/structure/cable, +/obj/machinery/power/tracker, +/turf/simulated/floor/plating, +/area/space) "JP" = ( /obj/structure/transit_tube{ icon_state = "N-SE" @@ -13613,6 +14124,15 @@ }, /turf/simulated/floor/plating, /area/ministation/ai_sat) +"KI" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/sw) "KJ" = ( /obj/structure/cable{ icon_state = "1-4" @@ -14005,12 +14525,6 @@ "LM" = ( /turf/simulated/floor/wood/mahogany, /area/ministation/library) -"LO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/engine) "LP" = ( /obj/effect/floor_decal/corner/purple{ dir = 6 @@ -14058,6 +14572,10 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) +"LU" = ( +/obj/random/trash, +/turf/simulated/floor/plating, +/area/ministation/disused) "LV" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -14191,6 +14709,12 @@ }, /turf/simulated/floor/tiled/white, /area/ministation/science) +"Mj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "Mk" = ( /obj/structure/cable{ icon_state = "1-2" @@ -14199,8 +14723,11 @@ /turf/simulated/floor/plating, /area/ministation/maint/ne) "Ml" = ( -/turf/simulated/floor/tiled/techfloor, -/area/ministation/engine) +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200 + }, +/turf/simulated/floor, +/area/ministation/atmospherics) "Mm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -14244,12 +14771,6 @@ }, /turf/simulated/floor/airless, /area/space) -"Mv" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/ministation/engine) "Mw" = ( /obj/machinery/cryopod{ dir = 1 @@ -14274,6 +14795,13 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/s) +"MC" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4; + level = 2 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) "MD" = ( /obj/item/stool/padded, /obj/structure/sign/warning/nosmoking_2{ @@ -14282,6 +14810,19 @@ /obj/random_multi/single_item/captains_spare_id, /turf/simulated/floor/tiled/white, /area/ministation/medical) +"MF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/nw) +"MG" = ( +/obj/structure/bed/chair, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) "MH" = ( /obj/structure/table, /obj/item/implantcase/tracking, @@ -14301,10 +14842,33 @@ /obj/item/bedsheet/purple, /turf/simulated/floor/wood/mahogany, /area/ministation/library) +"MK" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor, +/area/ministation/atmospherics) "MM" = ( -/obj/structure/reagent_dispensers/watertank, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/ministation/engine) +"MN" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/nw) "MO" = ( /obj/effect/decal/cleanable/blood/oil, /turf/simulated/floor/plating, @@ -14318,6 +14882,10 @@ /area/ministation/library) "MQ" = ( /obj/structure/closet, +/obj/item/gun/launcher/crossbow, +/obj/item/arrow, +/obj/item/arrow, +/obj/item/cell/crap, /obj/item/storage/briefcase, /obj/machinery/firealarm{ dir = 4; @@ -14330,18 +14898,18 @@ dir = 10 }, /turf/simulated/floor/carpet/green, -/area/ministation/court) +/area/ministation/disused_office) "MT" = ( /obj/machinery/door/firedoor{ dir = 8 }, -/obj/machinery/door/airlock/glass/mining, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/door/airlock/double/glass/mining, /turf/simulated/floor/tiled, /area/ministation/cargo) "MU" = ( @@ -14358,6 +14926,16 @@ }, /turf/simulated/floor/tiled, /area/ministation/bridge) +"MY" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) "Na" = ( /obj/effect/floor_decal/corner/blue{ dir = 5 @@ -14377,16 +14955,12 @@ }, /turf/simulated/floor/wood/yew, /area/ministation/court) -"Nf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/radiation{ - dir = 8 +"Ne" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 6 }, -/turf/simulated/floor/tiled, -/area/ministation/engine) +/turf/simulated/floor/plating, +/area/ministation/maint/w) "Nh" = ( /obj/structure/sign/directions/engineering{ pixel_x = -32; @@ -14399,7 +14973,13 @@ /turf/simulated/floor/tiled, /area/ministation/hall/s) "Ni" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air/airlock{ + pixel_x = 1 + }, /turf/simulated/floor/tiled, /area/ministation/engine) "Nj" = ( @@ -14410,24 +14990,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/ministation/hall/n) -"Nl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/engine) -"Nn" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/obj/machinery/door/airlock/hatch/maintenance{ - name = "Engine Access" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, -/area/ministation/engine) "No" = ( /obj/machinery/light{ dir = 8 @@ -14448,10 +15010,34 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/s) +"Ns" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "Nt" = ( /obj/structure/flora/pottedplant/smalltree, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/ministation/hall/n) +"Nu" = ( +/obj/machinery/airlock_sensor{ + id_tag = "escape2_sensor"; + pixel_y = -20 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "escape1_vent" + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w) +"Nv" = ( +/obj/machinery/door/airlock/glass, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/ministation/disused) "Nw" = ( /turf/simulated/floor/tiled, /area/ministation/court) @@ -14498,6 +15084,9 @@ icon_state = "0-4" }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/plating, /area/ministation/maint/sw) "NH" = ( @@ -14512,6 +15101,12 @@ }, /turf/simulated/floor/tiled, /area/ministation/bridge) +"NI" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) "NJ" = ( /obj/structure/cable{ icon_state = "1-2" @@ -14532,15 +15127,17 @@ /obj/effect/decal/cleanable/blood/oil, /turf/simulated/floor/plating, /area/ministation/maint/sw) +"NL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) "NO" = ( /obj/abstract/level_data/main_level, /turf/space, /area/space) -"NP" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/space, -/area/space) "NR" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -14553,30 +15150,43 @@ /turf/simulated/floor/tiled, /area/ministation/hall/n) "NT" = ( -/obj/machinery/generator{ - anchored = 1; - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/plating, +/area/ministation/maint/nw) +"NU" = ( +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 1; + id_tag = "sat2_airlock"; + pixel_y = -24; + tag_airpump = "sat2_vent"; + tag_chamber_sensor = "sat2_sensor"; + tag_exterior_door = "sat2_airlock_exterior"; + tag_interior_door = "sat2_airlock_interior" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "sat2_vent" }, -/obj/structure/cable, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/engine) -"NY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/omni/filter{ - tag_east = 4; - tag_north = 2; - use_power = 0; - tag_south = 1 +/obj/machinery/airlock_sensor{ + id_tag = "sat2_sensor"; + pixel_y = -20; + pixel_x = -10 }, -/obj/effect/engine_setup/filter, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Oa" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"NW" = ( +/obj/effect/decal/cleanable/dirt{ + dir = 9 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/ministation/engine) +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/plating, +/area/ministation/maint/sw) +"NX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/se) "Oc" = ( /obj/effect/floor_decal/corner/blue{ dir = 10 @@ -14590,15 +15200,17 @@ }, /turf/simulated/floor/wood/yew, /area/ministation/court) -"Oe" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10 +"Of" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 }, -/turf/space, -/area/space) +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "Oh" = ( /obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, /turf/simulated/floor, /area/ministation/atmospherics) "Oi" = ( @@ -14607,12 +15219,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/ministation/hall/n) -"Oj" = ( -/obj/structure/grille, -/obj/structure/grille, -/obj/structure/lattice, -/turf/space, -/area/space) "Om" = ( /obj/item/stool, /obj/machinery/alarm{ @@ -14638,18 +15244,26 @@ }, /area/ministation/maint/w) "Oq" = ( -/obj/machinery/door/airlock/glass/security{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/double/glass/security{ id_tag = "secdoor"; name = "security outer airlock" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/ministation/security) "Or" = ( /obj/random/trash, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/plating, /area/ministation/maint/se) +"Os" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/wall, +/area/ministation/hall/w) "Ou" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -14683,11 +15297,12 @@ }, /turf/simulated/floor/plating, /area/ministation/maint/se) -"Oy" = ( -/obj/structure/sign/warning/radioactive, -/turf/simulated/wall/r_wall/prepainted, -/area/ministation/engine) "OB" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "_North APC"; + pixel_y = 24 + }, /obj/structure/cable{ icon_state = "0-2" }, @@ -14696,7 +15311,7 @@ pixel_x = 24 }, /turf/simulated/floor/plating, -/area/ministation/court) +/area/ministation/disused_office) "OC" = ( /obj/machinery/door/airlock/hatch/maintenance, /obj/structure/cable{ @@ -14707,15 +15322,11 @@ "OD" = ( /obj/machinery/door/airlock/hatch/maintenance, /turf/simulated/floor/plating, -/area/ministation/court) +/area/ministation/disused_office) "OF" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor, /area/ministation/atmospherics) -"OG" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/turf/space, -/area/space) "OL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/white, @@ -14730,20 +15341,66 @@ }, /turf/simulated/floor/wood/mahogany, /area/ministation/library) +"OO" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "sat3_airlock_exterior" + }, +/obj/machinery/button/access/interior{ + id_tag = "sat3_airlock"; + name = "exterior access button"; + pixel_x = -10; + pixel_y = 20; + command = "cycle_exterior" + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "OP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/tiled, /area/ministation/court) +"OQ" = ( +/obj/machinery/door/airlock/glass/command{ + autoset_access = 0; + name = "Telecommunications relay airlock"; + req_access = list("ACCESS_TELECOMS") + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) "OR" = ( -/obj/machinery/door/airlock/external/glass, +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "mining_airlock_exterior" + }, +/obj/machinery/button/access/interior{ + id_tag = "cargo_airlock"; + name = "exterior access button"; + pixel_x = -20; + pixel_y = 10; + command = "cycle_exterior" + }, /turf/simulated/floor/airless, /area/ministation/cargo) -"OS" = ( -/obj/machinery/computer/arcade/orion_trail, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) +"OT" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + locked = 1; + id_tag = "escape1_airlock_interior" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w) "OU" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -14782,7 +15439,18 @@ /turf/simulated/floor/tiled, /area/ministation/hall/s) "OX" = ( -/obj/machinery/door/airlock/external, +/obj/machinery/door/airlock/external{ + autoset_access = 0; + id_tag = "atmos_airlock_interior"; + locked = 1 + }, +/obj/machinery/button/access/interior{ + id_tag = "atmos_airlock"; + name = "interior access button"; + pixel_x = 20; + pixel_y = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor, /area/ministation/atmospherics) "OY" = ( @@ -14815,11 +15483,12 @@ /turf/simulated/floor/tiled/white, /area/ministation/hall/e) "Pe" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, -/turf/simulated/wall, -/area/ministation/engine) +/turf/simulated/floor/tiled, +/area/ministation/cargo) "Pg" = ( /obj/structure/cable{ icon_state = "1-2" @@ -14859,6 +15528,7 @@ /obj/structure/sign/warning/airlock{ pixel_x = 32 }, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, /area/ministation/cargo) "Po" = ( @@ -14872,6 +15542,29 @@ "Pp" = ( /turf/space, /area/ministation/supply_dock) +"Pr" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + locked = 1; + id_tag = "pfm_airlock_exterior" + }, +/obj/machinery/button/access/interior{ + id_tag = "pfm_airlock"; + name = "exterior access button"; + pixel_x = -10; + pixel_y = 20; + command = "cycle_exterior" + }, +/turf/simulated/floor/plating, +/area/ministation/maint/nw) +"Pu" = ( +/obj/item/radio/intercom{ + dir = 4; + pixel_x = -25 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) "Px" = ( /obj/structure/table/woodentable/walnut, /obj/item/folder/red, @@ -14887,9 +15580,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, /turf/simulated/floor/tiled, /area/ministation/engine) "PA" = ( @@ -14929,12 +15619,6 @@ /obj/random/trash, /turf/simulated/floor/tiled, /area/ministation/engine) -"PG" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10 - }, -/turf/space, -/area/space) "PH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -14956,9 +15640,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, /turf/simulated/floor/tiled, /area/ministation/engine) "PM" = ( @@ -14973,6 +15654,15 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) +"PN" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + locked = 1; + id_tag = "escape1_airlock_exterior" + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w) "PP" = ( /obj/structure/closet, /obj/random/maintenance, @@ -15011,17 +15701,33 @@ dir = 4; level = 2 }, +/obj/item/modular_computer/tablet/preset/custom_loadout/cheap, +/obj/item/mollusc/clam, /turf/simulated/floor/carpet/green, -/area/ministation/court) +/area/ministation/disused_office) "PX" = ( -/obj/machinery/portable_atmospherics/canister/empty, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 2 + }, /turf/simulated/floor/tiled, -/area/ministation/engine) -"PZ" = ( -/obj/machinery/door/airlock/external/glass, -/obj/machinery/atmospherics/pipe/simple/visible/green, +/area/ministation/hall/w) +"PY" = ( +/obj/machinery/airlock_sensor{ + id_tag = "escape1_sensor"; + pixel_y = -20 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "escape1_vent" + }, /turf/simulated/floor/plating, -/area/ministation/engine) +/area/ministation/hall/w) +"Qb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor, +/area/ministation/atmospherics) "Qh" = ( /obj/structure/bed/chair/wood/walnut{ dir = 4 @@ -15031,6 +15737,16 @@ }, /turf/simulated/floor/wood/yew, /area/ministation/court) +"Qi" = ( +/obj/effect/decal/cleanable/filth, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) "Qk" = ( /obj/structure/cable{ icon_state = "1-2" @@ -15043,10 +15759,16 @@ "Qm" = ( /obj/machinery/cryopod/robot, /obj/machinery/computer/cryopod/robot{ - dir = 1 + pixel_y = -32 }, /turf/simulated/floor/tiled/white, /area/ministation/science) +"Qp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/hall/w) "Qq" = ( /obj/machinery/power/apc{ dir = 1; @@ -15059,6 +15781,14 @@ }, /turf/simulated/floor/plating, /area/ministation/maint/ne) +"Qr" = ( +/obj/effect/decal/cleanable/filth, +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/w) "Qu" = ( /obj/structure/cable{ icon_state = "1-8" @@ -15081,6 +15811,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plating, /area/ministation/maint/se) "Qz" = ( @@ -15088,6 +15821,13 @@ /obj/structure/sign/botany, /turf/simulated/floor/tiled, /area/ministation/hydro) +"QA" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/plating, +/area/ministation/maint/w) "QB" = ( /obj/machinery/light, /turf/simulated/floor/tiled, @@ -15113,10 +15853,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/ministation/hall/s) -"QH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/wall/r_wall, -/area/ministation/hall/s) "QI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -15126,6 +15862,12 @@ }, /turf/simulated/floor/plating, /area/ministation/ai_sat) +"QJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/w) "QL" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/brigdoor, @@ -15135,10 +15877,6 @@ }, /turf/simulated/floor/plating, /area/ministation/security) -"QM" = ( -/obj/structure/sign/warning/vent_port, -/turf/simulated/wall/r_wall/prepainted, -/area/ministation/engine) "QN" = ( /obj/structure/sign/id_office{ dir = 1; @@ -15173,6 +15911,15 @@ }, /turf/simulated/floor/tiled, /area/ministation/security) +"QS" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) "QU" = ( /obj/effect/floor_decal/industrial/warning{ dir = 8 @@ -15207,13 +15954,17 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) +"QZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) "Ra" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, -/obj/structure/lattice, -/turf/space, -/area/space) +/turf/simulated/wall/r_wall, +/area/ministation/ai_core) "Rb" = ( /obj/machinery/cryopod{ dir = 1 @@ -15248,6 +15999,17 @@ }, /turf/simulated/floor/plating, /area/ministation/library) +"Rh" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "cargo_vent" + }, +/obj/machinery/airlock_sensor{ + id_tag = "cargo2_sensor"; + pixel_y = -20 + }, +/turf/simulated/floor/plating, +/area/ministation/cargo) "Ri" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -15273,6 +16035,35 @@ }, /turf/simulated/floor/tiled/white, /area/ministation/science) +"Rm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) +"Rn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 2 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) +"Rq" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "cargo_vent" + }, +/obj/machinery/airlock_sensor{ + id_tag = "cargo_sensor"; + pixel_y = -20 + }, +/turf/simulated/floor/plating, +/area/ministation/cargo) "Rr" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, @@ -15310,6 +16101,16 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood, /area/ministation/cafe) +"Rx" = ( +/turf/simulated/wall, +/area/ministation/court) +"Ry" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) "RB" = ( /obj/effect/decal/cleanable/blood/oil, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -15321,14 +16122,24 @@ /turf/simulated/floor/plating, /area/ministation/maint/se) "RC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/effect/floor_decal/industrial/radiation, -/turf/simulated/floor/tiled, -/area/ministation/engine) +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "RD" = ( /turf/simulated/wall/r_wall, /area/ministation/cryo) +"RF" = ( +/obj/random/trash, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) "RG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood/mahogany, @@ -15347,12 +16158,23 @@ /turf/simulated/floor/tiled, /area/ministation/hall/s) "RJ" = ( -/obj/machinery/door/airlock/external/glass, -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/external/glass{ + id_tag = "port_engineering_airlock_exterior"; + locked = 1; + autoset_access = 0 + }, +/obj/machinery/button/access/interior{ + id_tag = "port_engineering_airlock"; + name = "exterior access button"; + pixel_x = -10; + pixel_y = 20; + command = "cycle_exterior" }, /turf/simulated/floor/plating, -/area/space) +/area/ministation/engine) "RK" = ( /obj/structure/cable{ icon_state = "4-8" @@ -15362,10 +16184,15 @@ }, /turf/simulated/floor/plating, /area/ministation/maint/sw) -"RL" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/engine) +"RM" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock{ + pixel_x = 1 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "RN" = ( /obj/effect/floor_decal/corner/paleblue{ dir = 10 @@ -15381,6 +16208,7 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plating, /area/ministation/maint/sw) "RP" = ( @@ -15418,6 +16246,12 @@ }, /turf/simulated/floor/tiled/white, /area/ministation/science) +"RW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "RY" = ( /obj/machinery/door/airlock/hatch/maintenance, /turf/simulated/wall, @@ -15478,6 +16312,13 @@ /obj/effect/decal/cleanable/blood/oil, /turf/simulated/floor/plating, /area/ministation/maint/w) +"Sn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) "So" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -15494,14 +16335,35 @@ /turf/simulated/floor/tiled/white, /area/ministation/medical) "Sq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/tiled, /area/ministation/hall/n) +"Sr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor, +/area/ministation/atmospherics) +"Ss" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) +"Sv" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/w) "Sy" = ( /obj/structure/cable{ icon_state = "4-8" @@ -15516,6 +16378,17 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) +"SA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/w) "SC" = ( /obj/machinery/light/small{ dir = 8 @@ -15550,12 +16423,25 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/ministation/maint/sw) +"SI" = ( +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "SN" = ( /obj/machinery/camera/autoname{ dir = 1 }, /turf/simulated/floor/tiled, -/area/ministation/court) +/area/ministation/disused_office) +"SO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) "SP" = ( /obj/item/stool/padded, /turf/simulated/floor/wood/mahogany, @@ -15567,9 +16453,15 @@ /turf/simulated/floor/tiled, /area/ministation/cargo) "ST" = ( -/obj/structure/lattice, -/turf/simulated/wall, -/area/space) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) "SV" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -15592,7 +16484,17 @@ /obj/machinery/door/airlock/external/glass{ autoset_access = 0; name = "External Airlock Hatch"; - req_access = list("ACCESS_EXTERNAL") + locked = 1; + id_tag = "pfm_airlock_interior" + }, +/obj/machinery/button/access/interior{ + id_tag = "pfm_airlock"; + name = "interior access button"; + pixel_x = 10; + pixel_y = 20 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 }, /turf/simulated/floor/plating, /area/ministation/maint/nw) @@ -15605,30 +16507,40 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector, /turf/simulated/floor, /area/ministation/atmospherics) +"Ta" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/w) "Tb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/ministation/janitor) -"Te" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +"Tc" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/binary/pump{ - dir = 1; - name = "waste pump" +/turf/simulated/floor/plating, +/area/ministation/maint/ne) +"Td" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 }, -/obj/effect/engine_setup/pump_max, -/turf/simulated/floor/tiled, -/area/ministation/engine) -"Tf" = ( -/obj/machinery/atmospherics/pipe/simple/visible/black{ - dir = 4 +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"Te" = ( +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22 }, -/turf/simulated/wall, -/area/ministation/engine) +/turf/simulated/floor/plating, +/area/ministation/disused) "Tg" = ( /obj/structure/cable{ icon_state = "2-4" @@ -15674,36 +16586,43 @@ }, /turf/simulated/floor/tiled, /area/ministation/court) -"Tw" = ( -/obj/item/radio/intercom{ - dir = 4; - pixel_x = -25 - }, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) -"Tx" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ +"Ts" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden{ dir = 6 }, -/turf/space, -/area/space) +/turf/simulated/floor/plating, +/area/ministation/maint/w) +"Tv" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "atmos_vent" + }, +/obj/machinery/airlock_sensor{ + id_tag = "atmos_sensor"; + pixel_y = 10; + pixel_x = -20 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "atmos_airlock"; + pixel_y = null; + tag_airpump = "atmos_vent"; + tag_chamber_sensor = "atmos_sensor"; + tag_exterior_door = "atmos_airlock_exterior"; + tag_interior_door = "atmos_airlock_interior"; + dir = 4; + pixel_x = -20 + }, +/turf/simulated/floor, +/area/ministation/atmospherics) "Ty" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor, /area/ministation/atmospherics) -"TA" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging, -/obj/structure/lattice, -/turf/space, -/area/space) -"TB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/engine) "TC" = ( /obj/machinery/firealarm{ dir = 1; @@ -15717,6 +16636,13 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) +"TD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) "TF" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -15724,6 +16650,12 @@ }, /turf/simulated/floor/wood/yew, /area/ministation/court) +"TG" = ( +/obj/effect/decal/cleanable/filth, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ministation/disused) "TH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -15764,6 +16696,13 @@ /obj/item/stool, /turf/simulated/floor/plating, /area/ministation/maint/se) +"TP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) "TQ" = ( /obj/machinery/light_switch{ dir = 8; @@ -15783,10 +16722,24 @@ }, /turf/simulated/floor/airless, /area/ministation/atmospherics) -"TU" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, -/turf/space, -/area/space) +"TT" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/external/glass{ + locked = 1; + id_tag = "stern_engineering_airlock_exterior"; + autoset_access = 0 + }, +/obj/machinery/button/access/interior{ + id_tag = "stern_engineering_airlock"; + name = "exterior access button"; + pixel_x = -20; + pixel_y = -10; + command = "cycle_exterior" + }, +/turf/simulated/floor/plating, +/area/ministation/engine) "TV" = ( /obj/machinery/door/firedoor{ dir = 8 @@ -15800,6 +16753,26 @@ }, /turf/simulated/floor/tiled, /area/ministation/security) +"TW" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + id_tag = "sqm_vent"; + dir = 8 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 0; + id_tag = "sqm_airlock"; + pixel_y = 24; + tag_airpump = "sqm_vent"; + tag_chamber_sensor = "sqm_sensor"; + tag_exterior_door = "sqm_airlock_exterior"; + tag_interior_door = "sqm_airlock_interior" + }, +/obj/machinery/airlock_sensor{ + id_tag = "sqm_sensor"; + pixel_y = 20 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/se) "TX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -15822,6 +16795,18 @@ /obj/effect/decal/cleanable/blood/oil, /turf/simulated/floor/plating, /area/ministation/maint/w) +"Uc" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/portables_connector, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Ud" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plating, +/area/ministation/disused) "Ue" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -15834,7 +16819,10 @@ /area/ministation/maint/se) "Um" = ( /obj/random/trash, -/turf/simulated/floor/tiled/techfloor, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, /area/ministation/engine) "Un" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -15880,26 +16868,24 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/wood/mahogany, /area/ministation/library) -"Uy" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 +"Ux" = ( +/turf/simulated/floor/plating, +/area/ministation/disused) +"Uz" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "Dock Airlock"; + locked = 1 }, /turf/simulated/floor/plating, -/area/ministation/engine) +/area/ministation/hall/w) "UA" = ( /obj/machinery/camera/network/ministation/sat{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, /turf/simulated/floor/plating, /area/ministation/ai_sat) "UB" = ( @@ -15940,26 +16926,20 @@ /turf/simulated/floor/plating, /area/ministation/court) "UK" = ( -/obj/structure/closet, -/obj/random/maintenance, -/obj/random/suit, -/obj/random/gloves, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/portables_connector{ + pixel_x = -3 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/plating, /area/ministation/maint/sw) "UL" = ( /obj/effect/decal/cleanable/filth, /turf/simulated/floor/plating, /area/ministation/maint/ne) -"UN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/engine) "UO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, /turf/simulated/floor, /area/ministation/atmospherics) @@ -15979,7 +16959,30 @@ }, /turf/simulated/floor/tiled, /area/ministation/bridge) +"UT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/binary/pump/on{ + target_pressure = 200; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) "UV" = ( +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "mining_airlock"; + pixel_y = null; + tag_airpump = "mining_vent"; + tag_chamber_sensor = "mining_sensor"; + tag_exterior_door = "mining_airlock_exterior"; + tag_interior_door = "mining_airlock_interior"; + dir = 4; + pixel_x = -20 + }, +/obj/machinery/airlock_sensor{ + id_tag = "mining_sensor"; + pixel_y = 10; + pixel_x = -20 + }, /turf/simulated/floor/plating, /area/ministation/cargo) "Va" = ( @@ -15993,6 +16996,10 @@ }, /turf/simulated/floor, /area/ministation/atmospherics) +"Vc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "Vd" = ( /obj/structure/filing_cabinet, /obj/machinery/firealarm{ @@ -16001,13 +17008,17 @@ }, /turf/simulated/floor/tiled, /area/ministation/court) +"Ve" = ( +/obj/abstract/landmark/start{ + name = "Station Engineer" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/tiled, +/area/ministation/engine) "Vf" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ministation/maint/w) -"Vh" = ( -/turf/simulated/floor/reinforced/airless, -/area/ministation/engine) "Vi" = ( /obj/machinery/light_switch{ pixel_y = 25 @@ -16033,7 +17044,7 @@ dir = 4 }, /turf/simulated/floor/tiled, -/area/ministation/court) +/area/ministation/disused_office) "Vn" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4; @@ -16053,6 +17064,12 @@ /obj/structure/bookcase/skill_books/random, /turf/simulated/floor/wood/mahogany, /area/ministation/library) +"Vs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) "Vt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -16096,28 +17113,57 @@ /obj/effect/decal/cleanable/filth, /turf/simulated/floor/tiled, /area/ministation/hall/e) +"Vy" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) "Vz" = ( /obj/structure/cable{ icon_state = "1-2" }, /turf/simulated/floor/airless, /area/space) -"VE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/engine) +"VA" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "sat1_airlock_interior" + }, +/obj/machinery/button/access/interior{ + id_tag = "sat1_airlock"; + name = "interior access button"; + pixel_x = 10; + pixel_y = 20 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"VD" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/simulated/floor/plating, +/area/ministation/disused) +"VF" = ( +/obj/effect/decal/cleanable/filth, +/turf/simulated/floor/plating, +/area/ministation/disused) "VG" = ( /obj/effect/wallframe_spawn/reinforced, /obj/structure/sign/warning/airlock, /turf/simulated/floor/plating, /area/ministation/engine) -"VH" = ( -/obj/structure/sign/warning/secure_area{ - dir = 4 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/ministation/engine) +"VJ" = ( +/obj/machinery/door/airlock/hatch/maintenance, +/turf/simulated/floor/plating, +/area/ministation/maint/ne) "VK" = ( /obj/machinery/ai_slipper{ uses = 10 @@ -16159,6 +17205,13 @@ }, /turf/simulated/floor/tiled, /area/ministation/commons) +"VS" = ( +/obj/effect/decal/cleanable/filth, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) "VU" = ( /obj/structure/rack, /obj/item/radio/intercom{ @@ -16184,13 +17237,6 @@ }, /turf/simulated/floor/wood/mahogany, /area/ministation/library) -"VX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/binary/circulator{ - anchored = 1 - }, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/engine) "VZ" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -16204,6 +17250,10 @@ "Wb" = ( /turf/simulated/wall, /area/ministation/cryo) +"Wc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/plating, +/area/ministation/maint/nw) "Wd" = ( /obj/machinery/alarm{ dir = 1; @@ -16211,6 +17261,12 @@ }, /turf/simulated/floor/plating, /area/ministation/detective) +"Wg" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/w) "Wi" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4; @@ -16218,13 +17274,6 @@ }, /turf/simulated/floor/tiled, /area/ministation/security) -"Wj" = ( -/obj/abstract/landmark{ - name = "carpspawn" - }, -/obj/abstract/ministation/random_asteroid_spawner, -/turf/space, -/area/space) "Wk" = ( /obj/machinery/door/airlock/glass/atmos, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -16241,10 +17290,13 @@ }, /turf/simulated/floor/tiled, /area/ministation/engine) -"Wp" = ( -/obj/abstract/ministation/random_asteroid_spawner, -/turf/space, -/area/space) +"Wo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/ministation/hall/w) "Wr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/light{ @@ -16260,8 +17312,8 @@ /turf/simulated/floor/wood/mahogany, /area/ministation/library) "Wt" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 }, /turf/simulated/floor/plating, /area/ministation/maint/w) @@ -16282,6 +17334,7 @@ /area/ministation/atmospherics) "WC" = ( /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden, /turf/simulated/floor/plating, /area/ministation/maint/se) "WD" = ( @@ -16290,7 +17343,7 @@ pixel_x = 32 }, /turf/simulated/floor/carpet/green, -/area/ministation/court) +/area/ministation/disused_office) "WF" = ( /obj/structure/closet/secure_closet/security, /turf/simulated/floor/tiled, @@ -16300,10 +17353,10 @@ /turf/simulated/floor/plating, /area/ministation/maint/e) "WH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/visible/universal, /turf/simulated/floor/plating, /area/ministation/maint/w) "WL" = ( @@ -16344,6 +17397,13 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) +"WP" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/se) "WQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -16357,12 +17417,16 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) +"WS" = ( +/obj/effect/wallframe_spawn/no_grille, +/turf/simulated/floor/tiled, +/area/ministation/disused) "WT" = ( /obj/structure/bed/padded, /obj/item/bedsheet/green, /obj/random_multi/single_item/captains_spare_id, /turf/simulated/floor/carpet/green, -/area/ministation/court) +/area/ministation/disused_office) "WU" = ( /turf/simulated/floor, /area/space) @@ -16384,10 +17448,6 @@ }, /turf/simulated/floor/plating, /area/ministation/maint/se) -"WX" = ( -/obj/machinery/cryopod, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) "WY" = ( /obj/effect/wallframe_spawn/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -16399,9 +17459,13 @@ /turf/simulated/floor/tiled, /area/ministation/security) "WZ" = ( -/obj/item/chems/syringe/drugs, +/obj/machinery/light/small, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/obj/machinery/atmospherics/portables_connector{ + dir = 8 + }, /turf/simulated/floor/plating, -/area/ministation/maint/w) +/area/ministation/ai_sat) "Xd" = ( /obj/structure/bed/chair{ dir = 4 @@ -16431,10 +17495,33 @@ }, /turf/simulated/floor, /area/ministation/atmospherics) +"Xk" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) "Xl" = ( /obj/structure/lattice, /turf/simulated/wall/r_wall, /area/ministation/cryo) +"Xo" = ( +/obj/effect/decal/cleanable/filth, +/obj/effect/decal/cleanable/filth, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) +"Xp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) "Xr" = ( /obj/abstract/landmark{ name = "bluespace_a" @@ -16451,10 +17538,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass/security{ - id_tag = "secdoor"; - name = "security outer airlock" - }, /turf/simulated/floor/tiled, /area/ministation/security) "Xt" = ( @@ -16481,13 +17564,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/ministation/hall/n) -"Xz" = ( -/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 8 - }, -/obj/structure/lattice, -/turf/space, -/area/space) "XA" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -16497,10 +17573,46 @@ }, /turf/simulated/floor/tiled/white, /area/ministation/medical) -"XB" = ( -/obj/structure/sign/warning/vent_port, -/turf/simulated/wall, +"XD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/ministation/maint/nw) +"XE" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/airlock_sensor{ + id_tag = "starboard_engineering_sensor"; + pixel_y = 20 + }, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "starboard_engineering_airlock"; + pixel_y = 24; + tag_airpump = "starboard_engineering_vent"; + tag_chamber_sensor = "starboard_engineering_sensor"; + tag_exterior_door = "starboard_engineering_airlock_exterior"; + tag_interior_door = "starboard_engineering_airlock_interior" + }, +/turf/simulated/floor/plating, /area/ministation/engine) +"XF" = ( +/obj/machinery/door/airlock, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) +"XJ" = ( +/obj/structure/closet, +/obj/random/maintenance, +/obj/random/suit, +/obj/random/gloves, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/ministation/maint/sw) "XL" = ( /obj/machinery/alarm{ pixel_y = 23 @@ -16543,6 +17655,22 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/s) +"XT" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) +"XV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/w) "XX" = ( /obj/machinery/alarm{ dir = 8; @@ -16605,6 +17733,11 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/w) +"Yh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ministation/disused) "Yi" = ( /obj/structure/cable{ icon_state = "4-8" @@ -16618,14 +17751,6 @@ }, /turf/simulated/floor/plating, /area/ministation/maint/nw) -"Yl" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/engine_setup/empty_canister, -/turf/simulated/floor/tiled, -/area/ministation/engine) "Ym" = ( /obj/structure/cable{ icon_state = "1-2" @@ -16639,22 +17764,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled, /area/ministation/hall/n) -"Yn" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/corner/yellow{ - dir = 10 - }, -/obj/structure/sign/engineering{ - dir = 1; - pixel_y = -32 - }, -/turf/simulated/floor/tiled, -/area/ministation/hall/s) "Yo" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -16664,17 +17773,27 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/e) -"Yt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +"Yp" = ( +/obj/random/trash, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 +/turf/simulated/floor/plating, +/area/ministation/disused) +"Yq" = ( +/turf/simulated/wall{ + can_open = 1 }, -/obj/structure/closet/radiation, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/turf/simulated/floor/tiled, +/area/ministation/maint/ne) +"Yt" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "port_engineering_vent" + }, +/turf/simulated/floor/plating, /area/ministation/engine) "Yv" = ( /obj/structure/cable{ @@ -16706,7 +17825,16 @@ dir = 4 }, /turf/simulated/floor/carpet/green, -/area/ministation/court) +/area/ministation/disused_office) +"YA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) "YB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -16723,6 +17851,25 @@ }, /turf/simulated/floor/tiled, /area/ministation/eva) +"YG" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + req_access = list("ACCESS_EXTERNAL"); + locked = 1; + id_tag = "sat3_airlock_interior" + }, +/obj/machinery/button/access/interior{ + id_tag = "sat3_airlock"; + name = "interior access button"; + pixel_x = 10; + pixel_y = 20 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ministation/ai_sat) "YH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -16745,16 +17892,7 @@ pixel_y = -32 }, /turf/simulated/floor/tiled, -/area/ministation/court) -"YL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor, -/area/ministation/engine) +/area/ministation/disused_office) "YM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -16773,7 +17911,7 @@ dir = 1 }, /turf/simulated/floor/carpet/green, -/area/ministation/court) +/area/ministation/disused_office) "YQ" = ( /obj/structure/closet/lawcloset, /obj/machinery/light{ @@ -16800,6 +17938,9 @@ /obj/machinery/camera/network/ministation/sat, /turf/simulated/floor/plating, /area/ministation/ai_sat) +"YW" = ( +/turf/simulated/wall, +/area/ministation/disused) "YY" = ( /obj/structure/closet/wardrobe/lawyer_black, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -16816,17 +17957,47 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/s) +"Za" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ministation/engine) +"Zb" = ( +/obj/effect/wallframe_spawn/reinforced, +/turf/space, +/area/ministation/hall/w) +"Ze" = ( +/obj/machinery/door/airlock/external{ + locked = 1; + id_tag = "atmos_airlock_exterior"; + autoset_access = 0 + }, +/obj/machinery/button/access/interior{ + id_tag = "atmos_airlock"; + name = "exterior access button"; + pixel_x = -20; + pixel_y = -10; + command = "cycle_exterior" + }, +/turf/simulated/floor, +/area/ministation/atmospherics) "Zf" = ( /obj/effect/decal/cleanable/filth, /turf/simulated/floor/plating, /area/ministation/maint/w) -"Zi" = ( -/obj/machinery/door/airlock/hatch/maintenance{ - name = "Engine Access" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/techfloor/grid, +"Zh" = ( +/obj/machinery/network/relay, +/turf/simulated/floor/tiled, /area/ministation/engine) +"Zj" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/plating, +/area/ministation/maint/sw) "Zk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -16844,7 +18015,7 @@ dir = 5 }, /turf/simulated/floor/tiled, -/area/ministation/court) +/area/ministation/disused_office) "Zm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -16854,12 +18025,46 @@ }, /turf/simulated/floor/tiled, /area/ministation/hop) +"Zo" = ( +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + dir = 0; + id_tag = "pqm_airlock"; + pixel_y = 24; + tag_airpump = "pqm_vent"; + tag_chamber_sensor = "pqm_sensor"; + tag_exterior_door = "pqm_airlock_exterior"; + tag_interior_door = "pqm_airlock_interior" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "pqm_vent" + }, +/obj/machinery/airlock_sensor{ + id_tag = "pqm_sensor"; + pixel_y = 20 + }, +/turf/simulated/floor/plating, +/area/ministation/maint/sw) "Zr" = ( /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/simulated/floor/plating, /area/ministation/maint/ne) +"Zs" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/plating, +/area/ministation/disused) "Zt" = ( /obj/structure/bed/chair/wood/walnut{ dir = 4 @@ -16898,6 +18103,10 @@ }, /turf/simulated/floor/plating, /area/ministation/maint/se) +"ZA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled, +/area/ministation/cargo) "ZB" = ( /obj/structure/closet, /obj/random/maintenance, @@ -16940,7 +18149,7 @@ /area/ministation/cryo) "ZK" = ( /obj/machinery/computer/cryopod{ - dir = 2 + pixel_y = 32 }, /obj/machinery/alarm{ dir = 8; @@ -16951,6 +18160,12 @@ }, /turf/simulated/floor/tiled/dark, /area/ministation/cryo) +"ZL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ministation/cargo) "ZN" = ( /obj/effect/floor_decal/corner/red{ dir = 5 @@ -16962,6 +18177,12 @@ }, /turf/simulated/floor/tiled, /area/ministation/hall/n) +"ZO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor, +/area/ministation/atmospherics) "ZP" = ( /obj/effect/wallframe_spawn/no_grille, /turf/simulated/floor/plating, @@ -17000,19 +18221,13 @@ /obj/item/paper_bin, /obj/item/pen, /turf/simulated/floor/carpet/green, -/area/ministation/court) +/area/ministation/disused_office) "ZW" = ( /obj/machinery/light/small{ dir = 4 }, /turf/simulated/floor/wood/mahogany, /area/ministation/library) -"ZY" = ( -/obj/structure/cryofeed{ - dir = 4 - }, -/turf/simulated/floor/shuttle/blue, -/area/ministation/arrival_shuttle) "ZZ" = ( /obj/structure/table/woodentable_reinforced/walnut, /obj/item/bell, @@ -18088,71 +19303,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -18298,13 +19448,10 @@ aa aa aa aa -NO aa aa aa aa -"} -(6,1,1) = {" aa aa aa @@ -18345,71 +19492,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -18431,10 +19513,13 @@ aa aa aa aa +NO aa aa aa aa +"} +(6,1,1) = {" aa aa aa @@ -18560,8 +19645,6 @@ aa aa aa aa -"} -(7,1,1) = {" aa aa aa @@ -18602,71 +19685,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -18757,6 +19775,8 @@ aa aa aa aa +"} +(7,1,1) = {" aa aa aa @@ -18817,8 +19837,6 @@ aa aa aa aa -"} -(8,1,1) = {" aa aa aa @@ -18859,71 +19877,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -19074,13 +20027,13 @@ aa aa aa aa -"} -(9,1,1) = {" aa aa aa aa aa +"} +(8,1,1) = {" aa aa aa @@ -19116,71 +20069,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -19331,8 +20219,6 @@ aa aa aa aa -"} -(10,1,1) = {" aa aa aa @@ -19373,71 +20259,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -19468,6 +20289,8 @@ aa aa aa aa +"} +(9,1,1) = {" aa aa aa @@ -19588,8 +20411,6 @@ aa aa aa aa -"} -(11,1,1) = {" aa aa aa @@ -19630,71 +20451,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -19790,6 +20546,8 @@ aa aa aa aa +"} +(10,1,1) = {" aa aa aa @@ -19845,8 +20603,6 @@ aa aa aa aa -"} -(12,1,1) = {" aa aa aa @@ -19887,71 +20643,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -20102,8 +20793,6 @@ aa aa aa aa -"} -(13,1,1) = {" aa aa aa @@ -20114,6 +20803,8 @@ aa aa aa aa +"} +(11,1,1) = {" aa aa aa @@ -20144,71 +20835,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -20359,8 +20985,6 @@ aa aa aa aa -"} -(14,1,1) = {" aa aa aa @@ -20401,71 +21025,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -20501,6 +21060,8 @@ aa aa aa aa +"} +(12,1,1) = {" aa aa aa @@ -20616,8 +21177,6 @@ aa aa aa aa -"} -(15,1,1) = {" aa aa aa @@ -20658,71 +21217,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -20823,6 +21317,8 @@ aa aa aa aa +"} +(13,1,1) = {" aa aa aa @@ -20873,8 +21369,6 @@ aa aa aa aa -"} -(16,1,1) = {" aa aa aa @@ -20915,71 +21409,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -21130,8 +21559,6 @@ aa aa aa aa -"} -(17,1,1) = {" aa aa aa @@ -21147,6 +21574,8 @@ aa aa aa aa +"} +(14,1,1) = {" aa aa aa @@ -21172,71 +21601,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -21387,8 +21751,6 @@ aa aa aa aa -"} -(18,1,1) = {" aa aa aa @@ -21429,71 +21791,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -21534,6 +21831,8 @@ aa aa aa aa +"} +(15,1,1) = {" aa aa aa @@ -21644,8 +21943,6 @@ aa aa aa aa -"} -(19,1,1) = {" aa aa aa @@ -21686,71 +21983,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -21856,6 +22088,8 @@ aa aa aa aa +"} +(16,1,1) = {" aa aa aa @@ -21901,8 +22135,6 @@ aa aa aa aa -"} -(20,1,1) = {" aa aa aa @@ -21943,71 +22175,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -22158,8 +22325,6 @@ aa aa aa aa -"} -(21,1,1) = {" aa aa aa @@ -22180,6 +22345,8 @@ aa aa aa aa +"} +(17,1,1) = {" aa aa aa @@ -22200,71 +22367,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -22415,8 +22517,6 @@ aa aa aa aa -"} -(22,1,1) = {" aa aa aa @@ -22457,71 +22557,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -22567,6 +22602,8 @@ aa aa aa aa +"} +(18,1,1) = {" aa aa aa @@ -22672,8 +22709,6 @@ aa aa aa aa -"} -(23,1,1) = {" aa aa aa @@ -22714,71 +22749,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -22889,6 +22859,8 @@ aa aa aa aa +"} +(19,1,1) = {" aa aa aa @@ -22929,8 +22901,6 @@ aa aa aa aa -"} -(24,1,1) = {" aa aa aa @@ -22947,6 +22917,7 @@ aa aa aa aa +af aa aa aa @@ -22971,71 +22942,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -23186,8 +23092,6 @@ aa aa aa aa -"} -(25,1,1) = {" aa aa aa @@ -23212,6 +23116,8 @@ aa aa aa aa +"} +(20,1,1) = {" aa aa aa @@ -23228,71 +23134,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -23443,8 +23284,6 @@ aa aa aa aa -"} -(26,1,1) = {" aa aa aa @@ -23485,71 +23324,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -23599,6 +23373,8 @@ aa aa aa aa +"} +(21,1,1) = {" aa aa aa @@ -23700,8 +23476,6 @@ aa aa aa aa -"} -(27,1,1) = {" aa aa aa @@ -23742,71 +23516,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -23921,6 +23630,8 @@ aa aa aa aa +"} +(22,1,1) = {" aa aa aa @@ -23957,8 +23668,6 @@ aa aa aa aa -"} -(28,1,1) = {" aa aa aa @@ -23999,71 +23708,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -24214,8 +23858,6 @@ aa aa aa aa -"} -(29,1,1) = {" aa aa aa @@ -24245,6 +23887,8 @@ aa aa aa aa +"} +(23,1,1) = {" aa aa aa @@ -24256,71 +23900,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -24471,8 +24050,6 @@ aa aa aa aa -"} -(30,1,1) = {" aa aa aa @@ -24513,71 +24090,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -24632,6 +24144,8 @@ aa aa aa aa +"} +(24,1,1) = {" aa aa aa @@ -24728,8 +24242,6 @@ aa aa aa aa -"} -(31,1,1) = {" aa aa aa @@ -24770,71 +24282,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -24954,6 +24401,8 @@ aa aa aa aa +"} +(25,1,1) = {" aa aa aa @@ -24985,8 +24434,6 @@ aa aa aa aa -"} -(32,1,1) = {" aa aa aa @@ -25027,71 +24474,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -25242,8 +24624,6 @@ aa aa aa aa -"} -(33,1,1) = {" aa aa aa @@ -25278,77 +24658,14 @@ aa aa aa aa +"} +(26,1,1) = {" aa aa aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -25499,8 +24816,6 @@ aa aa aa aa -"} -(34,1,1) = {" aa aa aa @@ -25541,71 +24856,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -25665,6 +24915,8 @@ aa aa aa aa +"} +(27,1,1) = {" aa aa aa @@ -25756,8 +25008,6 @@ aa aa aa aa -"} -(35,1,1) = {" aa aa aa @@ -25798,71 +25048,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -25987,6 +25172,8 @@ aa aa aa aa +"} +(28,1,1) = {" aa aa aa @@ -26013,8 +25200,6 @@ aa aa aa aa -"} -(36,1,1) = {" aa aa aa @@ -26055,71 +25240,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -26270,8 +25390,6 @@ aa aa aa aa -"} -(37,1,1) = {" aa aa aa @@ -26311,72 +25429,9 @@ aa aa aa aa +"} +(29,1,1) = {" aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -26527,8 +25582,6 @@ aa aa aa aa -"} -(38,1,1) = {" aa aa aa @@ -26569,71 +25622,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -26698,6 +25686,8 @@ aa aa aa aa +"} +(30,1,1) = {" aa aa aa @@ -26784,8 +25774,6 @@ aa aa aa aa -"} -(39,1,1) = {" aa aa aa @@ -26826,71 +25814,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -27020,6 +25943,8 @@ aa aa aa aa +"} +(31,1,1) = {" aa aa aa @@ -27041,8 +25966,6 @@ aa aa aa aa -"} -(40,1,1) = {" aa aa aa @@ -27083,71 +26006,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -27298,8 +26156,6 @@ aa aa aa aa -"} -(41,1,1) = {" aa aa aa @@ -27340,75 +26196,12 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa aa +"} +(32,1,1) = {" aa aa aa @@ -27555,8 +26348,6 @@ aa aa aa aa -"} -(42,1,1) = {" aa aa aa @@ -27597,71 +26388,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -27731,6 +26457,8 @@ aa aa aa aa +"} +(33,1,1) = {" aa aa aa @@ -27812,8 +26540,6 @@ aa aa aa aa -"} -(43,1,1) = {" aa aa aa @@ -27854,71 +26580,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -28053,6 +26714,8 @@ aa aa aa aa +"} +(34,1,1) = {" aa aa aa @@ -28069,8 +26732,6 @@ aa aa aa aa -"} -(44,1,1) = {" aa aa aa @@ -28111,71 +26772,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -28326,8 +26922,6 @@ aa aa aa aa -"} -(45,1,1) = {" aa aa aa @@ -28368,71 +26962,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -28442,6 +26971,8 @@ aa aa aa aa +"} +(35,1,1) = {" aa aa aa @@ -28504,6 +27035,8 @@ aa aa aa aa +af +af aa aa aa @@ -28583,8 +27116,6 @@ aa aa aa aa -"} -(46,1,1) = {" aa aa aa @@ -28625,71 +27156,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -28762,6 +27228,8 @@ aa aa aa aa +"} +(36,1,1) = {" aa aa aa @@ -28822,6 +27290,11 @@ aa aa aa aa +af +af +af +af +af aa aa aa @@ -28840,8 +27313,6 @@ aa aa aa aa -"} -(47,1,1) = {" aa aa aa @@ -28882,71 +27353,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -29079,6 +27485,8 @@ aa aa aa aa +"} +(37,1,1) = {" aa aa aa @@ -29097,8 +27505,6 @@ aa aa aa aa -"} -(48,1,1) = {" aa aa aa @@ -29139,72 +27545,12 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa +af +af +af +af +af aa aa aa @@ -29281,7 +27627,6 @@ aa aa aa aa -ab aa aa aa @@ -29354,8 +27699,6 @@ aa aa aa aa -"} -(49,1,1) = {" aa aa aa @@ -29396,74 +27739,11 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wj -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa +"} +(38,1,1) = {" aa aa aa @@ -29523,6 +27803,12 @@ aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -29611,8 +27897,6 @@ aa aa aa aa -"} -(50,1,1) = {" aa aa aa @@ -29653,71 +27937,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -29780,6 +27999,8 @@ aa aa aa aa +"} +(39,1,1) = {" aa aa aa @@ -29832,11 +28053,19 @@ aa aa aa aa +af +af aa aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -29868,8 +28097,6 @@ aa aa aa aa -"} -(51,1,1) = {" aa aa aa @@ -29910,71 +28137,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -30094,6 +28256,8 @@ aa aa aa aa +"} +(40,1,1) = {" aa aa aa @@ -30125,8 +28289,6 @@ aa aa aa aa -"} -(52,1,1) = {" aa aa aa @@ -30148,12 +28310,18 @@ aa aa aa aa +af +af aa aa aa aa aa aa +af +af +af +af aa aa aa @@ -30167,71 +28335,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -30382,13 +28485,6 @@ aa aa aa aa -"} -(53,1,1) = {" -aa -aa -aa -aa -aa aa aa aa @@ -30417,6 +28513,8 @@ aa aa aa aa +"} +(41,1,1) = {" aa aa aa @@ -30424,71 +28522,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -30545,11 +28578,15 @@ aa aa aa aa +af aa aa aa aa aa +af +af +af aa aa aa @@ -30639,8 +28676,6 @@ aa aa aa aa -"} -(54,1,1) = {" aa aa aa @@ -30681,71 +28716,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -30800,6 +28770,8 @@ aa aa aa aa +"} +(42,1,1) = {" aa aa aa @@ -30869,6 +28841,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -30896,8 +28871,6 @@ aa aa aa aa -"} -(55,1,1) = {" aa aa aa @@ -30938,71 +28911,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -31119,6 +29027,8 @@ aa aa aa aa +"} +(43,1,1) = {" aa aa aa @@ -31153,8 +29063,6 @@ aa aa aa aa -"} -(56,1,1) = {" aa aa aa @@ -31177,6 +29085,8 @@ aa aa aa aa +af +af aa aa aa @@ -31188,6 +29098,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -31195,71 +29108,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -31410,8 +29258,6 @@ aa aa aa aa -"} -(57,1,1) = {" aa aa aa @@ -31438,6 +29284,8 @@ aa aa aa aa +"} +(44,1,1) = {" aa aa aa @@ -31452,71 +29300,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -31559,6 +29342,8 @@ aa aa aa aa +af +af aa aa aa @@ -31569,6 +29354,10 @@ aa aa aa aa +af +af +af +af aa aa aa @@ -31667,8 +29456,6 @@ aa aa aa aa -"} -(58,1,1) = {" aa aa aa @@ -31709,71 +29496,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -31819,6 +29541,8 @@ aa aa aa aa +"} +(45,1,1) = {" aa aa aa @@ -31870,6 +29594,8 @@ aa aa aa aa +af +af aa aa aa @@ -31885,6 +29611,10 @@ aa aa aa aa +af +af +af +af aa aa aa @@ -31924,8 +29654,6 @@ aa aa aa aa -"} -(59,1,1) = {" aa aa aa @@ -31966,71 +29694,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -32135,6 +29798,8 @@ aa aa aa aa +"} +(46,1,1) = {" aa aa aa @@ -32181,18 +29846,21 @@ aa aa aa aa -"} -(60,1,1) = {" aa aa aa aa +af +af +af +af aa aa aa aa aa aa +af aa aa aa @@ -32200,6 +29868,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -32223,71 +29894,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -32438,8 +30044,6 @@ aa aa aa aa -"} -(61,1,1) = {" aa aa aa @@ -32451,6 +30055,8 @@ aa aa aa aa +"} +(47,1,1) = {" aa aa aa @@ -32480,71 +30086,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -32566,12 +30107,17 @@ aa aa aa aa +af +af +af aa aa aa aa aa aa +af +af aa aa aa @@ -32585,6 +30131,8 @@ aa aa aa aa +af +af aa aa aa @@ -32695,8 +30243,6 @@ aa aa aa aa -"} -(62,1,1) = {" aa aa aa @@ -32737,71 +30283,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -32831,6 +30312,8 @@ aa aa aa aa +"} +(48,1,1) = {" aa aa aa @@ -32882,12 +30365,18 @@ aa aa aa aa +af +af aa aa aa aa aa aa +af +af +af +af aa aa aa @@ -32899,6 +30388,8 @@ aa aa aa aa +af +af aa aa aa @@ -32952,8 +30443,6 @@ aa aa aa aa -"} -(63,1,1) = {" aa aa aa @@ -32994,71 +30483,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -33072,6 +30496,7 @@ aa aa aa aa +ab aa aa aa @@ -33144,6 +30569,8 @@ aa aa aa aa +"} +(49,1,1) = {" aa aa aa @@ -33198,20 +30625,33 @@ aa aa aa aa +af +af +af aa +af +af +af +af +af aa aa aa aa +af +af aa aa aa aa +af +af +af +af aa aa -"} -(64,1,1) = {" aa +ab aa aa aa @@ -33251,71 +30691,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -33451,6 +30826,8 @@ aa aa aa aa +"} +(50,1,1) = {" aa aa aa @@ -33466,8 +30843,6 @@ aa aa aa aa -"} -(65,1,1) = {" aa aa aa @@ -33507,76 +30882,29 @@ aa aa aa aa +af +af +af aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp +af +af +af +af +af aa aa +af +af +af +af +af aa aa +af +af +af +af +af aa aa aa @@ -33723,8 +31051,6 @@ aa aa aa aa -"} -(66,1,1) = {" aa aa aa @@ -33757,6 +31083,8 @@ aa aa aa aa +"} +(51,1,1) = {" aa aa aa @@ -33765,71 +31093,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -33876,15 +31139,36 @@ aa aa aa aa +af +af +af aa +af +af +af +af +af aa +af +af +af +af +af +af aa aa aa +af +af +af +af aa aa aa aa +af +af +af aa aa aa @@ -33980,8 +31264,6 @@ aa aa aa aa -"} -(67,1,1) = {" aa aa aa @@ -34022,71 +31304,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -34123,6 +31340,8 @@ aa aa aa aa +"} +(52,1,1) = {" aa aa aa @@ -34181,13 +31400,33 @@ aa aa aa aa +af +af +af +af aa aa +af +af +af +af +af +af aa aa aa +af +af +af +af aa aa +af +af +af +af +af +af aa aa aa @@ -34237,8 +31476,6 @@ aa aa aa aa -"} -(68,1,1) = {" aa aa aa @@ -34279,71 +31516,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -34425,6 +31597,8 @@ aa aa aa aa +"} +(53,1,1) = {" aa aa aa @@ -34484,18 +31658,32 @@ aa aa aa aa +af +af +af aa aa aa +af +af +af +af aa aa aa aa +af +af +af aa aa aa -"} -(69,1,1) = {" +af +af +af +af +af +af aa aa aa @@ -34536,71 +31724,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -34731,6 +31854,8 @@ aa aa aa aa +"} +(54,1,1) = {" aa aa aa @@ -34751,8 +31876,6 @@ aa aa aa aa -"} -(70,1,1) = {" aa aa aa @@ -34792,84 +31915,32 @@ aa aa aa aa +af aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wj -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa aa +af +af +af +af aa aa aa aa aa +af +af aa aa aa +af +af +af +af +af +af aa aa aa @@ -34877,6 +31948,7 @@ aa aa aa aa +af aa aa aa @@ -35008,8 +32080,6 @@ aa aa aa aa -"} -(71,1,1) = {" aa aa aa @@ -35041,6 +32111,8 @@ aa aa aa aa +"} +(55,1,1) = {" aa aa aa @@ -35050,71 +32122,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wj -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -35172,6 +32179,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -35183,6 +32193,11 @@ aa aa aa aa +af +af +af +af +af aa aa aa @@ -35265,8 +32280,6 @@ aa aa aa aa -"} -(72,1,1) = {" aa aa aa @@ -35307,71 +32320,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -35402,7 +32350,6 @@ aa aa aa aa -ab aa aa aa @@ -35421,6 +32368,8 @@ aa aa aa aa +"} +(56,1,1) = {" aa aa aa @@ -35482,6 +32431,7 @@ aa aa aa aa +af aa aa aa @@ -35501,6 +32451,8 @@ aa aa aa aa +af +af aa aa aa @@ -35522,8 +32474,6 @@ aa aa aa aa -"} -(73,1,1) = {" aa aa aa @@ -35564,71 +32514,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -35740,6 +32625,8 @@ aa aa aa aa +"} +(57,1,1) = {" aa aa aa @@ -35779,8 +32666,6 @@ aa aa aa aa -"} -(74,1,1) = {" aa aa aa @@ -35801,6 +32686,12 @@ aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -35820,72 +32711,6 @@ aa aa aa aa -af -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -36036,8 +32861,6 @@ aa aa aa aa -"} -(75,1,1) = {" aa aa aa @@ -36059,6 +32882,8 @@ aa aa aa aa +"} +(58,1,1) = {" aa aa aa @@ -36077,72 +32902,6 @@ aa aa aa aa -af -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -36184,6 +32943,12 @@ aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -36193,6 +32958,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -36293,8 +33061,6 @@ aa aa aa aa -"} -(76,1,1) = {" aa aa aa @@ -36335,71 +33101,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -36438,6 +33139,8 @@ aa aa aa aa +"} +(59,1,1) = {" aa aa aa @@ -36497,12 +33200,24 @@ aa aa aa aa +af +af +af +af +af +af aa aa aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -36519,6 +33234,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -36550,8 +33268,6 @@ aa aa aa aa -"} -(77,1,1) = {" aa aa aa @@ -36592,71 +33308,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -36745,6 +33396,8 @@ aa aa aa aa +"} +(60,1,1) = {" aa aa aa @@ -36804,15 +33457,25 @@ aa aa aa aa +af +af +af +af aa aa aa -"} -(78,1,1) = {" aa aa aa aa +af +af +af +af +af +af +af +af aa aa aa @@ -36828,6 +33491,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -36849,71 +33515,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -37052,6 +33653,8 @@ aa aa aa aa +"} +(61,1,1) = {" aa aa aa @@ -37064,8 +33667,6 @@ aa aa aa aa -"} -(79,1,1) = {" aa aa aa @@ -37106,71 +33707,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -37179,6 +33715,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -37186,17 +33725,32 @@ aa aa aa aa +af +af +af +af +af +af +af +af +af aa aa aa aa aa +af +af +af aa aa aa aa aa aa +af +af +af aa aa aa @@ -37226,7 +33780,6 @@ aa aa aa aa -ab aa aa aa @@ -37321,8 +33874,6 @@ aa aa aa aa -"} -(80,1,1) = {" aa aa aa @@ -37359,75 +33910,12 @@ aa aa aa aa +"} +(62,1,1) = {" aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -37494,15 +33982,32 @@ aa aa aa aa +af +af +af +af +af +af +af +af +af aa aa aa +af aa +af +af +af +af aa aa aa aa aa +af +af +af aa aa aa @@ -37578,8 +34083,6 @@ aa aa aa aa -"} -(81,1,1) = {" aa aa aa @@ -37620,71 +34123,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -37729,6 +34167,8 @@ aa aa aa aa +"} +(63,1,1) = {" aa aa aa @@ -37799,9 +34239,24 @@ aa aa aa aa +af +af +af +af +af +af +af +af +af aa aa aa +af +af +af +af +af +af aa aa aa @@ -37835,8 +34290,6 @@ aa aa aa aa -"} -(82,1,1) = {" aa aa aa @@ -37877,71 +34330,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -38036,6 +34424,8 @@ aa aa aa aa +"} +(64,1,1) = {" aa aa aa @@ -38092,8 +34482,6 @@ aa aa aa aa -"} -(83,1,1) = {" aa aa aa @@ -38109,10 +34497,22 @@ aa aa aa aa +af +af +af +af +af +af +af aa aa aa aa +af +af +af +af +af aa aa aa @@ -38134,71 +34534,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -38346,11 +34681,11 @@ aa aa aa aa +"} +(65,1,1) = {" aa aa aa -"} -(84,1,1) = {" aa aa aa @@ -38391,71 +34726,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -38484,9 +34754,22 @@ aa aa aa aa +af +af +af +af +af +af +af aa aa aa +af +af +af +af +af +af aa aa aa @@ -38606,8 +34889,6 @@ aa aa aa aa -"} -(85,1,1) = {" aa aa aa @@ -38648,71 +34929,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -38722,6 +34938,8 @@ aa aa aa aa +"} +(66,1,1) = {" aa aa aa @@ -38780,6 +34998,8 @@ aa aa aa aa +af +af aa aa aa @@ -38794,10 +35014,19 @@ aa aa aa aa +af +af +af aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -38813,6 +35042,7 @@ aa aa aa aa +af aa aa aa @@ -38825,6 +35055,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -38863,8 +35096,6 @@ aa aa aa aa -"} -(86,1,1) = {" aa aa aa @@ -38905,71 +35136,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -39029,6 +35195,8 @@ aa aa aa aa +"} +(67,1,1) = {" aa aa aa @@ -39086,8 +35254,16 @@ aa aa aa aa +af +af +af +af aa aa +af +af +af +af aa aa aa @@ -39103,10 +35279,16 @@ aa aa aa aa +af +af +af +af aa aa aa aa +af +af aa aa aa @@ -39120,8 +35302,6 @@ aa aa aa aa -"} -(87,1,1) = {" aa aa aa @@ -39132,6 +35312,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -39162,71 +35345,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -39334,6 +35452,8 @@ aa aa aa aa +"} +(68,1,1) = {" aa aa aa @@ -39377,8 +35497,6 @@ aa aa aa aa -"} -(88,1,1) = {" aa aa aa @@ -39393,8 +35511,16 @@ aa aa aa aa +af +af +af +af aa aa +af +af +af +af aa aa aa @@ -39412,78 +35538,17 @@ aa aa aa aa +af aa aa aa aa +af +af +af aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -39504,6 +35569,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -39634,8 +35702,6 @@ aa aa aa aa -"} -(89,1,1) = {" aa aa aa @@ -39643,6 +35709,8 @@ aa aa aa aa +"} +(69,1,1) = {" aa aa aa @@ -39676,71 +35744,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -39765,8 +35768,17 @@ aa aa aa aa +af +af +af +af aa aa +af +af +af +af +af aa aa aa @@ -39775,6 +35787,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -39783,6 +35798,12 @@ aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -39891,8 +35912,6 @@ aa aa aa aa -"} -(90,1,1) = {" aa aa aa @@ -39933,71 +35952,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -40012,6 +35966,8 @@ aa aa aa aa +"} +(70,1,1) = {" aa aa aa @@ -40066,16 +36022,31 @@ aa aa aa aa +af +af aa +af +af +af +af aa aa +af +af +af +af aa aa aa aa +ab aa aa aa +af +af +af +af aa aa aa @@ -40084,6 +36055,12 @@ aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -40148,8 +36125,6 @@ aa aa aa aa -"} -(91,1,1) = {" aa aa aa @@ -40190,71 +36165,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -40313,24 +36223,8 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad -ad -aa +"} +(71,1,1) = {" aa aa aa @@ -40383,6 +36277,14 @@ aa aa aa aa +af +af +af +af +af +af +af +af aa aa aa @@ -40399,20 +36301,26 @@ aa aa aa aa +af +af +af aa aa aa aa aa aa -"} -(92,1,1) = {" -aa -aa aa aa +af +af +af +af +af +af aa aa +ab aa aa aa @@ -40447,71 +36355,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -40581,22 +36424,6 @@ aa aa aa aa -ad -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -ad aa aa aa @@ -40653,6 +36480,8 @@ aa aa aa aa +"} +(72,1,1) = {" aa aa aa @@ -40662,8 +36491,6 @@ aa aa aa aa -"} -(93,1,1) = {" aa aa aa @@ -40704,74 +36531,17 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wj -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa +af +af +af +af +af +af +af +af aa aa aa @@ -40782,11 +36552,15 @@ aa aa aa aa +af aa aa aa aa aa +af +af +af aa aa aa @@ -40795,6 +36569,9 @@ aa aa aa aa +af +af +af aa aa aa @@ -40838,22 +36615,10 @@ aa aa aa aa -Ht -Tx -Gp -Tx -Gp -Tx -Gp -Tx -TA -Gp aa -Tx -Gp aa +ab aa -Ht aa aa aa @@ -40919,8 +36684,6 @@ aa aa aa aa -"} -(94,1,1) = {" aa aa aa @@ -40961,71 +36724,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -41039,6 +36737,8 @@ aa aa aa aa +"} +(73,1,1) = {" aa aa aa @@ -41090,37 +36790,33 @@ aa aa aa aa +af +af +af +af +af +af +af +af aa aa aa aa aa -Ht -GQ -GQ -GQ -GQ -GQ -GQ -GQ -ad -GQ -Tx -Gq -PG -OG -Gp -Ht aa aa aa aa aa +af +af +af aa aa aa aa aa +af aa aa aa @@ -41176,8 +36872,6 @@ aa aa aa aa -"} -(95,1,1) = {" aa aa aa @@ -41218,71 +36912,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -41330,11 +36959,6 @@ aa aa aa aa -yi -yk -yk -yk -yi aa aa aa @@ -41352,26 +36976,6 @@ aa aa aa aa -Ht -GQ -GQ -GQ -GQ -GQ -GQ -GQ -ad -GQ -PG -Gp -Tx -OG -Gq -Ht -aa -aa -aa -aa aa aa aa @@ -41390,6 +36994,8 @@ aa aa aa aa +"} +(74,1,1) = {" aa aa aa @@ -41429,12 +37035,11 @@ aa aa aa aa +af aa aa aa aa -"} -(96,1,1) = {" aa aa aa @@ -41442,6 +37047,14 @@ aa aa aa aa +af +af +af +af +af +af +af +af aa aa aa @@ -41451,6 +37064,11 @@ aa aa aa aa +af +af +af +af +af aa aa aa @@ -41459,6 +37077,8 @@ aa aa aa aa +af +af aa aa aa @@ -41475,73 +37095,11 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa +af +af +af aa aa aa @@ -41587,11 +37145,6 @@ aa aa aa aa -yk -kX -zR -zl -yk aa aa aa @@ -41609,22 +37162,6 @@ aa aa aa aa -Ht -GQ -GQ -GQ -GQ -GQ -GQ -GQ -ad -GQ -Tx -Gq -PG -OG -Gp -Ht aa aa aa @@ -41690,8 +37227,6 @@ aa aa aa aa -"} -(97,1,1) = {" aa aa aa @@ -41716,6 +37251,8 @@ aa aa aa aa +"} +(75,1,1) = {" aa aa aa @@ -41732,71 +37269,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -41820,6 +37292,7 @@ aa aa aa aa +af aa aa aa @@ -41831,6 +37304,14 @@ aa aa aa aa +af +af +af +af +af +af +af +af aa aa aa @@ -41840,48 +37321,47 @@ aa aa aa aa +af +af +af +af +af aa aa aa aa -yk -zm -yj -zm -yk aa aa aa +af +af +af aa aa aa aa +af +af +af +af +af +af +af aa aa aa aa +af +af +af +af +af +af aa aa aa aa aa -ad -Ht -GQ -GQ -GQ -GQ -GQ -GQ -GQ -ad -GQ -PG -Gp -Tx -OG -Gq -Ht aa aa aa @@ -41892,7 +37372,6 @@ aa aa aa aa -ab aa aa aa @@ -41947,8 +37426,6 @@ aa aa aa aa -"} -(98,1,1) = {" aa aa aa @@ -41989,71 +37466,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -42068,30 +37480,6 @@ aa aa aa aa -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ad -la -mN -la -ad -ad -ad -la -mN -la -mN -la aa aa aa @@ -42100,13 +37488,6 @@ aa aa aa aa -yi -yi -yi -GU -yi -yi -yi aa aa aa @@ -42123,26 +37504,12 @@ aa aa aa aa -Ht -GQ -GQ -GQ -GQ -GQ -GQ -GQ -ad -GQ -Tx -Gq -PG -OG -Gp -Ht aa aa aa aa +"} +(76,1,1) = {" aa aa aa @@ -42195,6 +37562,59 @@ aa aa aa aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +af +af +af +af +af +af +af aa aa aa @@ -42204,8 +37624,6 @@ aa aa aa aa -"} -(99,1,1) = {" aa aa aa @@ -42246,71 +37664,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -42325,45 +37678,12 @@ aa aa aa aa -ad -ad -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -ac -ad -la -mO -la -ad -ad -ad -la -mO -la -mO -la -ad -ad aa aa aa aa aa aa -yi -yL -Tw -yj -yj -yL -yi aa aa aa @@ -42380,22 +37700,6 @@ aa aa aa aa -Ht -GQ -GQ -GQ -GQ -GQ -GQ -GQ -ad -GQ -PG -Gp -Tx -OG -Gq -Ht aa aa aa @@ -42462,7 +37766,7 @@ aa aa aa "} -(100,1,1) = {" +(77,1,1) = {" aa aa aa @@ -42503,71 +37807,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -42581,47 +37820,9 @@ aa aa aa aa -ad -ad -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -kZ -kZ -la -mP -Sd -kZ -la -kZ -la -mP -Sd -mP -la -ad -kZ -la -la -kZ -kZ -kZ -kZ -yi -OS -zo -zo -zo -yj -yi aa +af +af aa aa aa @@ -42635,38 +37836,43 @@ aa aa aa aa +af +af +af aa aa -Ht -GQ -GQ -GQ -GQ -GQ -GQ -GQ -ad -GQ -Tx -Gq -PG -OG -Gp -Ht aa aa aa aa aa +af +af +af +af aa aa aa aa +af +af +af +af +af aa aa aa aa aa +af +af +af +af +af +af +af +af +aa aa aa aa @@ -42718,8 +37924,6 @@ aa aa aa aa -"} -(101,1,1) = {" aa aa aa @@ -42760,71 +37964,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -42838,46 +37977,6 @@ aa aa aa aa -ad -ad -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -kZ -lI -mh -mQ -mh -oh -oH -rc -mh -mQ -mh -rW -kZ -ad -kZ -uB -mS -vO -mP -mO -mP -ei -yj -yj -yj -yj -yj -yk aa aa aa @@ -42894,22 +37993,6 @@ aa aa aa aa -Ht -GQ -GQ -GQ -GQ -GQ -GQ -GQ -ad -GQ -PG -Gp -Tx -OG -Gq -Ht aa aa aa @@ -42939,6 +38022,16 @@ aa aa aa aa +"} +(78,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -42975,8 +38068,6 @@ aa aa aa aa -"} -(102,1,1) = {" aa aa aa @@ -43006,10 +38097,42 @@ aa aa aa aa +af +af +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +af +af +af +aa aa aa aa aa +af +af +af +af +af +af +af +af +af +aa +aa +aa aa aa aa @@ -43017,71 +38140,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -43095,46 +38153,6 @@ aa aa aa aa -ad -ad -Pp -Pp -Pp -Pp -LJ -Pp -Pp -Pp -Pp -Pp -la -lJ -mi -mR -nB -mS -mS -mS -mS -mR -rm -rX -kZ -kZ -kZ -uC -mS -vP -kZ -la -kZ -yi -yM -zo -zo -zo -yj -yi aa aa aa @@ -43151,22 +38169,6 @@ aa aa aa aa -Ht -GQ -GQ -GQ -GQ -GQ -GQ -GQ -ad -GQ -Tx -Gq -PG -OG -Gp -Ht aa aa aa @@ -43232,8 +38234,6 @@ aa aa aa aa -"} -(103,1,1) = {" aa aa aa @@ -43274,76 +38274,13 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa aa aa +"} +(79,1,1) = {" aa aa aa @@ -43351,47 +38288,6 @@ aa aa aa aa -ad -ad -ad -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -la -lJ -mj -mS -mS -mS -mS -mS -mS -nB -rn -mS -mS -te -mS -mS -nB -nB -mS -xf -la -yk -yj -yj -zS -yj -yj -yk aa aa aa @@ -43408,22 +38304,6 @@ aa aa aa aa -Ht -GQ -GQ -GQ -GQ -GQ -GQ -GQ -ad -GQ -PG -Gp -Tx -OG -Gq -Ht aa aa aa @@ -43474,13 +38354,22 @@ aa aa aa aa +af +af aa aa aa aa +af +af +af +af +af aa aa aa +af +af aa aa aa @@ -43489,8 +38378,15 @@ aa aa aa aa -"} -(104,1,1) = {" +af +af +af +af +af +af +af +af +af aa aa aa @@ -43531,71 +38427,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wj -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -43608,47 +38439,22 @@ aa aa aa aa -ad -ad -ad -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -kZ -lK -mj -mS -nB -oi -oI -oI -pY -oI -ro -pY -oI -tf -tW -mS -mS -mS -mS -xf -la -yk -yj -zo -zo -zo -yj -yk +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -43665,22 +38471,6 @@ aa aa aa aa -Ht -GQ -GQ -GQ -GQ -GQ -GQ -GQ -ad -GQ -Tx -Gq -PG -OG -Gp -Ht aa aa aa @@ -43747,7 +38537,7 @@ aa aa aa "} -(105,1,1) = {" +(80,1,1) = {" aa aa aa @@ -43788,71 +38578,6 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp aa aa aa @@ -43864,54 +38589,18 @@ aa aa aa aa -ad -ad -ad -ad -ad -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -Pp -kZ -lL -mk -nC -nC -oj -nC -nC -nC -nC -rp -nC -ss -tg -tX -nC -vb -mS -mS -kE -la -yk -yj -yj -yj -yj -yj -yk aa aa aa aa aa aa +af +af +af +af +af +af aa aa aa @@ -43919,30 +38608,21 @@ aa aa aa aa -ad aa aa -Ht -GQ -GQ -GQ -GQ -GQ -GQ -GQ -ad -GQ -PG -Gp -Tx -OG -Gq -Ht +aa +af +af +af aa aa aa aa aa +af +af +af +aa aa aa aa @@ -43957,6 +38637,16 @@ aa aa aa aa +af +af +af +af +af +af +af +aa +aa +aa aa aa aa @@ -44003,8 +38693,6 @@ aa aa aa aa -"} -(106,1,1) = {" aa aa aa @@ -44045,71 +38733,6598 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(81,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(82,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(83,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(84,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(85,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(86,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(87,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(88,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(89,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +yS +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(90,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(91,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +jc +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(92,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(93,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +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 +af +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(94,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +af +af +af +af +af +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(95,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +af +af +af +af +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(96,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +af +af +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ad +la +PN +kZ +ad +ad +ad +la +PN +kZ +PN +la +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +GQ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(97,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +ad +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +ac +ad +la +PY +kZ +ad +ad +ad +la +Nu +kZ +Bj +la +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +GJ +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(98,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +ad +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +ac +ad +la +Qp +kZ +ad +ad +ad +la +Qp +kZ +Qp +la +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +GJ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(99,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +ad +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +ac +ad +Zb +Qp +kZ +ad +ad +ad +Zb +Qp +kZ +Qp +Zb +ad +ad +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +FE +FE +FE +Gh +Gh +aa +GH +aa +Gh +Gh +FE +FE +FE +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(100,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +ad +Pp +Pp +Pp +Pp +LJ +Pp +Pp +Pp +Pp +Pp +kZ +kZ +la +OT +Sd +kZ +la +kZ +la +OT +Sd +OT +la +ad +kZ +la +la +kZ +kZ +kZ +kZ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +FF +Ga +Ga +Ga +Ga +Gw +Jt +GM +GN +GN +GN +GN +GO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(101,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +ad +ad +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +kZ +lI +mh +Ry +mh +oh +oH +rc +mh +Ry +mh +rW +kZ +ad +kZ +uB +mS +vO +mP +mO +Uz +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +FG +FG +FG +FG +FG +aa +Jt +aa +FG +FG +FG +FG +FG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(102,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +ad +ad +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +la +lJ +mi +mR +nB +mS +mS +mS +mS +mR +rm +rX +kZ +kZ +kZ +uC +mS +vP +kZ +kZ +kZ +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +aa +aa +aa +Jt +aa +aa +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 +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(103,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +ad +ad +ad +ad +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +Pp +la +MG +Rn +Da +Db +PX +PX +PX +PX +rE +rn +Vs +mS +te +mS +mS +nB +nB +mS +xf +la +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +FE +FE +FE +FE +FE +aa +Jt +aa +FE +FE +FE +FE +FE +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(104,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +ad +ad +ad +ad +ad +ad +au +ie +cy +cy +ie +au +ad +kZ +lK +mj +mS +Sn +oi +oI +oI +pY +oI +ro +MY +oI +tf +tW +mS +mS +mS +mS +xf +la +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +FF +Ga +Ga +Ga +Ga +Gw +Jt +GM +GN +GN +GN +GN +GO +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(105,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +ad +ad +ad +ad +ad +ad +au +Rq +cy +cy +Rh +au +ad +kZ +lL +mk +Wo +QZ +oj +nC +nC +nC +nC +rp +TD +ss +tg +tX +kX +vb +mS +mS +kE +la +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ad +aa +aa +aa +aa +FG +FG +FG +FG +FG +aa +Jt +aa +FG +FG +FG +FG +FG +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(106,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af +af +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -44138,15 +45353,15 @@ au kZ lM mS -mS -mS +Vs +Vs ok oJ ph -nD -nD +ea +ea rq -nD +gA st th tY @@ -44156,13 +45371,13 @@ mS mS xh la -yk -yj -zo -zo -zo -yj -yk +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -44179,22 +45394,22 @@ aa ad aa aa -Ht -GQ -GQ -GQ -GQ -GQ -GQ -GQ +aa +aa +aa +aa ad -GQ -Tx -Gq -PG -OG -Gp -Ht +aa +aa +aa +Jt +aa +aa +aa +ad +aa +aa +aa aa aa aa @@ -44302,71 +45517,71 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af aa aa aa @@ -44386,20 +45601,20 @@ fL gj gL ho -hQ +fB IO -hQ +Vy hQ fq au kZ +Os kZ -kZ -kZ -kZ +Os +Os ol -kZ -kZ +Os +Os kZ qE rr @@ -44411,15 +45626,15 @@ mS mS vQ kZ -la kZ -yi -yR -yj -yj -yj -yj -yi +kZ +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -44436,22 +45651,55 @@ ad ad aa aa -Ht -GQ -GQ -GQ -GQ -GQ -GQ -GQ -ad -GQ -PG -Gp -Tx -OG -Gq -Ht +aa +aa +FE +FE +FE +FE +FE +aa +Jt +aa +FE +FE +FE +FE +FE +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -44484,6 +45732,13 @@ aa aa aa aa +"} +(108,1,1) = {" +aa +aa +aa +aa +aa aa aa aa @@ -44517,8 +45772,6 @@ aa aa aa aa -"} -(108,1,1) = {" aa aa aa @@ -44537,6 +45790,15 @@ aa aa aa aa +af +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -44559,71 +45821,24 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +af +af ad ad ad @@ -44640,19 +45855,19 @@ cl dI fj fM -dI -dI -dI -dI +yO +mI +mI +SO gN -dI -ej -dI +cf +Pe +IH au lb -lN -lN -mq +Ta +qj +XV nE om oK @@ -44669,14 +45884,14 @@ nB vP mP mO -mP -ei -yS -WX -ZY -WX -yS -yk +Uz +aa +aa +aa +aa +aa +aa +aa aa aa ad @@ -44693,22 +45908,22 @@ uK ad aa aa -Ht -GQ -PG -Gq -PG -Gq -PG -Gq -ad -GQ -Tx -Gq -PG -OG -Gp -Ht +aa +aa +FF +Ga +Ga +Ga +Ga +Gw +Jt +GM +GN +GN +GN +GN +GO +aa aa aa aa @@ -44816,71 +46031,71 @@ aa aa aa aa -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp -Wp +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -44901,18 +46116,18 @@ gk fN Mq hR -fN +Mq iU SR jV au lc -jY -mo +Ts mo +SA Is it -DJ +Sv pj kZ qG @@ -44927,13 +46142,13 @@ Yg kZ kZ kZ -yi -yi -zp -zp -zp -yi -yi +aa +aa +aa +aa +aa +aa +aa ad ad ad @@ -44945,30 +46160,26 @@ ad ad ad uK -zr +Zo uK ad ad aa -Ht -PG -OG -OG -OG -OG -OG -OG -Ra -GQ -PG -Gp -Tx -OG -Gq -Ht aa aa +FG +FG +FG +FG +FG aa +GI +aa +FG +FG +FG +FG +FG aa aa aa @@ -45031,12 +46242,14 @@ aa aa aa aa -"} -(110,1,1) = {" aa aa aa aa +"} +(110,1,1) = {" +aa +aa aa aa aa @@ -45128,6 +46341,8 @@ aa aa aa aa +af +af aa aa aa @@ -45158,16 +46373,16 @@ gl fO Lt hS -fO +fJ iV fF jW au ld -Zf +Qr eq Wt -WH +lP dO oM pk @@ -45184,13 +46399,13 @@ VQ kZ aa ad -yi -yT -yT -yT -yT -yT -yi +aa +aa +aa +aa +aa +aa +aa ad aa aa @@ -45202,12 +46417,12 @@ aa uK uK uK -Du +gU uK ad aa aa -Ht +aa aa aa aa @@ -45215,14 +46430,8 @@ aa aa aa ad -Xz -PG -OG -Gq -PG -OG -Gp -Ht +GJ +ad aa aa aa @@ -45288,14 +46497,14 @@ aa aa aa aa -"} -(111,1,1) = {" aa aa aa aa aa aa +"} +(111,1,1) = {" aa aa aa @@ -45389,6 +46598,12 @@ aa aa aa aa +af +af +aa +aa +aa +aa aa aa aa @@ -45411,21 +46626,21 @@ dI dI fm dI -dI +cf gM Zk hT -dI +NI iW -Zk +Ba jX au YM -iq -mp -mY -nF -PA +QA +Ne +Wg +WH +QJ oN oN oN @@ -45458,8 +46673,8 @@ ad aa uK UK -zr -To +XJ +NW DD ad ad @@ -45467,20 +46682,17 @@ ad ad aa aa -ad -ad +aa +aa aa ad -ST +Gm RJ -ST +Gm ad aa -Tx -NP -Gq -Ht aa +ad aa aa aa @@ -45545,11 +46757,11 @@ aa aa aa aa -"} -(112,1,1) = {" aa aa aa +"} +(112,1,1) = {" aa aa aa @@ -45618,6 +46830,9 @@ aa aa aa aa +af +af +aa aa aa aa @@ -45663,12 +46878,12 @@ cn au cQ cy -dD -dI +mW +SO eF fm ej -ej +Ss dI hp au @@ -45679,10 +46894,10 @@ au au dj lQ -mq -mq -mq -lP +mp +mY +nF +PA oN pl pZ @@ -45728,15 +46943,15 @@ Dt ad ad ad -Eo -BB +Dt +GW Eo ad ad -Oe -NP -Gp -Ht +ad +ad +aa +aa aa aa aa @@ -45872,8 +47087,8 @@ aa aa aa aa -aa -aa +af +af aa aa aa @@ -45922,10 +47137,10 @@ cR cx dG ek -dI +ZA fn -dI -dI +ZA +ZL dI hq au @@ -45937,7 +47152,7 @@ Mx le lR mq -mZ +mq mq Ub oN @@ -45963,8 +47178,8 @@ lZ AD uK Bc -zT -CN +vm +Zj zT zT zT @@ -45972,7 +47187,7 @@ zT RO CN zT -zT +eP Dv DE DT @@ -45986,14 +47201,14 @@ aa ad aa Eo -BB +Yt Eo aa ad -Tx -OG -Gq -Ht +aa +aa +aa +aa aa aa aa @@ -46178,7 +47393,7 @@ au au au dH -dI +cf eF fo fP @@ -46194,8 +47409,8 @@ iX iX iX iX -WZ -mq +mZ +fG lP oN pn @@ -46247,12 +47462,7 @@ GV Eo Eo Dt -PG -OG -Gp -Ht aa -HW aa aa aa @@ -46316,13 +47526,15 @@ aa aa aa aa -"} -(115,1,1) = {" aa aa aa aa aa +"} +(115,1,1) = {" +aa +aa aa aa aa @@ -46401,6 +47613,9 @@ aa aa aa aa +af +af +aa aa aa aa @@ -46435,7 +47650,7 @@ UV cS cA Pl -ej +TP eG fp fQ @@ -46476,7 +47691,7 @@ zU za AF uK -Am +KI bl aG of @@ -46501,16 +47716,11 @@ Dt Gn Gx GX -hy +Gb Hf -PZ -TU -OG -Gq -ad -ad -ad -HW +Dt +aa +aa aa aa aa @@ -46573,13 +47783,16 @@ aa aa aa aa -"} -(116,1,1) = {" aa aa aa aa aa +"} +(116,1,1) = {" +aa +aa +aa aa aa aa @@ -46657,6 +47870,8 @@ aa aa aa aa +af +af aa aa aa @@ -46753,18 +47968,18 @@ Fc Fm FJ Dt -yO Dt -Ml +Dt +Uc Um -UN -NT -Ml +UT +mV +Ft Dt Dt Dt Dt -ad +aa aa aa aa @@ -46972,7 +48187,7 @@ BX pq mq iq -iq +lN mq LI mS @@ -47009,20 +48224,20 @@ EN Fd Fu FK -ln -RC +EZ +EZ Gi -VE -TB -Nl -VX -Jc +Gp +Gy +EZ +EZ +ln Hs -YL +zg HI Dt aa -HW +aa aa aa aa @@ -47269,18 +48484,18 @@ FL Gb Gf Gj +Gq Gz Gz -Bg Ha -Ml -RL +YA +Ht HB HJ Dt aa aa -HW +aa aa aa aa @@ -47454,7 +48669,7 @@ bI ah ad co -SX +Pr co ad aa @@ -47486,7 +48701,7 @@ oR mq mq is -iq +lN mq mS tq @@ -47522,23 +48737,23 @@ En EL Ff Fw -Yt -Aq -gY -Dt -Ad Ad -Ad -HL +Dt +Dt +Dt +Eo +Eo +Eo +Dt Hg -Ml -LO +DC +ex HK Dt aa aa aa -HW +aa aa aa aa @@ -47711,7 +48926,7 @@ ah ah ad co -cC +AN co ad aa @@ -47779,34 +48994,34 @@ DC DC EY DC -HE +Aq Dt ad ad aa aa aa -HL -HL -Gy -Mv -HL +Dt +Dt +DC +QS +Dt Dt aa aa aa aa -Oj -aa -aa -aa -aa -aa -aa -aa -aa +HY +GS +If aa +HY +GS +If aa +HY +GS +If aa aa aa @@ -47920,8 +49135,8 @@ aa aa aa aa -aa -aa +af +af aa aa aa @@ -48037,33 +49252,33 @@ FS DC DC FO -Ad +Eo ad aa aa aa aa ad -HL +Dt Hu -bL -HL -ad +ST +Dt ad ad ad ad -HW -aa -aa -aa -aa -aa -aa -aa aa +HY +GT +If aa +HY +GT +If aa +HY +GT +If aa aa aa @@ -48177,8 +49392,8 @@ aa aa aa aa -aa -aa +af +af aa aa aa @@ -48224,8 +49439,8 @@ bw TH bU aD -cC -cC +dW +NT co co co @@ -48293,7 +49508,7 @@ Ev EQ DC DC -HE +EB Dt aa aa @@ -48301,26 +49516,26 @@ aa aa aa ad -HL -Gy -Mv -HL -aa -aa -aa -aa -aa -HW -aa -aa -aa -aa -aa +Dt +DC +QS +Dt aa aa aa aa aa +HY +GT +If +ad +HY +GT +If +ad +HY +GT +If aa aa aa @@ -48482,11 +49697,11 @@ MV aJ aD XL -cC -cC -cC -cC -dJ +MF +DI +Wc +XD +MN Qu di di @@ -48550,7 +49765,7 @@ av ER yz Fx -HE +EB Dt aa aa @@ -48558,26 +49773,26 @@ aa aa aa aa -Oy +Dt Hv -jN -HL -HL -aa -aa -aa -aa -aa -Ht -aa -aa -aa -aa -aa -aa +MM +Dt +Dt +ad +ad +ad aa +HY +GT +If aa +HY +GT +If aa +HY +GT +If aa aa aa @@ -48815,26 +50030,26 @@ aa aa aa aa +Eo +bk +HE HL -HY -jM -HL -QM -aa -aa -aa -aa -aa -Ht -aa -aa -aa +Eo aa aa aa aa +HY +GT +If aa +HY +GT +If aa +HY +GT +If aa aa aa @@ -49066,31 +50281,31 @@ Fi Fz FQ Gc -Ad +Eo ad aa aa aa aa -HD -Vh -HT -Vh -Oy -aa -aa -aa -aa -aa -aa +Eo +bk +ST +HM +VG +Eo +Dt +Dt aa aa +GH aa aa aa +GH aa aa aa +GH aa aa aa @@ -49315,43 +50530,43 @@ CW Rt Pg Dy -uG +Pg Ef Pg EU Fj FA FR -sE -Ad -aa -aa +DC +Eo +ad +ad aa aa aa -HD +Dt Hw -If -ie +hi +HN HU -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +eK +HW +TT +GR +Gw +Jt +Jt +Jt +Jt +Jt +Jt +Jt +Jt +Jt +GM +GR +GR +JO aa aa aa @@ -49571,8 +50786,8 @@ CE Co ui QG -Yn -QH +XS +ui Eg aV EV @@ -49580,31 +50795,31 @@ Fi FB PK Gd -Ad +Eo aa aa aa aa aa -HD -Vh +Eo +bk HC -Vh -Oy -aa -aa -aa -aa -aa -aa +Gt +Eo +Eo +Eo +Dt aa aa +GI aa aa aa +GI aa aa aa +GI aa aa aa @@ -49770,13 +50985,13 @@ ah ah ah dR -Ib +UI UI UI CY UI ZP -Ib +Rx di eQ di @@ -49829,7 +51044,7 @@ ms ms ms nQ -av +Dt Eh Ex EW @@ -49843,26 +51058,26 @@ aa aa aa aa -HL +Eo Hx -lu -HL -QM -aa -aa -aa -aa -aa -Ht -aa -aa -aa +Gt +HO +Eo aa aa aa aa +HY +He +If aa +HY +He +If aa +HY +He +If aa aa aa @@ -50027,13 +51242,13 @@ cu Mk cV dS -Ib +Rx Qh Od ND Od Xe -Ib +Rx eR fD fV @@ -50100,26 +51315,26 @@ aa aa aa ad -Oy -cI -IM -HL -HL -aa -aa -aa -aa -aa -Ht -aa -aa -aa -aa -aa -aa +Dt +Hv +HD +Dt +Dt +ad +ad +ad aa +HY +He +If aa +HY +He +If aa +HY +He +If aa aa aa @@ -50284,13 +51499,13 @@ cv cJ UL dT -Ib +Rx Zt Od ND Od Od -Ib +Rx eS dm dU @@ -50347,36 +51562,36 @@ av Ei Ey EX -ml -Ni +EB +DC FV -Ad +Eo ad ad ad ad ad ad -HL -Gy -Oa -HL -aa -aa -aa -aa -aa -Ht -aa -aa -aa -aa -aa +Dt +DC +Gt +Dt aa aa aa aa aa +HY +He +If +ad +HY +He +If +ad +HY +He +If aa aa aa @@ -50541,19 +51756,19 @@ cw Qq cW Zr -OD +eC Ir Ir UD Ir Ny -Ib -cY +Rx cY cY cY cY Ut +dr Wi iz ix @@ -50599,7 +51814,7 @@ Sa Wu av bd -PX +DC nz DC DC @@ -50614,26 +51829,26 @@ ad ad aa aa -HL -Gy -Oa -HL -ad +Dt +DC +Gt +Dt ad ad ad ad -Ht -aa -aa -aa -aa -aa -aa -aa aa +HY +He +If aa +HY +He +If aa +HY +He +If aa aa aa @@ -50797,14 +52012,14 @@ ad cw cJ cX -QX -Ib +pp +Rx Sf Pk TF Px Ov -Ib +Rx eT fX VU @@ -50870,27 +52085,27 @@ aa ad aa aa -HL -dM -Zi -Nn -VH +Dt +Dt +DC +Gt +Dt Dt aa aa aa aa -Ht -aa -aa -aa -aa -aa -aa -aa -aa +HY +HT +If aa +HY +HT +If aa +HY +HT +If aa aa aa @@ -51054,14 +52269,14 @@ aa cw cw cw -cJ -Ib +Tc +Rx Ir Ir ND Ir Ir -Ib +Rx eU fH QU @@ -51124,19 +52339,19 @@ FY Dt Dt Dt -Ad -Ad -Ad -HL +Eo +Eo +Eo +Dt Hh -Dd -Nf +En +HC HP Dt aa aa aa -Ht +aa aa aa aa @@ -51311,20 +52526,20 @@ aa aa aa cw -cK -Ib +Tc +Rx IB ZZ PT dn Ir -Ib -cY +Rx cY cY gB cY da +da hZ TV da @@ -51374,9 +52589,9 @@ Dl DK Ek En -Yl -Te -NY +Gt +EB +En FU DC RP @@ -51392,7 +52607,7 @@ HQ Dt aa aa -Ht +aa aa aa aa @@ -51568,8 +52783,8 @@ ad aa aa cw -cJ -Ib +Tc +Rx Nc Ms Vv @@ -51632,23 +52847,23 @@ DL El DC Gt -EB -bJ +Xk +Ve FZ Ge Gg Gl -Gg -Gg -Gg -Gg -Ge +Gs +IZ +GA +GA +Hi Hy HG HR Dt aa -Ht +aa aa aa aa @@ -51825,16 +53040,16 @@ ad ad aa cw -cJ -Ib -Ib -Ib -Ib -Ib -Ib -Ib +Tc +Rx +Rx +Rx +Rx +Rx +Rx +Rx eW -fJ +Fq fZ gC hb @@ -51887,16 +53102,16 @@ Dn Dn DM Ek -FD +DC Gt Fn -Tf +Dt Eo Eo Eo Gm -DC -EY +Gt +Jc En Hb Hj @@ -52082,16 +53297,16 @@ ad aa aa VV -cK -Ib -Ib -Ib +pp +cw +QX +Rx MA YQ dX eB eX -cY +Fq ga gD hc @@ -52147,13 +53362,13 @@ Ek DC Ea Fo -Tf +Dt ad ad ad Dt -MM -En +Ni +As DC Hc Hk @@ -52338,17 +53553,17 @@ bg aa aa aa -ad -aa -aa -aa -Ib +cw +Tc +Yq +QX +Rx Nw dq dY dY eY -cY +Fq dZ dr eZ @@ -52404,13 +53619,13 @@ Ek En Gt Fp -Pe -Uy +Dt +aa ad ad Dt Gu -DC +Za DC Hd Hl @@ -52595,17 +53810,17 @@ aa aa aa aa -aa -ad -aa -aa -Ib +cw +Tc +cw +cw +Rx Nw OP Nw Nw Tq -cY +Fq TJ gE hd @@ -52661,7 +53876,7 @@ Ek DC dQ Fp -XB +Dt aa ad aa @@ -52852,17 +54067,17 @@ aa aa aa aa -aa -aa -aa -aa -Ib +YW +wf +cJ +cJ +Rx Vj YY Po Vd Nw -cY +Fq cY cY cY @@ -52938,7 +54153,7 @@ aa aa aa aa -HW +aa aa aa aa @@ -53106,14 +54321,14 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -Ib +YW +YW +YW +YW +YW +YW +VJ +YW Ib Ib Ib @@ -53194,7 +54409,7 @@ aa aa aa aa -HW +aa aa aa aa @@ -53363,14 +54578,14 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa +VD +Ux +Ux +Pu +Te +Ux +Ux +Ux Ib Dc ZV @@ -53437,8 +54652,8 @@ aa ad aa aa -Eo -GW +Dt +XE Eo aa Hp @@ -53450,7 +54665,7 @@ aa aa aa aa -HW +aa ad aa aa @@ -53620,14 +54835,14 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -ad +VD +LU +Ux +VF +Ux +Ux +Ux +Ux Ib IC Io @@ -53671,8 +54886,8 @@ wT Ak AB AP -WC -Bb +WP +NX AC aa ad @@ -53683,7 +54898,7 @@ CM WW av Dt -Dt +OQ Dt Re ED @@ -53706,7 +54921,7 @@ ad aa aa aa -HW +aa aa ad aa @@ -53875,16 +55090,16 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +YW +YW +YW +Ux +Ux +Ux +Ux +VF +Ux +LU Ia IC FN @@ -53939,8 +55154,8 @@ AC Cn Wk XO -aa -aa +Zh +DC Dt Eo BS @@ -54132,16 +55347,16 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +VD +Ux +Ux +Ux +Ux +Ux +VF +VF +Ux +Ux Ia WT WD @@ -54389,23 +55604,23 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +VD +VF +Ux +LU +Ux +VF +Ux +Ux +Ux +Ux Ib Ib Ib Ib Vl Ib -di +Ib kl JZ JZ @@ -54443,7 +55658,7 @@ zQ ad aa AC -Bb +TW AC aa aa @@ -54452,10 +55667,10 @@ PD RR Xj PC -WB -OX -WB +ZO OX +Tv +Ze WU Mt Vz @@ -54646,19 +55861,19 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -he +VD +Ux +Ux +Ux +Ux +Ux +Ux +Ux +VF +Ux +Ux +Ux +Nv Sz Ic gQ @@ -54700,7 +55915,7 @@ zQ aa aa AC -Bm +Ca AC aa aa @@ -54709,7 +55924,7 @@ PD kS QC Qw -WB +Qb PD PD PD @@ -54903,19 +56118,19 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -he +VD +Ux +Ux +VF +Ux +MC +Yp +Ux +Ux +Ux +Ux +Ux +WS gQ Ic gQ @@ -54964,10 +56179,10 @@ ad ad PD SZ -WB +kH Ty -WB -Xj +MK +km Oh PD Ep @@ -55160,18 +56375,18 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ad +VD +Ux +Ux +Rm +Yh +Zs +NL +Qi +TG +Yh +TG +Yh he Nt Sq @@ -55223,9 +56438,9 @@ PD WB OF UO -WB -WB -WB +Sr +Ml +DH DS Ep EI @@ -55417,15 +56632,15 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +YW +YW +YW +XF +YW +YW +YW +XF +YW ae ae ae @@ -55674,15 +56889,15 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +YW +Ux +Ud +Xp +Dj +YW +Ju +RF +DA ae ar dt @@ -55931,15 +57146,15 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +YW +VF +kG +VS +DA +YW +Ux +Xo +Ux ae aw du @@ -56188,15 +57403,15 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +YW +YW +YW +Ux +Ux +YW +kG +VF +Ux ae aw dd @@ -56447,13 +57662,13 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa +YW +VD +VD +YW +YW +VD +VD ae aA dv @@ -57758,9 +58973,9 @@ kv kW lD ae -mI +oD nv -mI +oD oD oz pP @@ -59371,7 +60586,7 @@ aa ad ad Ih -Ik +Bz aS JR Kf @@ -59628,7 +60843,7 @@ ad ad ad Ih -Il +NU aS JR Kg @@ -60142,7 +61357,7 @@ aS aS Ih aS -Im +XT Il Il Jv @@ -60393,13 +61608,13 @@ aa aa ad aS -Ik +lO aS -ID -Il -Il -Il +cK +Vc +Ns Il +RC Il Il Il @@ -60650,15 +61865,15 @@ aa aa ad aS -Il +dL aS ID Il +RC Il -Il -Il -Il -Il +Td +hE +yP Il Il Il @@ -60907,13 +62122,13 @@ aa aa ad aS -Ik +VA aS -IE -Il -Il -Il +ID +Of +Cm Il +RC JF UA Ki @@ -61164,23 +62379,23 @@ aa aa ad aS -Il +gr Iu -Il -Il -Il -Il -Jv +Vc +RW +SI +IE +WZ JG -Jh Kj +Ra JB Ji Im Il Il aS -Ik +OO aS ad aa @@ -61425,7 +62640,7 @@ Il Iv IF IF -IF +eJ Jg Jg JH @@ -61437,7 +62652,7 @@ JB JB Lc aS -Il +Jd aS ad aa @@ -61682,7 +62897,7 @@ Il Iw ID Il -Il +BN Jh Jw JI @@ -61694,7 +62909,7 @@ KJ Jh KF aS -Ik +YG aS ad aa @@ -61939,7 +63154,7 @@ Il Iw ID II -Lc +KE Jh Jx JJ @@ -61951,7 +63166,7 @@ Jx KV KF Il -Il +RC aS ad aa @@ -62208,7 +63423,7 @@ KK KW Ld Il -Il +RC aS ad aa @@ -62465,7 +63680,7 @@ KL KX Ld Im -Il +RC aS ad aa @@ -62721,8 +63936,8 @@ JJ KM Jh Ld -Il -Il +Of +Cm aS ad aa @@ -62978,8 +64193,8 @@ JJ Jx KY KF -Il -Il +SI +RM aS ad aa @@ -63235,7 +64450,7 @@ KC IY Jh KF -Il +BN aS aS ad @@ -63479,7 +64694,7 @@ ad Ih Il Iw -IH +Il BI JN Jh @@ -63491,8 +64706,8 @@ JA Jh KN Jh -KF -Il +lS +Mj aS ad ad diff --git a/maps/ministation/ministation_areas.dm b/maps/ministation/ministation_areas.dm index c965ec4cdc6..3606451ed1c 100644 --- a/maps/ministation/ministation_areas.dm +++ b/maps/ministation/ministation_areas.dm @@ -13,14 +13,6 @@ icon = 'maps/ministation/ministation_areas.dmi' icon_state = "default" -/area/ministation/arrival_shuttle - name = "Arrivals Shuttle" - requires_power = 0 - icon_state = "light_blue" - sound_env = SMALL_ENCLOSED - base_turf = /turf/space - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - /area/ministation/supply_dock name = "Supply Shuttle Dock" icon_state = "yellow" @@ -138,6 +130,14 @@ name = "\improper Library" icon_state = "LIB" +/area/ministation/disused + name = "\improper Disused Section" + icon_state = "pink" + +/area/ministation/disused_office + name = "\improper Disused Office" + icon_state = "dark_blue" + /area/ministation/atmospherics name = "\improper Atmospherics" req_access = list(access_atmospherics) @@ -208,4 +208,8 @@ name = "\improper AI Upload Control" secure = TRUE req_access = list(access_ai_upload) - icon_state = "light_blue" \ No newline at end of file + icon_state = "light_blue" + +/area/shuttle/escape_shuttle + name = "\improper Emergency Shuttle" + icon_state = "shuttle" diff --git a/maps/ministation/ministation_define.dm b/maps/ministation/ministation_define.dm index b78289a5b1d..7c880356722 100644 --- a/maps/ministation/ministation_define.dm +++ b/maps/ministation/ministation_define.dm @@ -17,11 +17,19 @@ lobby_screens = list('maps/ministation/ministation_lobby.png') - //TEMPORARY NOTE: Evac messages are temporary until its set up properly. Make sure they're changed later. - emergency_shuttle_leaving_dock = "Attention all crew members: the escape shuttle will be arriving shortly, please prepare to board." - emergency_shuttle_called_message = "Attention all crew members: emergency evacuation procedures are now in effect. Please make your way to the port hallway docking area in a calm and orderly manner." - emergency_shuttle_recall_message = "Attention all crew members: emergency evacuation sequence aborted. Return to normal operating conditions." - evac_controller_type = /datum/evacuation_controller/ministation_substitute + shuttle_docked_message = "The public ferry to %dock_name% has docked with the station. It will depart in approximately %ETD%" + shuttle_leaving_dock = "The public ferry has left the station. Estimate %ETA% until the ferry docks at %dock_name%." + shuttle_called_message = "A public ferry to %dock_name% has been scheduled. It will arrive in approximately %ETA%" + shuttle_recall_message = "The scheduled ferry has been cancelled." + + emergency_shuttle_docked_message = "The emergency shuttle has docked with the station. You have approximately %ETD% to board the emergency shuttle." + emergency_shuttle_leaving_dock = "The emergency shuttle has left the station. Estimate %ETA% until the shuttle docks at %dock_name%." + emergency_shuttle_called_message = "An emergency evacuation shuttle has been called. It will arrive in approximately %ETA%." + emergency_shuttle_called_sound = 'sound/AI/shuttlecalled.ogg' + + emergency_shuttle_recall_message = "The emergency shuttle has been recalled." + + evac_controller_type = /datum/evacuation_controller/shuttle pray_reward_type = /obj/item/mollusc/clam @@ -40,10 +48,4 @@ /datum/map/ministation/get_map_info() return "You're aboard the [station_name], an older station once used for unethical scientific research. It has long since been repurposed as deep space communication relay, though only on paper. \ - Onboard activity is at the whims of the [boss_name] who treat the station as a glorafied dogsbody, and sometimes guinea pig." - -/datum/evacuation_controller/ministation_substitute - name = "lazy ministation evac controller" - evac_prep_delay = 6 MINUTES - evac_launch_delay = 1 SECONDS - evac_transit_delay = 1 SECONDS \ No newline at end of file + Onboard activity is at the whims of the [boss_name] who treat the station as a glorified dogsbody, and sometimes guinea pig." diff --git a/maps/ministation/ministation_shuttles.dm b/maps/ministation/ministation_shuttles.dm index 7210c792dd8..e82fc97b319 100644 --- a/maps/ministation/ministation_shuttles.dm +++ b/maps/ministation/ministation_shuttles.dm @@ -1,30 +1,3 @@ -#define ESCAPE_POD(NUMBER) \ -/datum/shuttle/autodock/ferry/escape_pod/pod##NUMBER { \ - shuttle_area = /area/shuttle/escape_pod_##NUMBER; \ - name = "Escape Pod " + #NUMBER; \ - dock_target = "escape_pod_" + #NUMBER; \ - arming_controller = "escape_pod_"+ #NUMBER +"_berth"; \ - waypoint_station = "escape_pod_"+ #NUMBER +"_start"; \ - landmark_transition = "escape_pod_"+ #NUMBER +"_transit"; \ - waypoint_offsite = "escape_pod_"+ #NUMBER +"_out"; \ -} \ -/obj/effect/shuttle_landmark/escape_pod/start/pod##NUMBER { \ - landmark_tag = "escape_pod_"+ #NUMBER +"_start"; \ - docking_controller = "escape_pod_"+ #NUMBER +"_berth"; \ -} \ -/obj/effect/shuttle_landmark/escape_pod/transit/pod##NUMBER { \ - landmark_tag = "escape_pod_"+ #NUMBER +"_transit"; \ -} \ -/obj/effect/shuttle_landmark/escape_pod/out/pod##NUMBER { \ - landmark_tag = "escape_pod_"+ #NUMBER +"_out"; \ -} \ -/area/shuttle/escape_pod_##NUMBER { \ - name = "Escape Pod " + #NUMBER; \ - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT; \ -} - -ESCAPE_POD(1) - //supply /datum/shuttle/autodock/ferry/supply/cargo name = "Supply" @@ -42,4 +15,25 @@ ESCAPE_POD(1) landmark_tag = "nav_cargo_station" docking_controller = "cargo_bay" base_area = /area/ministation/supply_dock - base_turf = /turf/space \ No newline at end of file + base_turf = /turf/space + +/datum/shuttle/autodock/ferry/emergency/escape_shuttle + name = "Escape Shuttle" + warmup_time = 10 + location = 1 + dock_target = "shuttle1" + shuttle_area = /area/shuttle/escape_shuttle + waypoint_offsite = "nav_escape_shuttle_start" + waypoint_station = "nav_escape_shuttle_station" + landmark_transition = "nav_escape_shuttle_transit" + +/obj/effect/shuttle_landmark/escape_shuttle/start + landmark_tag = "nav_escape_shuttle_start" + //docking_controller = "centcom_escape_dock" + +/obj/effect/shuttle_landmark/escape_shuttle/transit + landmark_tag = "nav_escape_shuttle_transit" + +/obj/effect/shuttle_landmark/escape_shuttle/station + landmark_tag = "nav_escape_shuttle_station" + docking_controller = "station1" diff --git a/maps/ministation/ministation_unit_testing.dm b/maps/ministation/ministation_unit_testing.dm index 3994764cca9..d2242b32d00 100644 --- a/maps/ministation/ministation_unit_testing.dm +++ b/maps/ministation/ministation_unit_testing.dm @@ -3,9 +3,8 @@ apc_test_exempt_areas = list( /area/space = NO_SCRUBBER|NO_VENT|NO_APC, /area/exoplanet = NO_SCRUBBER|NO_VENT|NO_APC, - /area/shuttle/escape_pod_1 = NO_SCRUBBER|NO_VENT|NO_APC, + /area/shuttle/escape_shuttle = NO_SCRUBBER|NO_VENT|NO_APC, /area/ministation/supply = NO_SCRUBBER|NO_VENT|NO_APC, - /area/ministation/arrival_shuttle = NO_SCRUBBER|NO_VENT|NO_APC, /area/ministation/maint = NO_SCRUBBER|NO_VENT, /area/ministation/bridge/vault = NO_SCRUBBER|NO_VENT, /area/ministation/supply_dock = NO_SCRUBBER|NO_VENT|NO_APC, diff --git a/maps/ministation/space.dmm b/maps/ministation/space.dmm index d7b408ed471..72dbc0d03a5 100644 --- a/maps/ministation/space.dmm +++ b/maps/ministation/space.dmm @@ -34,35 +34,27 @@ /obj/effect/paint/sun, /turf/simulated/wall/r_titanium, /area/ministation/supply) -"ah" = ( -/obj/effect/shuttle_landmark/escape_pod/transit/pod1, -/turf/space, -/area/space) -"ai" = ( -/obj/effect/shuttle_landmark/escape_pod/out/pod1, -/turf/space, -/area/space) "aj" = ( /obj/effect/paint/silver, /turf/simulated/wall/r_titanium, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "ak" = ( /obj/effect/wallframe_spawn/reinforced/titanium, /turf/simulated/floor/shuttle/black, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "al" = ( /obj/machinery/computer/modular/preset/cardslot/command, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "am" = ( /obj/item/boombox, /obj/structure/table/steel_reinforced, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "an" = ( /obj/machinery/computer/shuttle_control/emergency, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "ao" = ( /obj/structure/bed/chair/shuttle/black{ icon_state = "shuttle_chair"; @@ -70,48 +62,58 @@ }, /obj/machinery/light, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "ap" = ( /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aq" = ( /obj/structure/bed/chair/shuttle/black{ icon_state = "shuttle_chair"; dir = 1 }, /obj/machinery/light, -/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ - dir = 1; - frequency = 1379; - icon_state = "airlock_control_off"; - id_tag = "escape_pod_1"; - pixel_y = -30; - tag_door = "escape_pod_1_hatch" +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + id_tag = "shuttle1"; + tag_airpump = "shuttle1_vent"; + tag_chamber_sensor = "shuttle1_sensor"; + tag_exterior_door = "shuttle1_airlock_exterior"; + tag_interior_door = "shuttle1_airlock_interior"; + pixel_y = -25; + dir = 1 }, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "ar" = ( /obj/machinery/door/airlock/command{ autoset_access = 0; req_access = list("ACCESS_HEADS") }, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "as" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "at" = ( /obj/machinery/door/airlock/external/glass{ autoset_access = 0; - id_tag = "escape_pod_1_hatch"; - name = "Escape Shuttle Airlock" + name = "External Airlock Hatch"; + locked = 1; + id_tag = "shuttle1_airlock_exterior" }, /turf/simulated/floor/shuttle/black, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "au" = ( +/obj/machinery/airlock_sensor{ + id_tag = "shuttle3_sensor"; + pixel_y = -20 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "shuttle1_vent" + }, /turf/simulated/floor/shuttle/black, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "av" = ( /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; @@ -126,7 +128,7 @@ dir = 8 }, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aw" = ( /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; @@ -137,7 +139,7 @@ dir = 1 }, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "ax" = ( /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; @@ -148,36 +150,37 @@ dir = 1 }, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "ay" = ( /obj/machinery/light{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "az" = ( /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; dir = 4 }, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aA" = ( /obj/machinery/sleeper/standard, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aB" = ( /obj/structure/table/reinforced, /obj/machinery/sleeper/standard, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aC" = ( /obj/structure/bed/chair/shuttle{ icon_state = "shuttle_chair"; dir = 1 }, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aD" = ( /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; @@ -188,19 +191,19 @@ dir = 1 }, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aE" = ( /obj/structure/table/reinforced, /obj/item/storage/firstaid/adv, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aF" = ( /obj/structure/table/reinforced, /obj/item/robot_rack/roller{ pixel_y = 10 }, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aG" = ( /obj/effect/floor_decal/industrial/traffic, /obj/structure/bed/chair/shuttle{ @@ -212,7 +215,7 @@ dir = 8 }, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aH" = ( /obj/effect/floor_decal/industrial/traffic, /obj/structure/bed/chair/shuttle{ @@ -220,7 +223,7 @@ dir = 1 }, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aI" = ( /obj/effect/floor_decal/industrial/traffic{ icon_state = "stripe"; @@ -230,53 +233,53 @@ icon_state = "shuttle_chair"; dir = 1 }, -/obj/effect/shuttle_landmark/escape_pod/start/pod1, +/obj/effect/shuttle_landmark/escape_shuttle/start, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aJ" = ( /obj/structure/extinguisher_cabinet{ pixel_y = -30 }, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aK" = ( /obj/machinery/status_display{ pixel_y = -30 }, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aL" = ( /obj/machinery/door/airlock, /turf/simulated/floor/shuttle/blue, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aM" = ( /turf/simulated/floor/shuttle/yellow, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aN" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 30 }, /turf/simulated/floor/shuttle/yellow, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aO" = ( /obj/machinery/light{ dir = 1 }, /turf/simulated/floor/shuttle/yellow, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aP" = ( /obj/machinery/computer/modular/preset/security{ icon_state = "computer"; dir = 4 }, /turf/simulated/floor/shuttle/yellow, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aQ" = ( /obj/structure/window/reinforced{ dir = 1 }, /turf/simulated/floor/shuttle/red, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aR" = ( /obj/structure/window/reinforced{ dir = 1 @@ -286,42 +289,42 @@ req_access = list("ACCESS_BRIG") }, /turf/simulated/floor/shuttle/red, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aS" = ( /obj/machinery/oxygen_pump{ pixel_x = -30 }, /turf/simulated/floor/shuttle/red, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aT" = ( /obj/structure/window/reinforced{ dir = 4 }, /turf/simulated/floor/shuttle/red, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aU" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/shuttle/yellow, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aV" = ( /obj/machinery/light, /obj/structure/table/reinforced, /obj/machinery/recharger, /turf/simulated/floor/shuttle/yellow, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aW" = ( /obj/structure/closet/toolcloset, /obj/item/screwdriver, /turf/simulated/floor/shuttle/yellow, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aX" = ( /obj/structure/closet/crate/freezer/rations, /turf/simulated/floor/shuttle/yellow, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aY" = ( /obj/machinery/recharge_station, /turf/simulated/floor/shuttle/yellow, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "aZ" = ( /obj/structure/shuttle/engine/heater, /obj/structure/window/borosilicate_reinforced{ @@ -329,11 +332,55 @@ dir = 1 }, /turf/simulated/floor/shuttle/black, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) "ba" = ( /obj/structure/shuttle/engine/propulsion, /turf/space, -/area/shuttle/escape_pod_1) +/area/shuttle/escape_shuttle) +"bm" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock, +/turf/simulated/floor/shuttle/yellow, +/area/shuttle/escape_shuttle) +"fy" = ( +/obj/machinery/door/airlock/external/glass{ + autoset_access = 0; + name = "External Airlock Hatch"; + locked = 1; + id_tag = "shuttle1_airlock_interior" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/shuttle/black, +/area/shuttle/escape_shuttle) +"hM" = ( +/obj/machinery/airlock_sensor{ + id_tag = "shuttle2_sensor"; + pixel_y = -20 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "shuttle1_vent" + }, +/turf/simulated/floor/shuttle/black, +/area/shuttle/escape_shuttle) +"lo" = ( +/turf/space/transit/north, +/area/space) +"qu" = ( +/obj/machinery/airlock_sensor{ + id_tag = "shuttle1_sensor"; + pixel_y = -20 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "shuttle1_vent" + }, +/turf/simulated/floor/shuttle/black, +/area/shuttle/escape_shuttle) "tC" = ( /turf/simulated/shuttle/wall, /area/space) @@ -341,10 +388,23 @@ /obj/structure/window/borosilicate_reinforced, /turf/simulated/floor/bluegrid, /area/ministation/supply) +"AH" = ( +/obj/effect/paint/silver, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/wall/r_titanium, +/area/shuttle/escape_shuttle) +"EW" = ( +/obj/effect/step_trigger/teleporter/random, +/turf/space, +/area/space) +"FN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/shuttle/blue, +/area/shuttle/escape_shuttle) "Kt" = ( /obj/structure/window/borosilicate_reinforced, /obj/structure/showcase{ - desc = "It's actually a possum inside the box piloting the shuttle but don't tell anyone."; + desc = "It's actually a yinglet inside the box piloting the shuttle but don't tell anyone."; icon_state = "message_server_o_off"; name = "auto-pilot system" }, @@ -367,68 +427,94 @@ }, /turf/simulated/floor/shuttle/yellow, /area/ministation/supply) +"MW" = ( +/obj/machinery/atmospherics/pipe/manifold{ + dir = 8 + }, +/turf/simulated/floor/shuttle/blue, +/area/shuttle/escape_shuttle) +"Qd" = ( +/obj/machinery/atmospherics/pipe/manifold{ + dir = 8 + }, +/turf/simulated/floor/shuttle/yellow, +/area/shuttle/escape_shuttle) +"QS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/shuttle/blue, +/area/shuttle/escape_shuttle) +"Ub" = ( +/obj/effect/shuttle_landmark/escape_shuttle/transit, +/turf/space/transit/north, +/area/space) +"UO" = ( +/obj/effect/step_trigger/teleporter/random, +/turf/space/transit/north, +/area/space) (1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO aa aa aa @@ -499,6 +585,66 @@ aa aa "} (2,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -567,6 +713,68 @@ aa aa aa aa +"} +(3,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -627,20 +835,6 @@ aa aa aa aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa aa aa aa @@ -649,6 +843,68 @@ aa aa aa aa +"} +(4,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -717,6 +973,68 @@ aa aa aa aa +"} +(5,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -757,8 +1075,6 @@ aa aa aa aa -"} -(4,1,1) = {" aa aa aa @@ -787,6 +1103,68 @@ aa aa aa aa +"} +(6,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -841,11 +1219,82 @@ aa aa aa aa +tC +tC +tC +tC +tC +tC +tC +tC +tC aa aa aa aa aa +"} +(7,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -887,8 +1336,6 @@ aa aa aa aa -"} -(5,1,1) = {" aa aa aa @@ -901,10 +1348,83 @@ aa aa aa aa +tC +ab +ab +ab +ab +ab +ab +ab +ab +ab +tC aa aa aa aa +"} +(8,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -957,10 +1477,84 @@ aa aa aa aa +tC +ab +ab +ac +ac +ac +ac +ac +ac +ab +ab +tC aa aa aa aa +"} +(9,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -1013,18 +1607,84 @@ aa aa aa aa +tC +ab +AD +ac +ac +ac +ac +ac +ac +af +ag +tC aa aa aa aa "} -(6,1,1) = {" -aa -aa -aa -aa -aa -aa +(10,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -1077,10 +1737,84 @@ aa aa aa aa +tC +ab +Kt +ac +ac +ad +ac +ac +ac +af +ag +tC aa aa aa aa +"} +(11,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -1134,3347 +1868,83 @@ aa aa aa tC +ab +AD +ac +ac +ac +ac +ac +ac +af +ag tC -tC -tC -tC -tC -tC -tC -tC -aa aa aa aa aa "} -(7,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -tC -ab -ab -ab -ab -ab -ab -ab -ab -ab -tC -aa -aa -aa -aa -"} -(8,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -tC -ab -ab -ac -ac -ac -ac -ac -ac -ab -ab -tC -aa -aa -aa -aa -"} -(9,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -tC -ab -AD -ac -ac -ac -ac -ac -ac -af -ag -tC -aa -aa -aa -aa -"} -(10,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -tC -ab -Kt -ac -ac -ad -ac -ac -ac -af -ag -tC -aa -aa -aa -aa -"} -(11,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -tC -ab -AD -ac -ac -ac -ac -ac -ac -af -ag -tC -aa -aa -aa -aa -"} -(12,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -tC -ab -ab -ac -ac -ac -Mu -KH -ac -ab -ab -tC -aa -aa -aa -aa -"} -(13,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -tC -ab -ab -ab -ae -ab -ab -ae -ab -ab -tC -aa -aa -aa -aa -"} -(14,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -tC -tC -tC -tC -tC -tC -tC -tC -tC -aa -aa -aa -aa -aa -"} -(15,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(16,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(17,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(18,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(19,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(20,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(21,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(22,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(23,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(24,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(30,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +(12,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -4527,12 +1997,84 @@ aa aa aa aa -"} -(33,1,1) = {" +tC +ab +ab +ac +ac +ac +Mu +KH +ac +ab +ab +tC aa aa aa aa +"} +(13,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -4586,10 +2128,83 @@ aa aa aa aa +tC +ab +ab +ab +ae +ab +ab +ae +ab +ab +tC aa aa aa aa +"} +(14,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -4644,11 +2259,82 @@ aa aa aa aa +tC +tC +tC +tC +tC +tC +tC +tC +tC aa aa aa aa aa +"} +(15,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -4657,8 +2343,6 @@ aa aa aa aa -"} -(34,1,1) = {" aa aa aa @@ -4719,6 +2403,68 @@ aa aa aa aa +"} +(16,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -4788,7 +2534,67 @@ aa aa aa "} -(35,1,1) = {" +(17,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -4857,6 +2663,68 @@ aa aa aa aa +"} +(18,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -4917,8 +2785,6 @@ aa aa aa aa -"} -(36,1,1) = {" aa aa aa @@ -4927,6 +2793,68 @@ aa aa aa aa +"} +(19,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -4995,6 +2923,68 @@ aa aa aa aa +"} +(20,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -5047,8 +3037,6 @@ aa aa aa aa -"} -(37,1,1) = {" aa aa aa @@ -5065,6 +3053,68 @@ aa aa aa aa +"} +(21,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -5133,6 +3183,68 @@ aa aa aa aa +"} +(22,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -5177,8 +3289,6 @@ aa aa aa aa -"} -(38,1,1) = {" aa aa aa @@ -5203,6 +3313,68 @@ aa aa aa aa +"} +(23,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -5271,6 +3443,68 @@ aa aa aa aa +"} +(24,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -5307,8 +3541,6 @@ aa aa aa aa -"} -(39,1,1) = {" aa aa aa @@ -5341,6 +3573,68 @@ aa aa aa aa +"} +(25,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -5409,6 +3703,68 @@ aa aa aa aa +"} +(26,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +Ub +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -5437,8 +3793,6 @@ aa aa aa aa -"} -(40,1,1) = {" aa aa aa @@ -5479,6 +3833,68 @@ aa aa aa aa +"} +(27,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -5547,6 +3963,68 @@ aa aa aa aa +"} +(28,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -5567,8 +4045,6 @@ aa aa aa aa -"} -(41,1,1) = {" aa aa aa @@ -5617,6 +4093,68 @@ aa aa aa aa +"} +(29,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -5685,6 +4223,68 @@ aa aa aa aa +"} +(30,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -5697,8 +4297,6 @@ aa aa aa aa -"} -(42,1,1) = {" aa aa aa @@ -5755,6 +4353,68 @@ aa aa aa aa +"} +(31,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -5823,12 +4483,72 @@ aa aa aa aa +"} +(32,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa aa -"} -(43,1,1) = {" aa aa aa @@ -5893,6 +4613,68 @@ aa aa aa aa +"} +(33,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -5957,12 +4739,72 @@ aa aa aa aa -"} -(44,1,1) = {" aa aa aa aa +"} +(34,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6031,6 +4873,68 @@ aa aa aa aa +"} +(35,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6087,8 +4991,6 @@ aa aa aa aa -"} -(45,1,1) = {" aa aa aa @@ -6101,6 +5003,68 @@ aa aa aa aa +"} +(36,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6169,6 +5133,68 @@ aa aa aa aa +"} +(37,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6217,8 +5243,6 @@ aa aa aa aa -"} -(46,1,1) = {" aa aa aa @@ -6239,6 +5263,68 @@ aa aa aa aa +"} +(38,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6307,6 +5393,68 @@ aa aa aa aa +"} +(39,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6347,8 +5495,6 @@ aa aa aa aa -"} -(47,1,1) = {" aa aa aa @@ -6377,6 +5523,68 @@ aa aa aa aa +"} +(40,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6445,6 +5653,68 @@ aa aa aa aa +"} +(41,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6477,8 +5747,6 @@ aa aa aa aa -"} -(48,1,1) = {" aa aa aa @@ -6515,6 +5783,68 @@ aa aa aa aa +"} +(42,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6583,6 +5913,68 @@ aa aa aa aa +"} +(43,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6607,8 +5999,6 @@ aa aa aa aa -"} -(49,1,1) = {" aa aa aa @@ -6653,6 +6043,68 @@ aa aa aa aa +"} +(44,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6721,6 +6173,68 @@ aa aa aa aa +"} +(45,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6737,8 +6251,6 @@ aa aa aa aa -"} -(50,1,1) = {" aa aa aa @@ -6791,6 +6303,68 @@ aa aa aa aa +"} +(46,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6859,6 +6433,68 @@ aa aa aa aa +"} +(47,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6867,8 +6503,6 @@ aa aa aa aa -"} -(51,1,1) = {" aa aa aa @@ -6929,6 +6563,68 @@ aa aa aa aa +"} +(48,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -6998,10 +6694,67 @@ aa aa aa "} -(52,1,1) = {" -aa -aa -aa +(49,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -7070,6 +6823,68 @@ aa aa aa aa +"} +(50,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -7127,8 +6942,6 @@ aa aa aa aa -"} -(53,1,1) = {" aa aa aa @@ -7140,6 +6953,68 @@ aa aa aa aa +"} +(51,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -7208,6 +7083,68 @@ aa aa aa aa +"} +(52,1,1) = {" +UO +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +lo +UO aa aa aa @@ -7257,8 +7194,6 @@ aa aa aa aa -"} -(54,1,1) = {" aa aa aa @@ -7278,6 +7213,68 @@ aa aa aa aa +"} +(53,1,1) = {" +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO +UO aa aa aa @@ -7346,6 +7343,9 @@ aa aa aa aa +"} +(54,1,1) = {" +EW aa aa aa @@ -7387,8 +7387,6 @@ aa aa aa aa -"} -(55,1,1) = {" aa aa aa @@ -7406,6 +7404,7 @@ aa aa aa aa +EW aa aa aa @@ -7474,6 +7473,9 @@ aa aa aa aa +"} +(55,1,1) = {" +EW aa aa aa @@ -7517,8 +7519,6 @@ aa aa aa aa -"} -(56,1,1) = {" aa aa aa @@ -7534,6 +7534,7 @@ aa aa aa aa +EW aa aa aa @@ -7602,6 +7603,9 @@ aa aa aa aa +"} +(56,1,1) = {" +EW aa aa aa @@ -7647,8 +7651,6 @@ aa aa aa aa -"} -(57,1,1) = {" aa aa aa @@ -7662,6 +7664,7 @@ aa aa aa aa +EW aa aa aa @@ -7722,9 +7725,6 @@ aa aa aa aa -aj -aj -aj aa aa aa @@ -7733,6 +7733,9 @@ aa aa aa aa +"} +(57,1,1) = {" +EW aa aa aa @@ -7777,8 +7780,6 @@ aa aa aa aa -"} -(58,1,1) = {" aa aa aa @@ -7793,6 +7794,7 @@ aa aa aa aa +EW aa aa aa @@ -7840,21 +7842,6 @@ aa aa aa aa -aj -aj -aj -ak -ak -ak -aj -aj -aj -aj -aj -ak -aj -aj -aj aa aa aa @@ -7876,6 +7863,9 @@ aa aa aa aa +"} +(58,1,1) = {" +EW aa aa aa @@ -7907,8 +7897,6 @@ aa aa aa aa -"} -(59,1,1) = {" aa aa aa @@ -7936,6 +7924,7 @@ aa aa aa aa +EW aa aa aa @@ -7969,22 +7958,6 @@ aa aa aa aa -aj -aj -ap -av -ap -aC -ap -aG -ap -aL -aM -aP -aQ -aS -aZ -ba aa aa aa @@ -8020,6 +7993,9 @@ aa aa aa aa +"} +(59,1,1) = {" +EW aa aa aa @@ -8037,8 +8013,6 @@ aa aa aa aa -"} -(60,1,1) = {" aa aa aa @@ -8080,6 +8054,7 @@ aa aa aa aa +EW aa aa aa @@ -8096,25 +8071,6 @@ aa aa aa aa -aj -ak -ak -aj -as -ap -aw -ap -aC -ap -aH -ap -aj -aM -aM -aR -aT -aZ -ba aa aa aa @@ -8168,7 +8124,8 @@ aa aa aa "} -(61,1,1) = {" +(60,1,1) = {" +EW aa aa aa @@ -8226,26 +8183,8 @@ aa aa aa aa -ak -al -ao -aj -as -ap -aw -ap -aC -ap -aH -aJ -aj -aN -aM -aM -aU -aZ -ba aa +EW aa aa aa @@ -8297,8 +8236,6 @@ aa aa aa aa -"} -(62,1,1) = {" aa aa aa @@ -8316,6 +8253,9 @@ aa aa aa aa +"} +(61,1,1) = {" +EW aa aa aa @@ -8356,24 +8296,6 @@ aa aa aa aa -ak -am -ap -ar -ap -ap -ax -az -aD -az -aI -aK -aj -aO -aM -aM -aV -aj aa aa aa @@ -8392,6 +8314,7 @@ aa aa aa aa +EW aa aa aa @@ -8427,8 +8350,6 @@ aa aa aa aa -"} -(63,1,1) = {" aa aa aa @@ -8462,6 +8383,9 @@ aa aa aa aa +"} +(62,1,1) = {" +EW aa aa aa @@ -8486,25 +8410,6 @@ aa aa aa aa -ak -an -aq -aj -ap -ap -ay -ap -ap -ap -ay -ap -aj -aM -aM -aM -aW -aZ -ba aa aa aa @@ -8539,6 +8444,7 @@ aa aa aa aa +EW aa aa aa @@ -8557,8 +8463,6 @@ aa aa aa aa -"} -(64,1,1) = {" aa aa aa @@ -8609,6 +8513,9 @@ aa aa aa aa +"} +(63,1,1) = {" +EW aa aa aa @@ -8616,25 +8523,6 @@ aa aa aa aa -aj -ak -ak -aj -aj -at -aj -aA -ap -aE -aj -at -aj -at -aj -aM -aX -aZ -ba aa aa aa @@ -8686,9 +8574,8 @@ aa aa aa aa +EW aa -"} -(65,1,1) = {" aa aa aa @@ -8749,22 +8636,6 @@ aa aa aa aa -aj -aj -au -aj -aB -ap -aF -aj -au -aj -au -aj -aM -aY -aZ -ba aa aa aa @@ -8772,6 +8643,9 @@ aa aa aa aa +"} +(64,1,1) = {" +EW aa aa aa @@ -8817,8 +8691,6 @@ aa aa aa aa -"} -(66,1,1) = {" aa aa aa @@ -8832,6 +8704,7 @@ aa aa aa aa +EW aa aa aa @@ -8880,21 +8753,6 @@ aa aa aa aa -aj -at -aj -ak -ak -ak -aj -at -aj -at -aj -ak -aj -aj -aj aa aa aa @@ -8915,6 +8773,9 @@ aa aa aa aa +"} +(65,1,1) = {" +EW aa aa aa @@ -8947,8 +8808,6 @@ aa aa aa aa -"} -(67,1,1) = {" aa aa aa @@ -8975,6 +8834,7 @@ aa aa aa aa +EW aa aa aa @@ -9022,9 +8882,6 @@ aa aa aa aa -aj -aj -aj aa aa aa @@ -9046,6 +8903,9 @@ aa aa aa aa +"} +(66,1,1) = {" +EW aa aa aa @@ -9077,8 +8937,6 @@ aa aa aa aa -"} -(68,1,1) = {" aa aa aa @@ -9106,6 +8964,7 @@ aa aa aa aa +EW aa aa aa @@ -9174,6 +9033,9 @@ aa aa aa aa +"} +(67,1,1) = {" +EW aa aa aa @@ -9207,8 +9069,6 @@ aa aa aa aa -"} -(69,1,1) = {" aa aa aa @@ -9234,6 +9094,7 @@ aa aa aa aa +EW aa aa aa @@ -9302,6 +9163,9 @@ aa aa aa aa +"} +(68,1,1) = {" +EW aa aa aa @@ -9337,8 +9201,6 @@ aa aa aa aa -"} -(70,1,1) = {" aa aa aa @@ -9362,6 +9224,7 @@ aa aa aa aa +EW aa aa aa @@ -9430,6 +9293,9 @@ aa aa aa aa +"} +(69,1,1) = {" +EW aa aa aa @@ -9467,8 +9333,6 @@ aa aa aa aa -"} -(71,1,1) = {" aa aa aa @@ -9490,6 +9354,7 @@ aa aa aa aa +EW aa aa aa @@ -9558,6 +9423,9 @@ aa aa aa aa +"} +(70,1,1) = {" +EW aa aa aa @@ -9597,8 +9465,6 @@ aa aa aa aa -"} -(72,1,1) = {" aa aa aa @@ -9618,6 +9484,7 @@ aa aa aa aa +EW aa aa aa @@ -9686,6 +9553,9 @@ aa aa aa aa +"} +(71,1,1) = {" +EW aa aa aa @@ -9727,8 +9597,6 @@ aa aa aa aa -"} -(73,1,1) = {" aa aa aa @@ -9746,6 +9614,7 @@ aa aa aa aa +EW aa aa aa @@ -9814,6 +9683,9 @@ aa aa aa aa +"} +(72,1,1) = {" +EW aa aa aa @@ -9857,8 +9729,6 @@ aa aa aa aa -"} -(74,1,1) = {" aa aa aa @@ -9874,6 +9744,7 @@ aa aa aa aa +EW aa aa aa @@ -9942,6 +9813,9 @@ aa aa aa aa +"} +(73,1,1) = {" +EW aa aa aa @@ -9987,8 +9861,6 @@ aa aa aa aa -"} -(75,1,1) = {" aa aa aa @@ -10002,6 +9874,7 @@ aa aa aa aa +EW aa aa aa @@ -10070,6 +9943,9 @@ aa aa aa aa +"} +(74,1,1) = {" +EW aa aa aa @@ -10117,8 +9993,6 @@ aa aa aa aa -"} -(76,1,1) = {" aa aa aa @@ -10130,6 +10004,7 @@ aa aa aa aa +EW aa aa aa @@ -10198,6 +10073,9 @@ aa aa aa aa +"} +(75,1,1) = {" +EW aa aa aa @@ -10247,8 +10125,6 @@ aa aa aa aa -"} -(77,1,1) = {" aa aa aa @@ -10258,6 +10134,7 @@ aa aa aa aa +EW aa aa aa @@ -10326,6 +10203,9 @@ aa aa aa aa +"} +(76,1,1) = {" +EW aa aa aa @@ -10377,8 +10257,6 @@ aa aa aa aa -"} -(78,1,1) = {" aa aa aa @@ -10386,6 +10264,7 @@ aa aa aa aa +EW aa aa aa @@ -10454,6 +10333,9 @@ aa aa aa aa +"} +(77,1,1) = {" +EW aa aa aa @@ -10507,13 +10389,12 @@ aa aa aa aa -"} -(79,1,1) = {" aa aa aa aa aa +EW aa aa aa @@ -10582,6 +10463,9 @@ aa aa aa aa +"} +(78,1,1) = {" +EW aa aa aa @@ -10637,11 +10521,10 @@ aa aa aa aa -"} -(80,1,1) = {" aa aa aa +EW aa aa aa @@ -10710,6 +10593,9 @@ aa aa aa aa +"} +(79,1,1) = {" +EW aa aa aa @@ -10767,9 +10653,8 @@ aa aa aa aa -"} -(81,1,1) = {" aa +EW aa aa aa @@ -10838,6 +10723,9 @@ aa aa aa aa +"} +(80,1,1) = {" +EW aa aa aa @@ -10896,9 +10784,8 @@ aa aa aa aa +EW aa -"} -(82,1,1) = {" aa aa aa @@ -10966,6 +10853,9 @@ aa aa aa aa +"} +(81,1,1) = {" +EW aa aa aa @@ -11024,11 +10914,10 @@ aa aa aa aa +EW aa aa aa -"} -(83,1,1) = {" aa aa aa @@ -11094,6 +10983,9 @@ aa aa aa aa +"} +(82,1,1) = {" +EW aa aa aa @@ -11152,13 +11044,12 @@ aa aa aa aa +EW aa aa aa aa aa -"} -(84,1,1) = {" aa aa aa @@ -11222,6 +11113,9 @@ aa aa aa aa +"} +(83,1,1) = {" +EW aa aa aa @@ -11280,6 +11174,7 @@ aa aa aa aa +EW aa aa aa @@ -11287,8 +11182,6 @@ aa aa aa aa -"} -(85,1,1) = {" aa aa aa @@ -11350,6 +11243,9 @@ aa aa aa aa +"} +(84,1,1) = {" +EW aa aa aa @@ -11408,6 +11304,7 @@ aa aa aa aa +EW aa aa aa @@ -11417,8 +11314,6 @@ aa aa aa aa -"} -(86,1,1) = {" aa aa aa @@ -11478,6 +11373,9 @@ aa aa aa aa +"} +(85,1,1) = {" +EW aa aa aa @@ -11536,6 +11434,7 @@ aa aa aa aa +EW aa aa aa @@ -11547,8 +11446,6 @@ aa aa aa aa -"} -(87,1,1) = {" aa aa aa @@ -11606,6 +11503,9 @@ aa aa aa aa +"} +(86,1,1) = {" +EW aa aa aa @@ -11641,6 +11541,10 @@ aa aa aa aa +aj +aj +aj +aa aa aa aa @@ -11660,6 +11564,7 @@ aa aa aa aa +EW aa aa aa @@ -11677,8 +11582,6 @@ aa aa aa aa -"} -(88,1,1) = {" aa aa aa @@ -11730,6 +11633,11 @@ aa aa aa aa +"} +(87,1,1) = {" +EW +aa +aa aa aa aa @@ -11751,6 +11659,24 @@ aa aa aa aa +aj +aj +aj +ak +ak +ak +aj +aj +aj +aj +aj +ak +aj +aj +aj +aa +aa +aa aa aa aa @@ -11768,6 +11694,7 @@ aa aa aa aa +EW aa aa aa @@ -11807,8 +11734,6 @@ aa aa aa aa -"} -(89,1,1) = {" aa aa aa @@ -11838,6 +11763,11 @@ aa aa aa aa +"} +(88,1,1) = {" +EW +aa +aa aa aa aa @@ -11858,6 +11788,22 @@ aa aa aa aa +aj +aj +ap +av +ap +aC +ap +aG +ap +aL +aM +aP +aQ +aS +aZ +ba aa aa aa @@ -11878,6 +11824,7 @@ aa aa aa aa +EW aa aa aa @@ -11937,8 +11884,6 @@ aa aa aa aa -"} -(90,1,1) = {" aa aa aa @@ -11948,6 +11893,9 @@ aa aa aa aa +"} +(89,1,1) = {" +EW aa aa aa @@ -11967,6 +11915,25 @@ aa aa aa aa +aj +ak +ak +aj +as +ap +aw +ap +aC +ap +aH +ap +aj +aM +aM +aR +aT +aZ +ba aa aa aa @@ -11987,6 +11954,7 @@ aa aa aa aa +EW aa aa aa @@ -12055,6 +12023,9 @@ aa aa aa aa +"} +(90,1,1) = {" +EW aa aa aa @@ -12067,8 +12038,6 @@ aa aa aa aa -"} -(91,1,1) = {" aa aa aa @@ -12076,6 +12045,25 @@ aa aa aa aa +ak +al +ao +aj +as +ap +aw +ap +aC +ap +aH +aJ +aj +aN +aM +aM +aU +aZ +ba aa aa aa @@ -12096,13 +12084,13 @@ aa aa aa aa +EW aa aa aa aa aa aa -ah aa aa aa @@ -12165,6 +12153,9 @@ aa aa aa aa +"} +(91,1,1) = {" +EW aa aa aa @@ -12184,6 +12175,24 @@ aa aa aa aa +ak +am +ap +ar +ap +ap +ax +az +aD +az +aI +aK +aj +aO +aM +aM +aV +aj aa aa aa @@ -12197,8 +12206,6 @@ aa aa aa aa -"} -(92,1,1) = {" aa aa aa @@ -12207,6 +12214,7 @@ aa aa aa aa +EW aa aa aa @@ -12275,6 +12283,9 @@ aa aa aa aa +"} +(92,1,1) = {" +EW aa aa aa @@ -12294,6 +12305,25 @@ aa aa aa aa +ak +an +aq +aj +ap +QS +ay +FN +FN +FN +ay +MW +AH +Qd +bm +aM +aW +aZ +ba aa aa aa @@ -12314,6 +12344,7 @@ aa aa aa aa +EW aa aa aa @@ -12327,8 +12358,6 @@ aa aa aa aa -"} -(93,1,1) = {" aa aa aa @@ -12384,6 +12413,9 @@ aa aa aa aa +"} +(93,1,1) = {" +EW aa aa aa @@ -12403,6 +12435,25 @@ aa aa aa aa +aj +ak +ak +aj +aj +fy +aj +aA +ap +aE +aj +fy +aj +fy +aj +aM +aX +aZ +ba aa aa aa @@ -12423,6 +12474,7 @@ aa aa aa aa +EW aa aa aa @@ -12457,8 +12509,6 @@ aa aa aa aa -"} -(94,1,1) = {" aa aa aa @@ -12493,6 +12543,9 @@ aa aa aa aa +"} +(94,1,1) = {" +EW aa aa aa @@ -12515,6 +12568,22 @@ aa aa aa aa +aj +aj +qu +aj +aB +ap +aF +aj +hM +aj +au +aj +aM +aY +aZ +ba aa aa aa @@ -12535,6 +12604,7 @@ aa aa aa aa +EW aa aa aa @@ -12559,7 +12629,6 @@ aa aa aa aa -ai aa aa aa @@ -12587,8 +12656,6 @@ aa aa aa aa -"} -(95,1,1) = {" aa aa aa @@ -12606,6 +12673,9 @@ aa aa aa aa +"} +(95,1,1) = {" +EW aa aa aa @@ -12629,6 +12699,21 @@ aa aa aa aa +aj +at +aj +ak +ak +ak +aj +at +aj +at +aj +ak +aj +aj +aj aa aa aa @@ -12649,6 +12734,7 @@ aa aa aa aa +EW aa aa aa @@ -12719,6 +12805,7 @@ aa aa "} (96,1,1) = {" +EW aa aa aa @@ -12754,6 +12841,9 @@ aa aa aa aa +aj +aj +aj aa aa aa @@ -12774,11 +12864,7 @@ aa aa aa aa -aa -aa -aa -aa -aa +EW aa aa aa @@ -12849,6 +12935,7 @@ aa aa "} (97,1,1) = {" +EW aa aa aa @@ -12907,8 +12994,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -12979,6 +13065,7 @@ aa aa "} (98,1,1) = {" +EW aa aa aa @@ -13037,8 +13124,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -13109,6 +13195,7 @@ aa aa "} (99,1,1) = {" +EW aa aa aa @@ -13167,8 +13254,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -13239,6 +13325,7 @@ aa aa "} (100,1,1) = {" +EW aa aa aa @@ -13297,8 +13384,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -13369,6 +13455,7 @@ aa aa "} (101,1,1) = {" +EW aa aa aa @@ -13427,8 +13514,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -13499,6 +13585,7 @@ aa aa "} (102,1,1) = {" +EW aa aa aa @@ -13557,8 +13644,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -13629,6 +13715,7 @@ aa aa "} (103,1,1) = {" +EW aa aa aa @@ -13687,8 +13774,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -13759,6 +13845,7 @@ aa aa "} (104,1,1) = {" +EW aa aa aa @@ -13817,8 +13904,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -13889,6 +13975,7 @@ aa aa "} (105,1,1) = {" +EW aa aa aa @@ -13947,8 +14034,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -14019,6 +14105,7 @@ aa aa "} (106,1,1) = {" +EW aa aa aa @@ -14077,8 +14164,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -14149,6 +14235,7 @@ aa aa "} (107,1,1) = {" +EW aa aa aa @@ -14207,8 +14294,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -14279,6 +14365,7 @@ aa aa "} (108,1,1) = {" +EW aa aa aa @@ -14337,8 +14424,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -14409,6 +14495,7 @@ aa aa "} (109,1,1) = {" +EW aa aa aa @@ -14467,8 +14554,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -14539,6 +14625,7 @@ aa aa "} (110,1,1) = {" +EW aa aa aa @@ -14597,8 +14684,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -14669,6 +14755,7 @@ aa aa "} (111,1,1) = {" +EW aa aa aa @@ -14727,8 +14814,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -14799,6 +14885,7 @@ aa aa "} (112,1,1) = {" +EW aa aa aa @@ -14857,8 +14944,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -14929,6 +15015,7 @@ aa aa "} (113,1,1) = {" +EW aa aa aa @@ -14987,8 +15074,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -15059,6 +15145,7 @@ aa aa "} (114,1,1) = {" +EW aa aa aa @@ -15117,8 +15204,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -15189,6 +15275,7 @@ aa aa "} (115,1,1) = {" +EW aa aa aa @@ -15247,8 +15334,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -15319,6 +15405,7 @@ aa aa "} (116,1,1) = {" +EW aa aa aa @@ -15377,8 +15464,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -15449,6 +15535,7 @@ aa aa "} (117,1,1) = {" +EW aa aa aa @@ -15507,8 +15594,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -15579,6 +15665,7 @@ aa aa "} (118,1,1) = {" +EW aa aa aa @@ -15637,8 +15724,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -15709,6 +15795,7 @@ aa aa "} (119,1,1) = {" +EW aa aa aa @@ -15767,8 +15854,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -15839,6 +15925,7 @@ aa aa "} (120,1,1) = {" +EW aa aa aa @@ -15897,8 +15984,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -15969,6 +16055,7 @@ aa aa "} (121,1,1) = {" +EW aa aa aa @@ -16027,8 +16114,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -16099,6 +16185,7 @@ aa aa "} (122,1,1) = {" +EW aa aa aa @@ -16157,8 +16244,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -16229,6 +16315,7 @@ aa aa "} (123,1,1) = {" +EW aa aa aa @@ -16287,8 +16374,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -16359,6 +16445,7 @@ aa aa "} (124,1,1) = {" +EW aa aa aa @@ -16417,8 +16504,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -16489,6 +16575,7 @@ aa aa "} (125,1,1) = {" +EW aa aa aa @@ -16547,8 +16634,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -16619,6 +16705,7 @@ aa aa "} (126,1,1) = {" +EW aa aa aa @@ -16677,8 +16764,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -16749,6 +16835,7 @@ aa aa "} (127,1,1) = {" +EW aa aa aa @@ -16807,8 +16894,7 @@ aa aa aa aa -aa -aa +EW aa aa aa @@ -16879,66 +16965,66 @@ aa aa "} (128,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW +EW aa aa aa From 7d7622697cec23a98d656d640019f1f66bd42a3e Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Tue, 8 Nov 2022 16:43:07 +1100 Subject: [PATCH 014/239] Backporting tradeship changes from scav. --- maps/tradeship/tradeship-0.dmm | 56 ++-- maps/tradeship/tradeship-1.dmm | 5 +- maps/tradeship/tradeship-2.dmm | 387 ++++++++++++++++++++--- maps/tradeship/tradeship_areas.dm | 4 + maps/tradeship/tradeship_overmap.dm | 11 +- maps/tradeship/tradeship_shuttles.dm | 14 +- maps/tradeship/tradeship_unit_testing.dm | 25 +- 7 files changed, 414 insertions(+), 88 deletions(-) diff --git a/maps/tradeship/tradeship-0.dmm b/maps/tradeship/tradeship-0.dmm index 4803a2085b8..63c699dc2d8 100644 --- a/maps/tradeship/tradeship-0.dmm +++ b/maps/tradeship/tradeship-0.dmm @@ -641,8 +641,6 @@ level = 2 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/table/gamblingtable, -/obj/item/chems/food/fish/mollusc, /obj/item/trash/mollusc_shell/clam, /turf/simulated/floor, /area/ship/trade/disused) @@ -749,7 +747,6 @@ name = "shank" }, /obj/item/synthesized_instrument/synthesizer, -/obj/item/twohanded/spear, /turf/simulated/floor, /area/ship/trade/fore_port_underside_maint) "bE" = ( @@ -1097,7 +1094,6 @@ /turf/simulated/floor/carpet/green, /area/ship/trade/disused) "hc" = ( -/obj/item/megaphone, /obj/item/radio, /obj/structure/table/woodentable/walnut, /turf/simulated/floor/wood/walnut, @@ -1159,6 +1155,10 @@ "jT" = ( /turf/simulated/floor/airless, /area/ship/trade/livestock) +"kH" = ( +/obj/structure/window/reinforced, +/turf/simulated/floor, +/area/ship/trade/loading_bay) "kO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -1587,9 +1587,6 @@ /obj/random/trash, /turf/simulated/floor, /area/ship/trade/loading_bay) -"zw" = ( -/turf/simulated/floor/carpet/green, -/area/ship/trade/disused) "AG" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -1604,6 +1601,9 @@ /mob/living/simple_animal/mouse, /turf/simulated/floor, /area/ship/trade/aft_starboard_underside_maint) +"AT" = ( +/turf/simulated/floor/carpet/green, +/area/ship/trade/disused) "AZ" = ( /obj/machinery/smartfridge/secure/extract, /turf/simulated/floor/tiled/white, @@ -1820,6 +1820,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/random/voidsuit, +/obj/random/voidhelmet, +/obj/structure/closet/emcloset, +/obj/random/voidsuit, +/obj/random/voidhelmet, /turf/simulated/floor, /area/ship/trade/aft_starboard_underside_maint) "KZ" = ( @@ -1993,8 +1998,6 @@ /area/ship/trade/aft_starboard_underside_maint) "Qh" = ( /obj/structure/table/woodentable/mahogany, -/obj/item/gun/launcher/crossbow, -/obj/item/stack/material/rods, /obj/item/cell/crap/empty, /turf/simulated/floor/wood/walnut, /area/ship/trade/disused) @@ -2068,7 +2071,6 @@ pixel_y = 25 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/flora/pottedplant/bamboo, /turf/simulated/floor, /area/ship/trade/disused) "TA" = ( @@ -2083,9 +2085,6 @@ /obj/structure/curtain/medical, /turf/simulated/floor, /area/ship/trade/disused) -"Ux" = ( -/turf/simulated/floor/carpet/red, -/area/ship/trade/disused) "UI" = ( /obj/structure/disposaloutlet{ dir = 4 @@ -2095,6 +2094,10 @@ }, /turf/simulated/floor, /area/ship/trade/loading_bay) +"VT" = ( +/obj/machinery/hologram/holopad/longrange, +/turf/simulated/floor/wood/walnut, +/area/ship/trade/disused) "Xe" = ( /turf/simulated/wall, /area/ship/trade/fore_port_underside_maint) @@ -2130,6 +2133,9 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/ship/trade/undercomms) +"Ym" = ( +/turf/simulated/floor/carpet/red, +/area/ship/trade/disused) "YH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -2187,6 +2193,12 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/ship/trade/livestock) +"ZC" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor, +/area/ship/trade/loading_bay) "ZR" = ( /obj/structure/window/basic, /obj/structure/curtain/open/bed, @@ -4854,7 +4866,7 @@ aa aa SC Ff -Ux +Ym Xe Nq ak @@ -5265,7 +5277,7 @@ aa ab en ae -en +VT DV ax pU @@ -5679,9 +5691,9 @@ JQ JQ ac JQ -sO +kH IQ -sO +ZC tD wG Ky @@ -5756,7 +5768,7 @@ aa aa ab gf -zw +AT JQ Mb ap @@ -5837,8 +5849,8 @@ aa aa aa SC -zw -Ux +AT +Ym JQ Yh Ft @@ -5919,8 +5931,8 @@ aa aa aa SC -zw -Ux +AT +Ym JQ lv DT diff --git a/maps/tradeship/tradeship-1.dmm b/maps/tradeship/tradeship-1.dmm index 39e82c75c17..33600dfb276 100644 --- a/maps/tradeship/tradeship-1.dmm +++ b/maps/tradeship/tradeship-1.dmm @@ -1641,10 +1641,13 @@ }, /obj/structure/closet/secure_closet{ name = "secure engineering voidsuit locker"; - req_access = list("ACCESS_CHIEF_ENGINEER") + req_access = list("ACCESS_ENGINE_EQUIP") }, /obj/item/clothing/head/helmet/space/void/engineering/salvage, /obj/item/clothing/suit/space/void/engineering/salvage, +/obj/item/tank/oxygen/yellow, +/obj/item/tank/oxygen/yellow, +/obj/item/tank/oxygen/yellow, /turf/simulated/floor/plating, /area/ship/trade/maintenance/storage) "eo" = ( diff --git a/maps/tradeship/tradeship-2.dmm b/maps/tradeship/tradeship-2.dmm index 503614f2d13..0dcf1ea7566 100644 --- a/maps/tradeship/tradeship-2.dmm +++ b/maps/tradeship/tradeship-2.dmm @@ -586,7 +586,9 @@ dir = 4; pixel_x = 24 }, -/obj/machinery/computer/shuttle_control/explore/tradeship, +/obj/machinery/computer/shuttle_control/explore/tradeship{ + dir = 8 + }, /turf/simulated/floor/tiled/monotile, /area/ship/trade/dock) "bf" = ( @@ -1045,9 +1047,34 @@ /turf/simulated/floor/tiled/monotile, /area/ship/trade/dock) "cb" = ( -/obj/effect/shuttle_landmark/docking_arm_starboard/pod, -/turf/space, -/area/space) +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "tradeship_rescue_shuttle_pump_out_internal" + }, +/obj/machinery/airlock_sensor{ + id_tag = "tradeship_rescue_shuttle_sensor"; + pixel_y = 20; + pixel_x = -22 + }, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + cycle_to_external_air = 1; + id_tag = "tradeship_rescue_shuttle"; + pixel_y = 32; + tag_airpump = "tradeship_rescue_shuttle_pump"; + tag_chamber_sensor = "tradeship_rescue_shuttle_sensor"; + tag_exterior_door = "tradeship_rescue_shuttle_out"; + dir = 4; + pixel_x = -20 + }, +/obj/effect/floor_decal/corner/white{ + dir = 9 + }, +/obj/effect/shuttle_landmark/docking_arm_starboard/rescue, +/turf/simulated/floor/tiled, +/area/ship/trade/shuttle/rescue) "cc" = ( /obj/machinery/door/airlock/hatch, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -2237,16 +2264,8 @@ /turf/simulated/floor/tiled, /area/ship/trade/crew/kitchen) "fo" = ( -/obj/structure/table, -/obj/item/glass_extra/straw, -/obj/item/toy/therapy_blue, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/defibrillator/compact/loaded, -/obj/machinery/computer/modular/telescreen/preset/medical{ - dir = 8; - pixel_x = 31; - pixel_y = -2 - }, +/obj/structure/closet/crate/freezer, /turf/simulated/floor/tiled/white, /area/ship/trade/crew/medbay) "fp" = ( @@ -2307,6 +2326,11 @@ /obj/item/stack/medical/advanced/bruise_pack, /obj/item/chems/syringe/antibiotic, /obj/item/scanner/health, +/obj/item/defibrillator/compact/loaded, +/obj/item/toy/therapy_blue, +/obj/item/glass_extra/straw, +/obj/item/tank/oxygen/yellow, +/obj/structure/closet/emcloset, /turf/simulated/floor/tiled/white, /area/ship/trade/crew/medbay) "fx" = ( @@ -3086,6 +3110,7 @@ /obj/random/loot, /obj/random/projectile, /obj/random/projectile, +/obj/item/tank/oxygen/yellow, /turf/simulated/floor/plating, /area/ship/trade/hidden) "hD" = ( @@ -3669,6 +3694,22 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/ship/trade/maintenance/engine/aft) +"iS" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "tradeship_rescue_shuttle_pump" + }, +/obj/effect/floor_decal/corner/white{ + dir = 6 + }, +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/trade/shuttle/rescue) "iT" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -4290,6 +4331,14 @@ /obj/structure/lattice, /turf/space, /area/space) +"kr" = ( +/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/trade/shuttle/rescue) "ks" = ( /obj/effect/floor_decal/corner/blue, /obj/effect/floor_decal/corner/yellow{ @@ -4545,6 +4594,23 @@ /obj/effect/paint/brown, /turf/simulated/wall/r_wall, /area/ship/trade/crew/medbay/chemistry) +"nm" = ( +/obj/machinery/power/apc{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "tradeship_rescue_shuttle_pump" + }, +/obj/effect/floor_decal/corner/white{ + dir = 6 + }, +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/trade/shuttle/rescue) "nu" = ( /obj/structure/shuttle/engine/propulsion/burst/right{ dir = 1 @@ -4652,6 +4718,28 @@ /obj/effect/paint/brown, /turf/simulated/wall/r_wall, /area/ship/trade/command/fmate) +"oM" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "tradeship_rescue_shuttle_pump_out_internal" + }, +/obj/structure/handrail{ + dir = 4 + }, +/obj/effect/floor_decal/corner/white{ + dir = 9 + }, +/obj/effect/floor_decal/corner/white{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/ship/trade/shuttle/rescue) "pb" = ( /obj/item/radio/intercom{ pixel_y = 22 @@ -4746,6 +4834,22 @@ }, /turf/simulated/floor/tiled/techmaint, /area/ship/trade/crew/hallway/port) +"qA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "tradeship_rescue_shuttle_pump_out_internal" + }, +/obj/structure/handrail{ + dir = 4 + }, +/obj/effect/floor_decal/corner/white{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ship/trade/shuttle/rescue) "qE" = ( /obj/machinery/atmospherics/omni/mixer{ active_power_usage = 7500; @@ -4761,6 +4865,14 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/ship/trade/maintenance/atmos) +"qM" = ( +/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/trade/shuttle/rescue) "qO" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/floor_decal/industrial/outline/yellow, @@ -5193,6 +5305,26 @@ /obj/machinery/atmospherics/pipe/simple/hidden/fuel, /turf/simulated/floor/plating, /area/ship/trade/maintenance/engine/aft) +"xz" = ( +/obj/structure/closet/crate, +/obj/item/tank/oxygen, +/obj/item/tank/oxygen, +/obj/item/roller, +/obj/item/storage/firstaid/adv, +/obj/item/storage/pill_bottle/painkillers, +/obj/item/storage/pill_bottle/antitox, +/obj/item/storage/pill_bottle/antibiotics, +/obj/item/storage/pill_bottle/burn_meds, +/obj/item/scanner/health, +/obj/structure/handrail{ + dir = 4 + }, +/obj/effect/floor_decal/corner/white{ + dir = 9 + }, +/obj/effect/floor_decal/corner/white, +/turf/simulated/floor/tiled, +/area/ship/trade/shuttle/rescue) "xB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -5381,6 +5513,13 @@ /obj/machinery/door/airlock/hatch/autoname/engineering, /turf/simulated/floor/tiled, /area/ship/trade/maintenance/engine/aft) +"AE" = ( +/obj/effect/paint/red, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 4 + }, +/turf/simulated/wall/titanium, +/area/ship/trade/shuttle/rescue) "AH" = ( /obj/effect/paint/brown, /turf/simulated/wall, @@ -5500,6 +5639,10 @@ }, /turf/simulated/floor/tiled, /area/ship/trade/crew/kitchen) +"Cz" = ( +/obj/structure/shuttle/engine/propulsion/burst, +/turf/simulated/floor/airless, +/area/ship/trade/shuttle/rescue) "CD" = ( /obj/effect/paint/red, /turf/simulated/wall/r_wall/hull, @@ -5561,6 +5704,13 @@ }, /turf/simulated/floor/tiled/steel_ridged, /area/ship/trade/crew/saloon) +"Dj" = ( +/obj/machinery/power/smes/buildable/max_cap_in_out, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled, +/area/ship/trade/shuttle/rescue) "Dl" = ( /obj/machinery/power/apc{ name = "Medical Bay APC" @@ -5573,6 +5723,13 @@ /obj/effect/paint/brown, /turf/simulated/wall, /area/ship/trade/crew/kitchen) +"Dx" = ( +/obj/effect/paint/red, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9 + }, +/turf/simulated/wall/titanium, +/area/ship/trade/shuttle/rescue) "DE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -5586,6 +5743,19 @@ /obj/effect/paint/brown, /turf/simulated/wall/r_wall, /area/ship/trade/command/bridge) +"DY" = ( +/obj/machinery/door/airlock/external/bolted{ + id_tag = "tradeship_rescue_shuttle_out" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/obj/effect/decal/warning_stripes, +/turf/simulated/floor/tiled/techfloor/grid, +/area/ship/trade/shuttle/rescue) "Eb" = ( /obj/machinery/light{ dir = 4; @@ -5661,6 +5831,12 @@ }, /turf/simulated/floor/tiled/techmaint, /area/ship/trade/crew/hallway/starboard) +"EA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/wall/titanium, +/area/ship/trade/shuttle/rescue) "EQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -5820,6 +5996,11 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techmaint, /area/ship/trade/maintenance/hallway) +"GO" = ( +/obj/effect/paint/red, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/wall/titanium, +/area/ship/trade/shuttle/rescue) "GT" = ( /turf/simulated/floor/tiled/techmaint, /area/ship/trade/shieldbay) @@ -5862,6 +6043,7 @@ /turf/simulated/floor/plating, /area/ship/trade/crew/hallway/port) "Hs" = ( +/obj/machinery/light, /turf/simulated/floor/wood/yew, /area/ship/trade/unused) "HA" = ( @@ -5961,6 +6143,13 @@ "IM" = ( /turf/simulated/floor/airless, /area/ship/trade/command/captain) +"IW" = ( +/obj/effect/paint/red, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 10 + }, +/turf/simulated/wall/titanium, +/area/ship/trade/shuttle/rescue) "Jb" = ( /obj/structure/table, /obj/machinery/cell_charger, @@ -6073,6 +6262,7 @@ /obj/random/voidsuit, /obj/random/voidhelmet, /obj/random/voidhelmet, +/obj/item/tank/oxygen, /turf/simulated/floor/tiled, /area/ship/trade/crew/saloon) "JX" = ( @@ -6361,6 +6551,8 @@ /obj/structure/closet/emcloset, /obj/random/voidsuit, /obj/random/voidhelmet, +/obj/item/tank/oxygen, +/obj/item/tank/oxygen, /turf/simulated/floor/tiled/dark, /area/ship/trade/command/bridge) "Nx" = ( @@ -6487,6 +6679,29 @@ /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/plating, /area/ship/trade/command/captain) +"PB" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "tradeship_rescue_shuttle_pump" + }, +/obj/structure/bed/chair/comfy/brown{ + dir = 1 + }, +/obj/effect/floor_decal/corner/white{ + dir = 6 + }, +/obj/effect/floor_decal/corner/white{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/trade/shuttle/rescue) "PE" = ( /obj/structure/cable{ icon_state = "1-2" @@ -6674,6 +6889,11 @@ /obj/structure/handrail, /turf/simulated/floor/tiled, /area/ship/trade/crew/saloon) +"RM" = ( +/obj/effect/wallframe_spawn/reinforced/titanium, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ship/trade/shuttle/rescue) "RW" = ( /obj/machinery/atmospherics/unary/engine{ dir = 1 @@ -6726,6 +6946,13 @@ "Sr" = ( /turf/simulated/floor/plating, /area/ship/trade/maintenance/hallway) +"SB" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/computer/shuttle_control/explore/rescue, +/turf/simulated/floor/tiled, +/area/ship/trade/shuttle/rescue) "SC" = ( /obj/effect/paint/brown, /turf/simulated/wall/r_wall, @@ -6797,6 +7024,11 @@ /obj/structure/handrail{ dir = 8 }, +/obj/item/clothing/head/helmet/space/void/pilot, +/obj/item/clothing/suit/space/void/pilot, +/obj/item/tank/oxygen, +/obj/item/tank/oxygen, +/obj/item/tank/oxygen, /turf/simulated/floor/plating, /area/ship/trade/shuttle/outgoing) "Tp" = ( @@ -6898,10 +7130,29 @@ }, /turf/simulated/floor/reinforced/airless, /area/ship/trade/maintenance/engine/aft) +"UQ" = ( +/obj/effect/paint/red, +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 8 + }, +/turf/simulated/wall/titanium, +/area/ship/trade/shuttle/rescue) "UV" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/monotile, /area/ship/trade/dock) +"UY" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 4 + }, +/obj/effect/floor_decal/corner/white{ + dir = 6 + }, +/obj/effect/floor_decal/corner/white{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/ship/trade/shuttle/rescue) "Vb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -7046,6 +7297,19 @@ }, /turf/simulated/floor/tiled/steel_ridged, /area/ship/trade/maintenance/atmos) +"WK" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 8; + id_tag = "tradeship_rescue_shuttle_pump_out_internal" + }, +/obj/structure/handrail{ + dir = 4 + }, +/obj/effect/floor_decal/corner/white{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/ship/trade/shuttle/rescue) "WO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -7124,6 +7388,19 @@ }, /turf/simulated/floor/tiled/techfloor, /area/ship/trade/maintenance/engineering) +"Yl" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 4; + id_tag = "tradeship_rescue_shuttle_pump" + }, +/obj/effect/floor_decal/corner/white{ + dir = 6 + }, +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/ship/trade/shuttle/rescue) "Yt" = ( /obj/structure/handrail{ dir = 8 @@ -7147,6 +7424,13 @@ "YN" = ( /turf/simulated/floor/plating, /area/ship/trade/crew/hallway/starboard) +"YR" = ( +/obj/effect/paint/red, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/wall/titanium, +/area/ship/trade/shuttle/rescue) "YS" = ( /obj/structure/lattice, /obj/effect/paint/brown, @@ -7191,6 +7475,13 @@ }, /turf/space, /area/space) +"ZK" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ + dir = 1; + id_tag = "tradeship_rescue_shuttle_pump_out_external" + }, +/turf/simulated/floor/airless, +/area/ship/trade/shuttle/rescue) (1,1,1) = {" aa @@ -11151,15 +11442,15 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +RM +RM +YR +UQ +DY +kr +GO +UQ +ZK aa aa om @@ -11233,15 +11524,15 @@ aa aa aa aa -aa -aa -aa -aa +RM +Dj +oM +qA cb -aa -aa -aa -aa +WK +xz +EA +Cz aa aa om @@ -11315,15 +11606,15 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +RM +SB +PB +nm +iS +Yl +UY +EA +Cz aa aa aa @@ -11397,15 +11688,15 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +RM +RM +IW +AE +AE +qM +Dx +IW +ZK aa aa aa diff --git a/maps/tradeship/tradeship_areas.dm b/maps/tradeship/tradeship_areas.dm index 9f10c188d1b..7e33f77e129 100644 --- a/maps/tradeship/tradeship_areas.dm +++ b/maps/tradeship/tradeship_areas.dm @@ -244,6 +244,10 @@ name = "\improper Exploration Shuttle" icon_state = "tcomsatcham" +/area/ship/trade/shuttle/rescue + name = "\improper Rescue Shuttle" + icon_state = "tcomsatcham" + /area/ship/trade/maintenance/solars name = "\improper Solar Array Access" icon_state = "SolarcontrolA" diff --git a/maps/tradeship/tradeship_overmap.dm b/maps/tradeship/tradeship_overmap.dm index f9b452c16f9..2ae3c3f5dc5 100644 --- a/maps/tradeship/tradeship_overmap.dm +++ b/maps/tradeship/tradeship_overmap.dm @@ -9,7 +9,12 @@ restricted_area = 30 sector_flags = OVERMAP_SECTOR_KNOWN|OVERMAP_SECTOR_BASE|OVERMAP_SECTOR_IN_SPACE - initial_generic_waypoints = list("nav_tradeship_below_bow", "nav_tradeship_below_starboardastern", "nav_tradeship_starboard_dock_pod") - initial_restricted_waypoints = list( - /datum/shuttle/autodock/overmap/exploration = list("nav_tradeship_port_dock_shuttle"), // exploration ship can only dock portside + initial_generic_waypoints = list( + "nav_tradeship_below_bow", + "nav_tradeship_below_starboardastern" ) + //exploration and rescue shuttles can only dock port side, b/c there's only one door. + initial_restricted_waypoints = list( + /datum/shuttle/autodock/overmap/exploration = list("nav_tradeship_port_dock_shuttle"), + /datum/shuttle/autodock/overmap/rescue = list("nav_tradeship_starboard_dock_rescue") + ) \ No newline at end of file diff --git a/maps/tradeship/tradeship_shuttles.dm b/maps/tradeship/tradeship_shuttles.dm index 2d9232bd098..062fdafcd1e 100644 --- a/maps/tradeship/tradeship_shuttles.dm +++ b/maps/tradeship/tradeship_shuttles.dm @@ -2,20 +2,30 @@ name = "exploration shuttle console" shuttle_tag = "Exploration Shuttle" +/obj/machinery/computer/shuttle_control/explore/rescue + name = "rescue shuttle console" + shuttle_tag = "Rescue Shuttle" + /datum/shuttle/autodock/overmap/exploration name = "Exploration Shuttle" shuttle_area = /area/ship/trade/shuttle/outgoing dock_target = "tradeship_shuttle" current_location = "nav_tradeship_port_dock_shuttle" +/datum/shuttle/autodock/overmap/rescue + name = "Rescue Shuttle" + shuttle_area = /area/ship/trade/shuttle/rescue + dock_target = "rescue_shuttle" + current_location = "nav_tradeship_starboard_dock_rescue" + //In case multiple shuttles can dock at a location, //subtypes can be used to hold the shuttle-specific data /obj/effect/shuttle_landmark/docking_arm_starboard name = "Tradeship Starboard-side Docking Arm" docking_controller = "tradeship_starboard_dock" -/obj/effect/shuttle_landmark/docking_arm_starboard/pod - landmark_tag = "nav_tradeship_starboard_dock_pod" +/obj/effect/shuttle_landmark/docking_arm_starboard/rescue + landmark_tag = "nav_tradeship_starboard_dock_rescue" /obj/effect/shuttle_landmark/docking_arm_port name = "Tradeship Port-side Docking Arm" diff --git a/maps/tradeship/tradeship_unit_testing.dm b/maps/tradeship/tradeship_unit_testing.dm index 5fc81b0f665..7fd77333ab9 100644 --- a/maps/tradeship/tradeship_unit_testing.dm +++ b/maps/tradeship/tradeship_unit_testing.dm @@ -4,18 +4,19 @@ /datum/map/tradeship // Unit test exemptions apc_test_exempt_areas = list( - /area/turbolift = NO_SCRUBBER|NO_VENT|NO_APC, - /area/space = NO_SCRUBBER|NO_VENT|NO_APC, - /area/exoplanet = NO_SCRUBBER|NO_VENT|NO_APC, - /area/ship/trade/maintenance/engine/port = NO_SCRUBBER|NO_VENT, + /area/turbolift = NO_SCRUBBER|NO_VENT|NO_APC, + /area/space = NO_SCRUBBER|NO_VENT|NO_APC, + /area/exoplanet = NO_SCRUBBER|NO_VENT|NO_APC, + /area/ship/trade/maintenance/engine/port = NO_SCRUBBER|NO_VENT, /area/ship/trade/maintenance/engine/starboard = NO_SCRUBBER|NO_VENT, - /area/ship/trade/crew/hallway/port = NO_SCRUBBER|NO_VENT, - /area/ship/trade/crew/hallway/starboard = NO_SCRUBBER|NO_VENT, - /area/ship/trade/maintenance/hallway = NO_SCRUBBER|NO_VENT, - /area/ship/trade/maintenance/lower = NO_SCRUBBER|NO_VENT, - /area/ship/trade/escape_port = NO_SCRUBBER|NO_VENT, - /area/ship/trade/escape_star = NO_SCRUBBER|NO_VENT, - /area/ship/trade/shuttle/outgoing = NO_SCRUBBER, - /area/ship/trade/maintenance/atmos = NO_SCRUBBER + /area/ship/trade/crew/hallway/port = NO_SCRUBBER|NO_VENT, + /area/ship/trade/crew/hallway/starboard = NO_SCRUBBER|NO_VENT, + /area/ship/trade/maintenance/hallway = NO_SCRUBBER|NO_VENT, + /area/ship/trade/maintenance/lower = NO_SCRUBBER|NO_VENT, + /area/ship/trade/escape_port = NO_SCRUBBER|NO_VENT, + /area/ship/trade/escape_star = NO_SCRUBBER|NO_VENT, + /area/ship/trade/shuttle/rescue = NO_SCRUBBER|NO_VENT, + /area/ship/trade/shuttle/outgoing = NO_SCRUBBER, + /area/ship/trade/maintenance/atmos = NO_SCRUBBER ) From cbf14a4a7a6058789bb5b68c50e20f67df5fc457 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Fri, 13 Jan 2023 15:31:16 +1100 Subject: [PATCH 015/239] Improving some aspects of chemsmoke code. --- code/game/objects/effects/chem/chemsmoke.dm | 20 ++++++++++---------- code/game/objects/effects/effect_system.dm | 6 +++++- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/code/game/objects/effects/chem/chemsmoke.dm b/code/game/objects/effects/chem/chemsmoke.dm index 0a9894fb4b1..793495489c4 100644 --- a/code/game/objects/effects/chem/chemsmoke.dm +++ b/code/game/objects/effects/chem/chemsmoke.dm @@ -34,8 +34,7 @@ /obj/effect/effect/smoke/chem/Destroy() walk(src, 0) // Because we might have called walk_to, we must stop the walk loop or BYOND keeps an internal reference to us forever. set_opacity(0) - // TODO - fadeOut() sleeps. Sleeping in /Destroy is Bad, this needs to be fixed. - fadeOut() + set_density(0) return ..() /obj/effect/effect/smoke/chem/Move() @@ -62,14 +61,15 @@ reagents.splash(AM, splash_amount, copy = 1) // Fades out the smoke smoothly using it's alpha variable. -/obj/effect/effect/smoke/chem/proc/fadeOut(var/frames = 16) - if(!alpha) return //already transparent - - frames = max(frames, 1) //We will just assume that by 0 frames, the coder meant "during one frame". - var/alpha_step = round(alpha / frames) - while(alpha > 0) - alpha = max(0, alpha - alpha_step) - sleep(world.tick_lag) +/obj/effect/effect/smoke/chem/end_of_life() + if(QDELETED(src)) + return + walk(src, 0) // Because we might have called walk_to, we must stop the walk loop or BYOND keeps an internal reference to us forever. + set_opacity(0) + set_density(0) + animate(src, alpha = 0, time = 0.5 SECONDS) + sleep(0.5 SECONDS) + ..() ///////////////////////////////////////////// // Chem Smoke Effect System diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index a7f89209c25..631699a672f 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -182,7 +182,11 @@ steam.start() -- spawns the effect . = ..() if(smoke_duration) time_to_live = smoke_duration - QDEL_IN(src, time_to_live) + addtimer(CALLBACK(src, .proc/end_of_life), time_to_live) + +/obj/effect/effect/smoke/proc/end_of_life() + if(!QDELETED(src)) + qdel(src) /obj/effect/effect/smoke/Crossed(mob/living/carbon/M) ..() From 6b710c994f19fd38330a571800ee03d10663e554 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Fri, 13 Jan 2023 15:46:53 +1100 Subject: [PATCH 016/239] PDAs and cyberbrains should now start enabled. --- .../modular_computers/computers/modular_computer/core.dm | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm index 7fd47df4ba7..f2d69d36ce3 100644 --- a/code/modules/modular_computers/computers/modular_computer/core.dm +++ b/code/modules/modular_computers/computers/modular_computer/core.dm @@ -53,17 +53,11 @@ START_PROCESSING(SSobj, src) set_extension(src, /datum/extension/interactive/os/device) set_extension(src, computer_type) - if(stores_pen && ispath(stored_pen)) stored_pen = new stored_pen(src) - update_icon() update_verbs() update_name() - - var/datum/extension/assembly/modular_computer/assembly = get_extension(src, /datum/extension/assembly/modular_computer) - if(istype(assembly) && assembly.enabled_by_default) - enable_computer() ..() return INITIALIZE_HINT_LATELOAD @@ -71,6 +65,9 @@ . = ..() install_default_hardware() install_default_programs() + var/datum/extension/assembly/modular_computer/assembly = get_extension(src, /datum/extension/assembly) + if(istype(assembly) && assembly.enabled_by_default) + enable_computer() /obj/item/modular_computer/Destroy() shutdown_computer(loud = FALSE) From b1eff9c2b7d6c040d1c78f65ebb469c16f2f79b7 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Fri, 13 Jan 2023 15:50:27 +1100 Subject: [PATCH 017/239] Fixes erroneous extension retrieval in telescreen attackby. --- .../modular_computers/computers/subtypes/dev_telescreen.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm index 1e0ff0e0839..db9ca9366de 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm @@ -15,7 +15,7 @@ name = "telescreen" /obj/item/modular_computer/telescreen/attackby(var/obj/item/W, var/mob/user) - var/datum/extension/assembly/modular_computer/assembly = get_extension(src, /datum/extension/assembly/modular_computer) + var/datum/extension/assembly/modular_computer/assembly = get_extension(src, /datum/extension/assembly) if(isCrowbar(W)) if(anchored) shutdown_computer() From a150afd532ffd9a4205d3c4d26a92cf332b0e5da Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Fri, 13 Jan 2023 16:44:39 +1100 Subject: [PATCH 018/239] Fixes Tajarans turning into albinos when exposed to radiation. --- mods/species/tajaran/datum/species.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/species/tajaran/datum/species.dm b/mods/species/tajaran/datum/species.dm index 432aca9c51d..b956316b309 100644 --- a/mods/species/tajaran/datum/species.dm +++ b/mods/species/tajaran/datum/species.dm @@ -124,4 +124,4 @@ eye_icon = 'mods/species/tajaran/icons/eyes.dmi' /decl/species/tajaran/handle_additional_hair_loss(var/mob/living/carbon/human/H, var/defer_body_update = TRUE) - . = H && H.change_skin_color(189, 171, 143) + . = H && H.change_skin_color(rgb(189, 171, 143)) From d6bdeca122b0dd0bf1456b41da4afb1a4af88abd Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Sat, 14 Jan 2023 10:15:31 +1100 Subject: [PATCH 019/239] Null gates runtime in camera repository. --- code/datums/repositories/cameras.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/datums/repositories/cameras.dm b/code/datums/repositories/cameras.dm index fc8f961d8d6..b0d1ab40bdc 100644 --- a/code/datums/repositories/cameras.dm +++ b/code/datums/repositories/cameras.dm @@ -26,6 +26,8 @@ var/global/repository/cameras/camera_repository = new() devices_by_channel[channel] |= added /repository/cameras/proc/remove_camera_from_channels(var/datum/extension/network_device/camera/removed, var/list/channels) + if(!length(devices_by_channel)) + return if(!islist(channels)) channels = list(channels) for(var/channel in channels) From 601918c14835bb58aaca6a8e99548bd2deed2657 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Sat, 14 Jan 2023 11:02:23 +1100 Subject: [PATCH 020/239] Uncomments spawnable type setting on forcefields. --- code/modules/xenoarcheaology/artifacts/effects/forcefield.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/xenoarcheaology/artifacts/effects/forcefield.dm b/code/modules/xenoarcheaology/artifacts/effects/forcefield.dm index 689ef93c4e9..f91243ca98a 100644 --- a/code/modules/xenoarcheaology/artifacts/effects/forcefield.dm +++ b/code/modules/xenoarcheaology/artifacts/effects/forcefield.dm @@ -51,7 +51,7 @@ strength = 1 density = 1 invisibility = 0 - //is_spawnable_type = FALSE + is_spawnable_type = FALSE var/datum/artifact_effect/forcefield/owner /obj/effect/energy_field/artifact/Initialize(var/ml, var/_owner) From 169458556912955b6555d6ed92b773202ff7f099 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Sat, 14 Jan 2023 00:41:17 +0000 Subject: [PATCH 021/239] Automatic changelog generation [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-2866.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2866.yml diff --git a/html/changelog.html b/html/changelog.html index 84562af656a..d521a1e91f8 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,12 @@ -->
+

14 January 2023

+

MistakeNot4892 updated:

+
    +
  • Randomize Appearance is back.
  • +
+

21 December 2022

MistakeNot4892 updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 51cca5925d9..ce1207372cc 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -14437,3 +14437,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2022-12-21: MistakeNot4892: - tweak: There is now a grace period on losing your brain before your mob will die. +2023-01-14: + MistakeNot4892: + - tweak: Randomize Appearance is back. diff --git a/html/changelogs/AutoChangeLog-pr-2866.yml b/html/changelogs/AutoChangeLog-pr-2866.yml deleted file mode 100644 index b012b9f806c..00000000000 --- a/html/changelogs/AutoChangeLog-pr-2866.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: MistakeNot4892 -delete-after: true -changes: - - tweak: Randomize Appearance is back. From 2f5dd559315df609c82b451c4086c1a6ee64056e Mon Sep 17 00:00:00 2001 From: "natakilar@gmail.com" Date: Sun, 15 Jan 2023 13:34:08 -0500 Subject: [PATCH 022/239] Fixes items appearing heavily damaged --- code/game/objects/item.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/item.dm b/code/game/objects/item.dm index 7bc1e480e84..85bf7013cd2 100644 --- a/code/game/objects/item.dm +++ b/code/game/objects/item.dm @@ -208,7 +208,7 @@ var/desc_comp = "" //For "description composite" desc_comp += "It is a [w_class_description()] item." - var/desc_damage = get_examined_damage_string() + var/desc_damage = get_examined_damage_string(health / max_health) if(length(desc_damage)) desc_comp += "
    [desc_damage]" From decf43319692299aeaddb896b08b4beb6c2c207d Mon Sep 17 00:00:00 2001 From: NataKilar Date: Fri, 3 Dec 2021 23:11:34 -0500 Subject: [PATCH 023/239] Adds projectile weapons for mechs --- code/_onclick/MouseDrag.dm | 18 +- .../industrial/designs_exosuit_components.dm | 13 ++ code/modules/mechs/equipment/_equipment.dm | 6 + .../mechs/equipment/combat_projectile.dm | 167 ++++++++++++++++++ code/modules/mechs/mech_interaction.dm | 34 +++- code/modules/mechs/mech_movement.dm | 4 +- code/modules/mechs/premade/combat.dm | 2 +- code/modules/projectiles/ammunition/boxes.dm | 12 +- code/modules/projectiles/gun.dm | 20 ++- code/modules/projectiles/guns/projectile.dm | 5 +- .../projectiles/guns/projectile/automatic.dm | 110 ++++++++++-- icons/mecha/mech_equipment.dmi | Bin 25272 -> 25397 bytes icons/obj/ammo.dmi | Bin 13635 -> 13910 bytes icons/obj/guns/machine.dmi | Bin 0 -> 806 bytes nebula.dme | 1 + 15 files changed, 362 insertions(+), 30 deletions(-) create mode 100644 code/modules/mechs/equipment/combat_projectile.dm create mode 100644 icons/obj/guns/machine.dmi diff --git a/code/_onclick/MouseDrag.dm b/code/_onclick/MouseDrag.dm index 4d971e86b69..1c683c63f42 100644 --- a/code/_onclick/MouseDrag.dm +++ b/code/_onclick/MouseDrag.dm @@ -1,5 +1,11 @@ //If we intercept it return true else return false -/atom/proc/RelayMouseDrag(atom/src_object, atom/over_object, src_location, over_location, src_control, over_control, params, var/mob/user) +/atom/proc/RelayMouseDrag(atom/src_object, atom/over_object, src_location, over_location, src_control, over_control, params, mob/user) + return FALSE + +/atom/proc/RelayMouseDown(atom/object, location, control, params, mob/user) + return FALSE + +/atom/proc/RelayMouseUp(atom/object, location, control, params, mob/user) return FALSE /mob/proc/OnMouseDrag(atom/src_object, atom/over_object, src_location, over_location, src_control, over_control, params) @@ -13,11 +19,21 @@ gun.set_autofire(over_object, src) /mob/proc/OnMouseDown(atom/object, location, control, params) + if(istype(loc, /atom)) + var/atom/A = loc + if(A.RelayMouseDown(object, location, control, params, src)) + return + var/obj/item/gun/gun = get_active_hand() if(a_intent == I_HURT && istype(object) && (isturf(object) || isturf(object.loc)) && !incapacitated() && istype(gun)) gun.set_autofire(object, src) /mob/proc/OnMouseUp(atom/object, location, control, params) + if(istype(loc, /atom)) + var/atom/A = loc + if(A.RelayMouseUp(object, location, control, params, src)) + return + var/obj/item/gun/gun = get_active_hand() if(istype(gun)) gun.clear_autofire() diff --git a/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm b/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm index 04fac032ffa..99d7e495d6c 100644 --- a/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm +++ b/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm @@ -96,6 +96,12 @@ /datum/fabricator_recipe/industrial/exosuit_gear/laser path = /obj/item/mech_equipment/mounted_system/taser/laser +/datum/fabricator_recipe/industrial/exosuit_gear/smg + path = /obj/item/mech_equipment/mounted_system/projectile + +/datum/fabricator_recipe/industrial/exosuit_gear/rifle + path = /obj/item/mech_equipment/mounted_system/projectile/assault_rifle + /datum/fabricator_recipe/industrial/exosuit_gear/rcd path = /obj/item/mech_equipment/mounted_system/rcd @@ -110,3 +116,10 @@ /datum/fabricator_recipe/industrial/exosuit_gear/mechshields path = /obj/item/mech_equipment/shields + +/datum/fabricator_recipe/industrial/exosuit_ammo + category = "Exosuit Ammunition" + path = /obj/item/ammo_magazine/mech/smg_top + +/datum/fabricator_recipe/industrial/exosuit_ammo + path = /obj/item/ammo_magazine/mech/rifle \ No newline at end of file diff --git a/code/modules/mechs/equipment/_equipment.dm b/code/modules/mechs/equipment/_equipment.dm index a730743041e..0822da56c1c 100644 --- a/code/modules/mechs/equipment/_equipment.dm +++ b/code/modules/mechs/equipment/_equipment.dm @@ -81,6 +81,12 @@ /obj/item/mech_equipment/proc/MouseDragInteraction() return 0 +/obj/item/mech_equipment/proc/MouseDownInteraction() + return 0 + +/obj/item/mech_equipment/proc/MouseUpInteraction() + return 0 + /obj/item/mech_equipment/mob_can_unequip(mob/M, slot, disable_warning) . = ..() if(. && owner) diff --git a/code/modules/mechs/equipment/combat_projectile.dm b/code/modules/mechs/equipment/combat_projectile.dm new file mode 100644 index 00000000000..07af8679c18 --- /dev/null +++ b/code/modules/mechs/equipment/combat_projectile.dm @@ -0,0 +1,167 @@ +/obj/item/mech_equipment/mounted_system/projectile/attackby(var/obj/item/O as obj, mob/user as mob) + var/obj/item/gun/projectile/automatic/A = holding + if(istype(O, /obj/item/crowbar)) + A.unload_ammo(user) + to_chat(user, SPAN_NOTICE("You remove the ammo magazine from the [src].")) + if(istype(O, A.magazine_type)) + A.load_ammo(O, user) + to_chat(user, SPAN_NOTICE("You load the ammo magazine into the [src].")) + +/obj/item/mech_equipment/mounted_system/projectile/attack_self(var/mob/user) + . = ..() + if(. && holding) + var/obj/item/gun/M = holding + return M.switch_firemodes(user) + +/obj/item/gun/projectile/automatic/get_hardpoint_status_value() + if(!isnull(ammo_magazine)) + return ammo_magazine.stored_ammo.len + else + return null + +/obj/item/gun/projectile/automatic/get_hardpoint_maptext() + if(!isnull(ammo_magazine)) + return "[ammo_magazine.stored_ammo.len]/[ammo_magazine.max_ammo]" + else + return 0 + +//Weapons below this. +/obj/item/mech_equipment/mounted_system/projectile + name = "mounted submachine gun" + icon_state = "mech_ballistic" + holding_type = /obj/item/gun/projectile/automatic/smg/mech + restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) + restricted_software = list(MECH_SOFTWARE_WEAPONS) + +/obj/item/gun/projectile/automatic/smg/mech + magazine_type = /obj/item/ammo_magazine/mech/smg_top + allowed_magazines = /obj/item/ammo_magazine/mech/smg_top + one_hand_penalty = 0 + has_safety = FALSE + manual_unload = FALSE + firemodes = list( + list(mode_name="semi auto", burst=1, fire_delay=null, one_hand_penalty=0, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, one_hand_penalty=0, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 1.6, 2.4, 2.4), autofire_enabled=0), + list(mode_name="short bursts", burst=5, fire_delay=null, one_hand_penalty=0, burst_accuracy=list(0,-1,-1,-1,-2), dispersion=list(1.6, 1.6, 2.0, 2.0, 2.4), autofire_enabled=0), + list(mode_name="full auto", burst=1, fire_delay=null, burst_delay=1, one_hand_penalty=0, burst_accuracy=list(0,-1,-1,-1,-2), dispersion=list(1.6, 1.6, 2.0, 2.0, 2.4), autofire_enabled=1) + ) + +/obj/item/mech_equipment/mounted_system/projectile/assault_rifle + name = "mounted assault rifle" + icon_state = "mech_ballistic2" + holding_type = /obj/item/gun/projectile/automatic/assault_rifle/mech + restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) + restricted_software = list(MECH_SOFTWARE_WEAPONS) + +/obj/item/gun/projectile/automatic/assault_rifle/mech + magazine_type = /obj/item/ammo_magazine/mech/rifle + allowed_magazines = /obj/item/ammo_magazine/mech/rifle + one_hand_penalty = 0 + has_safety = FALSE + manual_unload = FALSE + firemodes = list( + list(mode_name="semi auto", burst=1, fire_delay=null, one_hand_penalty=0, burst_accuracy=null, dispersion=null, autofire_enabled=0), + list(mode_name="3-round bursts", burst=3, fire_delay=null, one_hand_penalty=0, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0), autofire_enabled=0), + list(mode_name="full auto", burst=1, fire_delay=null, burst_delay=1, one_hand_penalty=0, burst_accuracy = list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0), autofire_enabled=1) + ) + +/obj/item/mech_equipment/mounted_system/projectile/machine + name = "mounted machine gun" + icon_state = "mech_machine_gun" + holding_type = /obj/item/gun/projectile/automatic/machine/mech + restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) + restricted_software = list(MECH_SOFTWARE_WEAPONS) + +/obj/item/gun/projectile/automatic/machine/mech + magazine_type = /obj/item/ammo_magazine/mech/rifle/drum + allowed_magazines = /obj/item/ammo_magazine/mech/rifle/drum + one_hand_penalty = 0 + has_safety = FALSE + manual_unload = FALSE + +// Magazines below this. + +/obj/item/ammo_magazine/mech/attack_self(mob/user) + to_chat(user, SPAN_WARNING("It's pretty hard to extract ammo from a magazine that fits on a mech. You'll have to do it one round at a time.")) + return + +/obj/item/ammo_magazine/mech/smg_top + name = "large 7mm magazine" + desc = "A large magazine for a mech's gun. Looks way too big for a normal gun." + icon_state = "smg_top" + mag_type = MAGAZINE + ammo_type = /obj/item/ammo_casing/pistol/small + material = /decl/material/solid/metal/steel + caliber = CALIBER_PISTOL_SMALL + max_ammo = 90 + +/obj/item/ammo_magazine/mech/rifle + name = "large assault rifle magazine" + icon_state = "assault_rifle" + mag_type = MAGAZINE + caliber = CALIBER_RIFLE + material = /decl/material/solid/metal/steel + ammo_type = /obj/item/ammo_casing/rifle + max_ammo = 100 + +/obj/item/ammo_magazine/mech/rifle/drum + name = "large machine gun magazine" + icon_state = "drum" + mag_type = MAGAZINE + caliber = CALIBER_RIFLE + material = /decl/material/solid/metal/steel + ammo_type = /obj/item/ammo_casing/rifle + max_ammo = 300 + +// Handling for auto-fire mechanic +/mob/living/exosuit/can_autofire(obj/item/gun/autofiring, atom/autofiring_at) + if(autofiring.autofiring_by != src) + return FALSE + var/client/C + if(current_user) + C = current_user.client + if(current_user.incapacitated()) + return FALSE + else + C = client + if(incapacitated()) + return FALSE + if(!C || !(autofiring_at in view(C.view, src))) + return FALSE + if(!(get_dir(src, autofiring_at) & dir)) + return FALSE + if(!(autofiring in selected_system)) // Make sure the gun is still selected. + return FALSE + return TRUE + +/obj/item/mech_equipment/mounted_system/projectile/MouseDownInteraction(atom/object, location, control, params, mob/user) + var/obj/item/gun/gun = holding + if(user != src) + if(istype(object) && (isturf(object) || isturf(object.loc)) && !user.incapacitated() && istype(gun)) + gun.set_autofire(object, owner, FALSE) // Passed gun-firer is still the exosuit since all checks need to be done on the suit. + owner.current_user = user + else + if(istype(object) && (isturf(object) || isturf(object.loc)) && !owner.incapacitated() && istype(gun)) + gun.set_autofire(object, owner, FALSE) + owner.current_user = null + +/obj/item/mech_equipment/mounted_system/projectile/MouseUpInteraction(atom/object, location, control, params, mob/user) + var/obj/item/gun/gun = holding + if(istype(gun)) + gun.clear_autofire() + owner.current_user = null + +/obj/item/mech_equipment/mounted_system/projectile/MouseDragInteraction(atom/src_object, atom/over_object, src_location, over_location, src_control, over_control, params, mob/user) + var/obj/item/gun/gun = holding + if(!istype(gun)) + owner.current_user = null + return + if(user != owner) + if(user != owner.current_user) + gun.clear_autofire() + return + if(istype(over_object) && (isturf(over_object) || isturf(over_object.loc)) && !user.incapacitated() && istype(gun)) + gun.set_autofire(over_object, owner, FALSE) + else + if(istype(over_object) && (isturf(over_object) || isturf(over_object.loc)) && !owner.incapacitated() && istype(gun)) + gun.set_autofire(over_object, owner, FALSE) \ No newline at end of file diff --git a/code/modules/mechs/mech_interaction.dm b/code/modules/mechs/mech_interaction.dm index 5734a5088a9..940c791202b 100644 --- a/code/modules/mechs/mech_interaction.dm +++ b/code/modules/mechs/mech_interaction.dm @@ -9,12 +9,12 @@ return TRUE . = ..() -/mob/living/exosuit/RelayMouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params, var/mob/user) +/mob/living/exosuit/RelayMouseDrag(atom/src_object, atom/over_object, src_location, over_location, src_control, over_control, params, mob/user) if(user && (user in pilots) && user.loc == src) return OnMouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params, user) return ..() -/mob/living/exosuit/OnMouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params, var/mob/user) +/mob/living/exosuit/OnMouseDrag(atom/src_object, atom/over_object, src_location, over_location, src_control, over_control, params, mob/user) if(!user || incapacitated() || user.incapacitated()) return FALSE @@ -25,6 +25,36 @@ if(selected_system) return selected_system.MouseDragInteraction(src_object, over_object, src_location, over_location, src_control, over_control, params, user) +/mob/living/exosuit/RelayMouseDown(atom/object, location, control, params, mob/user) + if(user && (user in pilots) && user.loc == src) + return OnMouseDown(object, location, control, params, user) + return ..() + +/mob/living/exosuit/OnMouseDown(atom/object, location, control, params, mob/user) + if(!user || incapacitated() || user.incapacitated()) + return FALSE + + if(!(user in pilots) && user != src) + return FALSE + + if(selected_system) + return selected_system.MouseDownInteraction(object, location, control, params, user) + +/mob/living/exosuit/RelayMouseUp(atom/object, location, control, params, mob/user) + if(user && (user in pilots) && user.loc == src) + return OnMouseUp(object, location, control, params, user) + return ..() + +/mob/living/exosuit/OnMouseUp(atom/object, location, control, params, mob/user) + if(!user || incapacitated() || user.incapacitated()) + return FALSE + + if(!(user in pilots) && user != src) + return FALSE + + if(selected_system) + return selected_system.MouseUpInteraction(object, location, control, params, user) + /datum/click_handler/default/mech/OnClick(var/atom/A, var/params) var/mob/living/exosuit/E = user.loc if(!istype(E)) diff --git a/code/modules/mechs/mech_movement.dm b/code/modules/mechs/mech_movement.dm index 4347de5d8f6..408c5931744 100644 --- a/code/modules/mechs/mech_movement.dm +++ b/code/modules/mechs/mech_movement.dm @@ -155,7 +155,9 @@ anchored = 0 return FALSE -/mob/living/exosuit/check_space_footing()//mechs can't push off things to move around in space, they stick to hull or float away +/mob/living/exosuit/check_space_footing() //mechs can't push off things to move around in space, they stick to hull or float away + if(has_gravity()) + return TRUE for(var/thing in RANGE_TURFS(src, 1)) var/turf/T = thing if(T.density || T.is_wall() || T.is_floor()) diff --git a/code/modules/mechs/premade/combat.dm b/code/modules/mechs/premade/combat.dm index e9dc09437f6..ec7bc6b2688 100644 --- a/code/modules/mechs/premade/combat.dm +++ b/code/modules/mechs/premade/combat.dm @@ -17,7 +17,7 @@ /mob/living/exosuit/premade/combat/spawn_mech_equipment() ..() install_system(new /obj/item/mech_equipment/mounted_system/taser(src), HARDPOINT_LEFT_HAND) - install_system(new /obj/item/mech_equipment/mounted_system/taser/ion(src), HARDPOINT_RIGHT_HAND) + install_system(new /obj/item/mech_equipment/mounted_system/projectile/assault_rifle(src), HARDPOINT_RIGHT_HAND) install_system(new /obj/item/mech_equipment/flash(src), HARDPOINT_LEFT_SHOULDER) install_system(new /obj/item/mech_equipment/light(src), HARDPOINT_RIGHT_SHOULDER) diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index e97ded60a4c..090bd283b74 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -223,6 +223,16 @@ labels = list("practice") ammo_type = /obj/item/ammo_casing/rifle/practice +/obj/item/ammo_magazine/rifle/drum + name = "machine gun drum magazine" + icon_state = "drum" + origin_tech = "{'combat':2}" + mag_type = MAGAZINE + caliber = CALIBER_RIFLE + material = /decl/material/solid/metal/steel + ammo_type = /obj/item/ammo_casing/rifle + max_ammo = 100 + /obj/item/ammo_magazine/caps name = "speed loader" desc = "A cheap plastic speed loader for some kind of revolver." @@ -235,4 +245,4 @@ /obj/item/ammo_magazine/speedloader/laser_revolver caliber = CALIBER_PISTOL_LASBULB - ammo_type = /obj/item/ammo_casing/lasbulb \ No newline at end of file + ammo_type = /obj/item/ammo_casing/lasbulb diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 83d7e9d5383..f80d4ba9e46 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -109,7 +109,7 @@ /obj/item/gun/preserve_in_cryopod(var/obj/machinery/cryopod/pod) return TRUE -/obj/item/gun/proc/set_autofire(var/atom/fire_at, var/mob/fire_by) +/obj/item/gun/proc/set_autofire(var/atom/fire_at, var/mob/fire_by, var/autoturn = TRUE) . = TRUE if(!istype(fire_at) || !istype(fire_by)) . = FALSE @@ -121,7 +121,7 @@ autofiring_at = fire_at autofiring_by = fire_by if(!autofiring_timer) - autofiring_timer = addtimer(CALLBACK(src, .proc/handle_autofire), burst_delay, (TIMER_STOPPABLE | TIMER_LOOP | TIMER_UNIQUE | TIMER_OVERRIDE)) + autofiring_timer = addtimer(CALLBACK(src, .proc/handle_autofire, autoturn), burst_delay, (TIMER_STOPPABLE | TIMER_LOOP | TIMER_UNIQUE | TIMER_OVERRIDE)) else clear_autofire() @@ -132,19 +132,18 @@ deltimer(autofiring_timer) autofiring_timer = null -/obj/item/gun/proc/handle_autofire() +/obj/item/gun/proc/handle_autofire(var/autoturn) set waitfor = FALSE . = TRUE if(QDELETED(autofiring_at) || QDELETED(autofiring_by)) . = FALSE - else if(autofiring_by.get_active_hand() != src || autofiring_by.incapacitated()) - . = FALSE - else if(!autofiring_by.client || !(autofiring_by in view(autofiring_by.client.view, autofiring_by))) + else if(!autofiring_by.can_autofire(src, autofiring_at)) . = FALSE if(!.) clear_autofire() else if(can_autofire()) - autofiring_by.set_dir(get_dir(src, autofiring_at)) + if(autoturn) + autofiring_by.set_dir(get_dir(src, autofiring_at)) Fire(autofiring_at, autofiring_by, null, (get_dist(autofiring_at, autofiring_by) <= 1), FALSE, FALSE) /obj/item/gun/update_twohanding() @@ -690,3 +689,10 @@ Fire(aiming_at, M) if(M.aiming) M.aiming.toggle_active(FALSE, TRUE) + +/mob/proc/can_autofire(var/obj/item/gun/autofiring, var/atom/autofiring_at) + if(!client || !(autofiring_at in view(client.view,src))) + return FALSE + if(get_active_hand() != autofiring || incapacitated()) + return FALSE + return TRUE \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 129075a5519..23a570029b7 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -29,6 +29,7 @@ var/auto_eject_sound = null var/mag_insert_sound = 'sound/weapons/guns/interaction/pistol_magin.ogg' var/mag_remove_sound = 'sound/weapons/guns/interaction/pistol_magout.ogg' + var/manual_unload = TRUE //Whether or not the gun can be unloaded by hand. var/is_jammed = 0 //Whether this gun is jammed var/jam_chance = 0 //Chance it jams on fire @@ -217,11 +218,11 @@ /obj/item/gun/projectile/attack_self(mob/user) if(firemodes.len > 1) ..() - else + else if(manual_unload) unload_ammo(user) /obj/item/gun/projectile/attack_hand(mob/user) - if(user.is_holding_offhand(src)) + if(user.is_holding_offhand(src) && manual_unload) unload_ammo(user, allow_dump=0) else return ..() diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 80fee5c8f59..3333c9dc842 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -44,7 +44,7 @@ w_class = ITEM_SIZE_HUGE force = 10 caliber = CALIBER_RIFLE - origin_tech = "{'combat':8,'materials':3}" + origin_tech = "{'combat':7,'materials':3}" ammo_type = /obj/item/ammo_casing/rifle slot_flags = SLOT_BACK load_method = MAGAZINE @@ -64,6 +64,26 @@ /decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT, /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE ) + firemodes = list( + list(mode_name="semi auto", burst=1, fire_delay=null, one_hand_penalty=8, burst_accuracy=null, dispersion=null), + list(mode_name="3-round bursts", burst=3, fire_delay=null, one_hand_penalty=9, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)), + list(mode_name="full auto", burst=1, fire_delay=0, burst_delay=1, one_hand_penalty=7, burst_accuracy = list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0), autofire_enabled=1) + ) + +/obj/item/gun/projectile/automatic/assault_rifle/update_base_icon() + if(ammo_magazine) + if(ammo_magazine.stored_ammo.len) + icon_state = "[get_world_inventory_state()]-loaded" + else + icon_state = "[get_world_inventory_state()]-empty" + else + icon_state = get_world_inventory_state() + +/obj/item/gun/projectile/automatic/assault_rifle/grenade + name = "assault rifle" + desc = "The Z8 Bulldog is an older model bullpup carbine. This one has an underslung grenade launcher. REALLY makes you feel like a space marine when you hold it." + origin_tech = "{'combat':8,'materials':3}" + firemodes = list( list(mode_name="semi auto", burst=1, fire_delay=null, use_launcher=null, one_hand_penalty=8, burst_accuracy=null, dispersion=null), list(mode_name="3-round bursts", burst=3, fire_delay=null, use_launcher=null, one_hand_penalty=9, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)), @@ -74,23 +94,23 @@ var/use_launcher = 0 var/obj/item/gun/launcher/grenade/underslung/launcher -/obj/item/gun/projectile/automatic/assault_rifle/Initialize() +/obj/item/gun/projectile/automatic/assault_rifle/grenade/Initialize() . = ..() launcher = new(src) -/obj/item/gun/projectile/automatic/assault_rifle/attackby(obj/item/I, mob/user) +/obj/item/gun/projectile/automatic/assault_rifle/grenade/attackby(obj/item/I, mob/user) if((istype(I, /obj/item/grenade))) launcher.load(I, user) else ..() -/obj/item/gun/projectile/automatic/assault_rifle/attack_hand(mob/user) +/obj/item/gun/projectile/automatic/assault_rifle/grenade/attack_hand(mob/user) if(user.is_holding_offhand(src) && use_launcher) launcher.unload(user) else ..() -/obj/item/gun/projectile/automatic/assault_rifle/Fire(atom/target, mob/living/user, params, pointblank=0, reflex=0) +/obj/item/gun/projectile/automatic/assault_rifle/grenade/Fire(atom/target, mob/living/user, params, pointblank=0, reflex=0) if(use_launcher) launcher.Fire(target, user, params, pointblank, reflex) if(!launcher.chambered) @@ -98,18 +118,78 @@ else ..() -/obj/item/gun/projectile/automatic/assault_rifle/update_base_icon() - if(ammo_magazine) - if(ammo_magazine.stored_ammo.len) - icon_state = "[get_world_inventory_state()]-loaded" - else - icon_state = "[get_world_inventory_state()]-empty" - else - icon_state = get_world_inventory_state() - -/obj/item/gun/projectile/automatic/assault_rifle/examine(mob/user) +/obj/item/gun/projectile/automatic/assault_rifle/grenade/examine(mob/user) . = ..() if(launcher.chambered) to_chat(user, "\The [launcher] has \a [launcher.chambered] loaded.") else to_chat(user, "\The [launcher] is empty.") + +/obj/item/gun/projectile/automatic/assault_rifle/grenade/toggle_safety(mob/user) + . = ..() + launcher.toggle_safety() // Do not pass user to prevent double messages. + +// Admin-spawn machine gun. Mech subtype is meant to be used, but this can be spawned for hulks. +/obj/item/gun/projectile/automatic/machine + name = "massive machine gun" + desc = "The XC-67 \"Creosote\" is a massive machine gun, and ranks high on most tin-pot dictators' wish lists. Firing this thing without some sort of weapons platform is a hopeless task." + icon = 'icons/obj/guns/machine.dmi' + w_class = ITEM_SIZE_HUGE + force = 10 + caliber = CALIBER_RIFLE + origin_tech = "{'combat':9,'materials':3}" + ammo_type = /obj/item/ammo_casing/rifle + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/rifle/drum + allowed_magazines = /obj/item/ammo_magazine/rifle/drum + accuracy = 1 + accuracy_power = 7 + one_hand_penalty = 3000 + bulk = GUN_BULK_RIFLE + + burst_delay = 1 + burst = 3 + burst_accuracy = list(0,-1,-1) + dispersion = list(0.0, 0.6, 1.0) + + fire_delay = 0 + autofire_enabled = 1 + + mag_insert_sound = 'sound/weapons/guns/interaction/batrifle_magin.ogg' + mag_remove_sound = 'sound/weapons/guns/interaction/batrifle_magout.ogg' + material = /decl/material/solid/metal/steel + + var/spin_up_time = null + var/sound_token + +/obj/item/gun/projectile/automatic/machine/Fire(atom/target, mob/living/user, clickparams, pointblank, reflex, set_click_cooldown) + if(!spin_up_time || world.time < spin_up_time + 1 SECONDS) + return FALSE + . = ..() + +/obj/item/gun/projectile/automatic/machine/special_check(mob/user) + if(!istype(user, /mob/living)) + return FALSE + if(!user.check_dexterity(DEXTERITY_WEAPONS)) + return FALSE + + var/mob/living/M = user + if(!istype(M, /mob/living/exosuit)) + if(!(MUTATION_HULK in M.mutations)) + to_chat(user, SPAN_WARNING("You can barely lift \the [src], let alone fire it!")) + return FALSE + return TRUE + +/obj/item/gun/projectile/automatic/machine/set_autofire(atom/fire_at, mob/fire_by, autoturn) + if(!special_check(fire_by)) + return FALSE + . = ..() + if(. && !spin_up_time) + if(!sound_token) + sound_token = play_looping_sound(src, "machine_gun", 'sound/mecha/hydraulic.ogg', volume = 30) + spin_up_time = world.time + +/obj/item/gun/projectile/automatic/machine/clear_autofire() + . = ..() + spin_up_time = null + QDEL_NULL(sound_token) \ No newline at end of file diff --git a/icons/mecha/mech_equipment.dmi b/icons/mecha/mech_equipment.dmi index 7ab411ffecdd135db73f65afe22e623833276991..6f3198ad53515f105af05256663a4aabcbead903 100644 GIT binary patch delta 5752 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 JRmzwL{|9C=NxA?4 delta 5626 zcmZvgbyQSu-0g>y6cMCDLb^jbq`Nzmp(O-~amYhR2{MCp2?){+(hWn0LkW_S%Fx}s z^Ly{Q_pkfkS?fIKS!bPRfA?pf{i7eF34sA;#Xu&!UY)3Qm)W;Egmj)o|!$CINE&k$Tk|h zDeMOtI1jD0`|(AcVgxDBWJzsOS?OS?NlBMi57@f$h1@ zycd1P7v^x`SJmn+Y#SRNZi3>be8`+MO;xh!(>t;bXsa#`n~@I#%1BPa01q+J%JDK< z&Eu3~j>Y*>qN!aY!kMy=0uJKWwEi}QE*n9vhcJEWAUA_GVc5N@QT|k2sPfaPw7t4U z(Zm&nEL~Q`>@1l9J$)8u-A#+$>=~Z7G0T$|L_?g4HIwEK?|PSdWp@uq_TF3~A3!eO zD|hN}G2vR6%IS$|I&1*qee)Q;64NFL-tN)5V@2YsibBZKX|BBZ#P)UpYLj*$GE>B= zRt*-EIUY&I;R9i_@$0xy-Tvp-S`^R{Fqx>ndS&$8zvX7E?cnsLVo=S;9ORO!?F>|_Te)ec0Pce!ID`65#Bk^1LXp=|i);LHYklTJ(e&FEb3R^VWxyhO# zBENo6xM0)!Ij6J;NwJ)z*WlEBS*c?ov1WFj{63}K>*1z$ny)`68d92_8`pmdKN0@= zNb^>NM2*4gk&QSBo*G25MU*5OPHC2*z5k6g-HoT;KI=~*@OM!9WOs^TVojw+u}^Sf z{YSe1q}o<9q*(Xk@~H}a{jq4{2TZ!Zm!GxFgH&s${N(QhVIw00&RacZf3~FQ91rD% zzr3}cWeUuv^Q~(jYZo+au%*Uxvy^AWobD5}2vA5Cp)ItjT%QmfG3Bez+Mc8)Vp=`0 zIckpPdo_9Qe4K9DoGSxSIl&2yNWXvs0Uzne) zw%H)Pxt@w^jEjAa2B(!g4~hHx^{aiXFHv$Bd+_4<2dkY~+Fq(|O#4tCC3yok`w
  • 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 KQL0q13Hu*GN$m>& diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 4675377c351f4702404491022abf11ea6f3ff61d..aed587179330b09d0876eb81bc74b7958443c799 100644 GIT binary patch literal 13910 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 z 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 diff --git a/icons/obj/guns/machine.dmi b/icons/obj/guns/machine.dmi new file mode 100644 index 0000000000000000000000000000000000000000..cf566eea211cfe48ecb03a58a979b2f7ddd7bce4 GIT binary patch literal 806 zcmV+>1KIqEP)!`nYF8}}l0d!JMQvg8b*k%9#0E>E5 zSad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP1D@x2wg|OkOGD>q3^YSxO z6q52&Ds_u<@=M}#;xiKSkaU_5t+NQPPGtpGKNql90AK4rDRP;_c>n+c97#k$R9J=W zmc38HKp4ia)-N`%VSvpZ4!RLB#L>IA z7O`zY2OdCwDZ$btPyqLB9fL?1bsoddDOUIN-GM{`H+&3B#j81Gh9^^6ZKrhO|K|oBFR~0eUPOv{kk1P~ zOXFK?!h?KXEbi=*2l>2+@9YQ6knkX%7jeQKLJ1EvyoeLHA?AUO7edUC@Ic24+2@1@ kI$p%BL`d>L$BX}_FM>(Jo-={p!~g&Q07*qoM6N<$f) Date: Sat, 18 Dec 2021 11:21:55 -0500 Subject: [PATCH 024/239] Cleans up mech autofire logic --- .../mechs/equipment/combat_projectile.dm | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/code/modules/mechs/equipment/combat_projectile.dm b/code/modules/mechs/equipment/combat_projectile.dm index 07af8679c18..b0af81339fc 100644 --- a/code/modules/mechs/equipment/combat_projectile.dm +++ b/code/modules/mechs/equipment/combat_projectile.dm @@ -16,14 +16,11 @@ /obj/item/gun/projectile/automatic/get_hardpoint_status_value() if(!isnull(ammo_magazine)) return ammo_magazine.stored_ammo.len - else - return null /obj/item/gun/projectile/automatic/get_hardpoint_maptext() if(!isnull(ammo_magazine)) return "[ammo_magazine.stored_ammo.len]/[ammo_magazine.max_ammo]" - else - return 0 + return 0 //Weapons below this. /obj/item/mech_equipment/mounted_system/projectile @@ -136,14 +133,15 @@ /obj/item/mech_equipment/mounted_system/projectile/MouseDownInteraction(atom/object, location, control, params, mob/user) var/obj/item/gun/gun = holding - if(user != src) - if(istype(object) && (isturf(object) || isturf(object.loc)) && !user.incapacitated() && istype(gun)) - gun.set_autofire(object, owner, FALSE) // Passed gun-firer is still the exosuit since all checks need to be done on the suit. - owner.current_user = user - else - if(istype(object) && (isturf(object) || isturf(object.loc)) && !owner.incapacitated() && istype(gun)) - gun.set_autofire(object, owner, FALSE) - owner.current_user = null + if(istype(object) && (isturf(object) || isturf(object.loc)) && istype(gun)) + if(user != src) + if(!user.incapacitated()) + gun.set_autofire(object, owner, FALSE) // Passed gun-firer is still the exosuit since all checks need to be done on the suit. + owner.current_user = user + else + if(!owner.incapacitated()) + gun.set_autofire(object, owner, FALSE) + owner.current_user = null /obj/item/mech_equipment/mounted_system/projectile/MouseUpInteraction(atom/object, location, control, params, mob/user) var/obj/item/gun/gun = holding @@ -156,12 +154,15 @@ if(!istype(gun)) owner.current_user = null return - if(user != owner) - if(user != owner.current_user) + if(istype(over_object) && (isturf(over_object) || isturf(over_object.loc))) + if(user != owner) + if(user != owner.current_user || user.incapacitated()) + gun.clear_autofire() + return + else if(owner.incapacitated()) gun.clear_autofire() return - if(istype(over_object) && (isturf(over_object) || isturf(over_object.loc)) && !user.incapacitated() && istype(gun)) - gun.set_autofire(over_object, owner, FALSE) - else - if(istype(over_object) && (isturf(over_object) || isturf(over_object.loc)) && !owner.incapacitated() && istype(gun)) - gun.set_autofire(over_object, owner, FALSE) \ No newline at end of file + gun.set_autofire(over_object, owner, FALSE) + return + + gun.clear_autofire() \ No newline at end of file From ee3554fd1b0879b0136b0dfd9e76b6866a4335ce Mon Sep 17 00:00:00 2001 From: "natakilar@gmail.com" Date: Sun, 15 Jan 2023 15:11:22 -0500 Subject: [PATCH 025/239] Adjusts checks for mounted projectile weapons --- code/_onclick/MouseDrag.dm | 6 +-- .../mechs/equipment/combat_projectile.dm | 40 +++++++++---------- code/modules/projectiles/guns/projectile.dm | 2 + .../projectiles/guns/projectile/automatic.dm | 9 ++--- 4 files changed, 29 insertions(+), 28 deletions(-) diff --git a/code/_onclick/MouseDrag.dm b/code/_onclick/MouseDrag.dm index 1c683c63f42..daf6a09accb 100644 --- a/code/_onclick/MouseDrag.dm +++ b/code/_onclick/MouseDrag.dm @@ -9,7 +9,7 @@ return FALSE /mob/proc/OnMouseDrag(atom/src_object, atom/over_object, src_location, over_location, src_control, over_control, params) - if(istype(loc, /atom)) + if(loc) var/atom/A = loc if(A.RelayMouseDrag(src_object, over_object, src_location, over_location, src_control, over_control, params, src)) return @@ -19,7 +19,7 @@ gun.set_autofire(over_object, src) /mob/proc/OnMouseDown(atom/object, location, control, params) - if(istype(loc, /atom)) + if(loc) var/atom/A = loc if(A.RelayMouseDown(object, location, control, params, src)) return @@ -29,7 +29,7 @@ gun.set_autofire(object, src) /mob/proc/OnMouseUp(atom/object, location, control, params) - if(istype(loc, /atom)) + if(loc) var/atom/A = loc if(A.RelayMouseUp(object, location, control, params, src)) return diff --git a/code/modules/mechs/equipment/combat_projectile.dm b/code/modules/mechs/equipment/combat_projectile.dm index b0af81339fc..f3748b03f90 100644 --- a/code/modules/mechs/equipment/combat_projectile.dm +++ b/code/modules/mechs/equipment/combat_projectile.dm @@ -1,9 +1,11 @@ -/obj/item/mech_equipment/mounted_system/projectile/attackby(var/obj/item/O as obj, mob/user as mob) +/obj/item/mech_equipment/mounted_system/projectile/attackby(var/obj/item/O, var/mob/user) var/obj/item/gun/projectile/automatic/A = holding + if(!istype(A)) + return if(istype(O, /obj/item/crowbar)) A.unload_ammo(user) to_chat(user, SPAN_NOTICE("You remove the ammo magazine from the [src].")) - if(istype(O, A.magazine_type)) + else if(istype(O, A.magazine_type)) A.load_ammo(O, user) to_chat(user, SPAN_NOTICE("You load the ammo magazine into the [src].")) @@ -29,6 +31,7 @@ holding_type = /obj/item/gun/projectile/automatic/smg/mech restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) restricted_software = list(MECH_SOFTWARE_WEAPONS) + origin_tech = "{'programming':4,'combat':6,'engineering':5}" /obj/item/gun/projectile/automatic/smg/mech magazine_type = /obj/item/ammo_magazine/mech/smg_top @@ -49,6 +52,7 @@ holding_type = /obj/item/gun/projectile/automatic/assault_rifle/mech restricted_hardpoints = list(HARDPOINT_LEFT_HAND, HARDPOINT_RIGHT_HAND) restricted_software = list(MECH_SOFTWARE_WEAPONS) + origin_tech = "{'programming':4,'combat':8,'engineering':6}" /obj/item/gun/projectile/automatic/assault_rifle/mech magazine_type = /obj/item/ammo_magazine/mech/rifle @@ -114,16 +118,12 @@ /mob/living/exosuit/can_autofire(obj/item/gun/autofiring, atom/autofiring_at) if(autofiring.autofiring_by != src) return FALSE - var/client/C - if(current_user) - C = current_user.client - if(current_user.incapacitated()) - return FALSE - else - C = client - if(incapacitated()) - return FALSE - if(!C || !(autofiring_at in view(C.view, src))) + var/client/C = current_user ? current_user.client : client + + if(!C || !C.mob || C.mob.incapacitated()) + return FALSE + + if(!(autofiring_at in view(C.view, src))) return FALSE if(!(get_dir(src, autofiring_at) & dir)) return FALSE @@ -147,22 +147,22 @@ var/obj/item/gun/gun = holding if(istype(gun)) gun.clear_autofire() - owner.current_user = null + if(owner) // In case the owning exosuit has been gibbed etc. + owner.current_user = null /obj/item/mech_equipment/mounted_system/projectile/MouseDragInteraction(atom/src_object, atom/over_object, src_location, over_location, src_control, over_control, params, mob/user) var/obj/item/gun/gun = holding + if(!owner) + gun?.clear_autofire() + return if(!istype(gun)) - owner.current_user = null + owner?.current_user = null return if(istype(over_object) && (isturf(over_object) || isturf(over_object.loc))) - if(user != owner) - if(user != owner.current_user || user.incapacitated()) - gun.clear_autofire() - return - else if(owner.incapacitated()) + if(user.incapacitated() || (user != owner && user != owner.current_user)) gun.clear_autofire() return gun.set_autofire(over_object, owner, FALSE) return - + gun.clear_autofire() \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 23a570029b7..46bd66a2d08 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -220,6 +220,8 @@ ..() else if(manual_unload) unload_ammo(user) + else + to_chat(user, SPAN_WARNING("You can't unload \the [src] manually. Maybe try a crowbar?")) /obj/item/gun/projectile/attack_hand(mob/user) if(user.is_holding_offhand(src) && manual_unload) diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 3333c9dc842..227811e79da 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -83,7 +83,7 @@ name = "assault rifle" desc = "The Z8 Bulldog is an older model bullpup carbine. This one has an underslung grenade launcher. REALLY makes you feel like a space marine when you hold it." origin_tech = "{'combat':8,'materials':3}" - + firemodes = list( list(mode_name="semi auto", burst=1, fire_delay=null, use_launcher=null, one_hand_penalty=8, burst_accuracy=null, dispersion=null), list(mode_name="3-round bursts", burst=3, fire_delay=null, use_launcher=null, one_hand_penalty=9, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)), @@ -174,10 +174,9 @@ return FALSE var/mob/living/M = user - if(!istype(M, /mob/living/exosuit)) - if(!(MUTATION_HULK in M.mutations)) - to_chat(user, SPAN_WARNING("You can barely lift \the [src], let alone fire it!")) - return FALSE + if(M.mob_size < MOB_SIZE_LARGE) + to_chat(user, SPAN_WARNING("You can barely lift \the [src], let alone fire it!")) + return FALSE return TRUE /obj/item/gun/projectile/automatic/machine/set_autofire(atom/fire_at, mob/fire_by, autoturn) From 779ee4d6c4c1a12876bf8d034387b65e084b3bab Mon Sep 17 00:00:00 2001 From: "natakilar@gmail.com" Date: Sun, 15 Jan 2023 15:11:48 -0500 Subject: [PATCH 026/239] Adjusts costs for mounted exosuit equipment --- .../industrial/designs_exosuit_components.dm | 36 +++++++++++++------ code/modules/projectiles/guns/energy/laser.dm | 4 +++ .../projectiles/guns/energy/special.dm | 5 +++ code/modules/projectiles/guns/energy/stun.dm | 6 +++- 4 files changed, 39 insertions(+), 12 deletions(-) diff --git a/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm b/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm index 99d7e495d6c..1c4f1849691 100644 --- a/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm +++ b/code/modules/fabrication/designs/industrial/designs_exosuit_components.dm @@ -84,37 +84,51 @@ /datum/fabricator_recipe/industrial/exosuit_gear/drill path = /obj/item/mech_equipment/drill -/datum/fabricator_recipe/industrial/exosuit_gear/taser +/datum/fabricator_recipe/industrial/exosuit_gear/mounted path = /obj/item/mech_equipment/mounted_system/taser -/datum/fabricator_recipe/industrial/exosuit_gear/plasma +// Add the resources from whatever is mounted on the system +/datum/fabricator_recipe/industrial/exosuit_gear/mounted/get_resources() + . = ..() + if(!ispath(path, /obj/item/mech_equipment/mounted_system)) + return + var/obj/item/mech_equipment/mounted_system/system = path + + var/mounted_type = initial(system.holding_type) + if(!mounted_type) + return + var/list/mounted_cost = atom_info_repository.get_matter_for(mounted_type) + for(var/mat in mounted_cost) + resources[mat] += mounted_cost[mat] * FABRICATOR_EXTRA_COST_FACTOR + +/datum/fabricator_recipe/industrial/exosuit_gear/mounted/plasma path = /obj/item/mech_equipment/mounted_system/taser/plasma -/datum/fabricator_recipe/industrial/exosuit_gear/ion +/datum/fabricator_recipe/industrial/exosuit_gear/mounted/ion path = /obj/item/mech_equipment/mounted_system/taser/ion -/datum/fabricator_recipe/industrial/exosuit_gear/laser +/datum/fabricator_recipe/industrial/exosuit_gear/mounted/laser path = /obj/item/mech_equipment/mounted_system/taser/laser -/datum/fabricator_recipe/industrial/exosuit_gear/smg +/datum/fabricator_recipe/industrial/exosuit_gear/mounted/smg path = /obj/item/mech_equipment/mounted_system/projectile -/datum/fabricator_recipe/industrial/exosuit_gear/rifle +/datum/fabricator_recipe/industrial/exosuit_gear/mounted/rifle path = /obj/item/mech_equipment/mounted_system/projectile/assault_rifle -/datum/fabricator_recipe/industrial/exosuit_gear/rcd +/datum/fabricator_recipe/industrial/exosuit_gear/mounted/rcd path = /obj/item/mech_equipment/mounted_system/rcd -/datum/fabricator_recipe/industrial/exosuit_gear/floodlight +/datum/fabricator_recipe/industrial/exosuit_gear/mounted/floodlight path = /obj/item/mech_equipment/light -/datum/fabricator_recipe/industrial/exosuit_gear/sleeper +/datum/fabricator_recipe/industrial/exosuit_gear/mounted/sleeper path = /obj/item/mech_equipment/sleeper -/datum/fabricator_recipe/industrial/exosuit_gear/extinguisher +/datum/fabricator_recipe/industrial/exosuit_gear/mounted/extinguisher path = /obj/item/mech_equipment/mounted_system/extinguisher -/datum/fabricator_recipe/industrial/exosuit_gear/mechshields +/datum/fabricator_recipe/industrial/exosuit_gear/mounted/mechshields path = /obj/item/mech_equipment/shields /datum/fabricator_recipe/industrial/exosuit_ammo diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 5e21a1d69a3..0d804ea7cee 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -11,6 +11,10 @@ origin_tech = "{'combat':3,'magnets':2}" material = /decl/material/solid/metal/steel projectile_type = /obj/item/projectile/beam/midlaser + matter = list( + /decl/material/solid/fiberglass = MATTER_AMOUNT_REINFORCEMENT, + /decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT + ) /obj/item/gun/energy/laser/mounted self_recharge = 1 diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index df275721b29..cb4878d05f1 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -14,6 +14,11 @@ fire_delay = 30 projectile_type = /obj/item/projectile/ion combustion = 0 + material = /decl/material/solid/metal/steel + matter = list( + /decl/material/solid/metal/uranium = MATTER_AMOUNT_REINFORCEMENT, + /decl/material/solid/metal/gold = MATTER_AMOUNT_REINFORCEMENT + ) /obj/item/gun/energy/ionrifle/emp_act(severity) ..(max(severity, 2)) //so it doesn't EMP itself, I guess diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 54e02c8b3a6..ca42527292f 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -8,11 +8,15 @@ max_shots = 5 projectile_type = /obj/item/projectile/beam/stun combustion = 0 - firemodes = list( list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun), list(mode_name="shock", projectile_type=/obj/item/projectile/beam/stun/shock), ) + material = /decl/material/solid/metal/steel + matter = list( + /decl/material/solid/metal/aluminium = MATTER_AMOUNT_SECONDARY, + /decl/material/solid/metal/silver = MATTER_AMOUNT_REINFORCEMENT, + ) /obj/item/gun/energy/taser/mounted name = "mounted electrolaser" From 3052428332bc29450d7d15781353dfe0a5282552 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Mon, 16 Jan 2023 15:58:43 +1100 Subject: [PATCH 027/239] Allows forcing of a specific exoplanet type, mostly for debug. --- maps/~mapsystem/maps.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/maps/~mapsystem/maps.dm b/maps/~mapsystem/maps.dm index 5b79e29f1d6..c1f0f546f32 100644 --- a/maps/~mapsystem/maps.dm +++ b/maps/~mapsystem/maps.dm @@ -119,6 +119,7 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable var/id_hud_icons = 'icons/mob/hud.dmi' // Used by the ID HUD (primarily sechud) overlay. var/num_exoplanets = 0 + var/force_exoplanet_type // Used to override exoplanet weighting and always pick the same exoplanet. //dimensions of planet zlevels, defaults to world size if smaller, INCREASES world size if larger. //Due to how maps are generated, must be (2^n+1) e.g. 17,33,65,129 etc. Map will just round up to those if set to anything other. var/list/planet_size = list() @@ -278,6 +279,8 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable new_planet.build_level(planet_size[1], planet_size[2]) /datum/map/proc/pick_exoplanet() + if(force_exoplanet_type) + return force_exoplanet_type var/planets = list() for(var/T in subtypesof(/obj/effect/overmap/visitable/sector/exoplanet)) var/obj/effect/overmap/visitable/sector/exoplanet/planet_type = T From c84433ec3b248209ed1ee23d8c1fb58fbcfb76d3 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Tue, 17 Jan 2023 00:43:03 +0000 Subject: [PATCH 028/239] Automatic changelog generation [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index d521a1e91f8..27d988da6bd 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -137,12 +137,6 @@

    MistakeNot4892 updated:

    • Liver and brain regeneration has been tweaked, and all internal organs will now regenerate slowly to a point.
    - -

    15 November 2022

    -

    PsyCommando updated:

    -
      -
    • Fix limb reattachment surgery not properly installing any contained internal organs once the last step was completed.
    • -
From a6801ae313dfee69286f65c7bb2e5aa18280f2cc Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Tue, 17 Jan 2023 16:45:18 +1100 Subject: [PATCH 029/239] Automatic changelog generation for PR #2882 [ci skip] --- html/changelogs/AutoChangeLog-pr-2882.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2882.yml diff --git a/html/changelogs/AutoChangeLog-pr-2882.yml b/html/changelogs/AutoChangeLog-pr-2882.yml new file mode 100644 index 00000000000..db0d93dca10 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2882.yml @@ -0,0 +1,4 @@ +author: NataKilar +delete-after: true +changes: + - bugfix: Items no longer appear heavily damaged regardless of their health From d145b9c3e4aa1a1946c8bbb9b9083210d3818b7b Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Tue, 17 Jan 2023 18:20:13 +1100 Subject: [PATCH 030/239] Fixes and refactors for radio message_mode code. --- code/__defines/radio.dm | 7 + .../objects/items/devices/radio/headset.dm | 11 +- .../game/objects/items/devices/radio/radio.dm | 10 +- code/modules/mob/living/carbon/human/say.dm | 2 +- code/modules/mob/living/say.dm | 185 +++++++++--------- code/modules/mob/living/silicon/say.dm | 31 ++- .../simple_animal/hostile/retaliate/parrot.dm | 4 +- code/modules/mob/say.dm | 16 +- nebula.dme | 1 + 9 files changed, 139 insertions(+), 128 deletions(-) create mode 100644 code/__defines/radio.dm diff --git a/code/__defines/radio.dm b/code/__defines/radio.dm new file mode 100644 index 00000000000..1fec306b409 --- /dev/null +++ b/code/__defines/radio.dm @@ -0,0 +1,7 @@ +#define MESSAGE_MODE_LEFT "left" +#define MESSAGE_MODE_RIGHT "right" +#define MESSAGE_MODE_INTERCOM "intercom" +#define MESSAGE_MODE_DEFAULT "default" +#define MESSAGE_MODE_WHISPER "whisper" +#define MESSAGE_MODE_DEPARTMENT "department" +#define MESSAGE_MODE_SPECIAL "special" \ No newline at end of file diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index f6116a8eb48..2814ffd302a 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -49,12 +49,11 @@ to_chat(user, radio_desc) /obj/item/radio/headset/get_connection_from_message_mode(mob/living/M, message, message_mode) - if (message_mode == "special") - if (translate_binary) - var/decl/language/binary = GET_DECL(/decl/language/binary) - binary.broadcast(M, message) - return null - return ..() + if(message_mode == MESSAGE_MODE_SPECIAL && translate_binary) + var/decl/language/binary = GET_DECL(/decl/language/binary) + binary.broadcast(M, message) + else + return ..() /obj/item/radio/headset/receive_range(freq, level, aiOverride = 0) if (aiOverride) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index fb825fe0147..d9995736bb7 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -238,7 +238,7 @@ /obj/item/radio/proc/autosay(var/message, var/from, var/channel, var/sayverb = "states") //BS12 EDIT var/datum/radio_frequency/connection = null if(channel && channels && channels.len > 0) - if (channel == "department") + if (channel == MESSAGE_MODE_DEPARTMENT) channel = channels[1] connection = secure_radio_connections[channel] else @@ -254,12 +254,12 @@ // Interprets the message mode when talking into a radio, possibly returning a connection datum /obj/item/radio/proc/get_connection_from_message_mode(mob/living/M, message, message_mode) // If a channel isn't specified, send to common. - if(!message_mode || message_mode == "headset") + if(!message_mode || global.nondepartmental_message_modes[message_mode]) return radio_connection // Otherwise, if a channel is specified, look for it. if(channels && channels.len > 0) - if (message_mode == "department") // Department radio shortcut + if (message_mode == MESSAGE_MODE_DEPARTMENT) // Department radio shortcut message_mode = channels[1] if (channels[message_mode]) // only broadcast if the channel is set on @@ -287,7 +287,8 @@ to_chat(M, SPAN_WARNING("You're disrupted as you reach for \the [src].")) return 0 - if(istype(M)) M.trigger_aiming(TARGET_CAN_RADIO) + if(istype(M)) + M.trigger_aiming(TARGET_CAN_RADIO) // Uncommenting this. To the above comment: // The permacell radios aren't suppose to be able to transmit, this isn't a bug and this "fix" is just making radio wires useless. -Giacom @@ -297,7 +298,6 @@ if(!radio_connection) set_frequency(frequency) - if(power_usage) var/obj/item/cell/has_cell = get_cell() if(!has_cell) diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index d5339dae2ff..4f9051c39f3 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -114,7 +114,7 @@ return ..(message_data) /mob/living/carbon/human/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) - if(message_mode == "whisper") //It's going to get sanitized again immediately, so decode. + if(message_mode == MESSAGE_MODE_WHISPER) //It's going to get sanitized again immediately, so decode. whisper_say(html_decode(message), speaking, alt_name) return TRUE return ..() diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 427c30b7e22..23a45f9f914 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -1,79 +1,87 @@ var/global/list/department_radio_keys = list( - ":r" = "right ear", ".r" = "right ear", - ":l" = "left ear", ".l" = "left ear", - ":i" = "intercom", ".i" = "intercom", - ":h" = "department", ".h" = "department", - ":+" = "special", ".+" = "special", //activate radio-specific special functions - ":c" = "Command", ".c" = "Command", - ":n" = "Science", ".n" = "Science", - ":m" = "Medical", ".m" = "Medical", - ":e" = "Engineering", ".e" = "Engineering", - ":s" = "Security", ".s" = "Security", - ":w" = "whisper", ".w" = "whisper", - ":t" = "Mercenary", ".t" = "Mercenary", - ":x" = "Raider", ".x" = "Raider", - ":u" = "Supply", ".u" = "Supply", - ":v" = "Service", ".v" = "Service", - ":p" = "AI Private", ".p" = "AI Private", - ":z" = "Entertainment",".z" = "Entertainment", - ":y" = "Exploration", ".y" = "Exploration", - - ":R" = "right ear", ".R" = "right ear", - ":L" = "left ear", ".L" = "left ear", - ":I" = "intercom", ".I" = "intercom", - ":H" = "department", ".H" = "department", - ":C" = "Command", ".C" = "Command", - ":N" = "Science", ".N" = "Science", - ":M" = "Medical", ".M" = "Medical", - ":E" = "Engineering", ".E" = "Engineering", - ":S" = "Security", ".S" = "Security", - ":W" = "whisper", ".W" = "whisper", - ":T" = "Mercenary", ".T" = "Mercenary", - ":X" = "Raider", ".X" = "Raider", - ":U" = "Supply", ".U" = "Supply", - ":V" = "Service", ".V" = "Service", - ":P" = "AI Private", ".P" = "AI Private", - ":Z" = "Entertainment",".Z" = "Entertainment", - ":Y" = "Exploration", ".Y" = "Exploration", + ":r" = MESSAGE_MODE_RIGHT, ".r" = MESSAGE_MODE_RIGHT, + ":l" = MESSAGE_MODE_LEFT, ".l" = MESSAGE_MODE_LEFT, + ":i" = MESSAGE_MODE_INTERCOM, ".i" = MESSAGE_MODE_INTERCOM, + ":h" = MESSAGE_MODE_DEPARTMENT, ".h" = MESSAGE_MODE_DEPARTMENT, + ":+" = MESSAGE_MODE_SPECIAL, ".+" = MESSAGE_MODE_SPECIAL, //activate radio-specific special functions + ":w" = MESSAGE_MODE_WHISPER, ".w" = MESSAGE_MODE_WHISPER, + ":c" = "Command", ".c" = "Command", + ":n" = "Science", ".n" = "Science", + ":m" = "Medical", ".m" = "Medical", + ":e" = "Engineering", ".e" = "Engineering", + ":s" = "Security", ".s" = "Security", + ":t" = "Mercenary", ".t" = "Mercenary", + ":x" = "Raider", ".x" = "Raider", + ":u" = "Supply", ".u" = "Supply", + ":v" = "Service", ".v" = "Service", + ":p" = "AI Private", ".p" = "AI Private", + ":z" = "Entertainment", ".z" = "Entertainment", + ":y" = "Exploration", ".y" = "Exploration", + + ":R" = MESSAGE_MODE_RIGHT, ".R" = MESSAGE_MODE_RIGHT, + ":L" = MESSAGE_MODE_LEFT, ".L" = MESSAGE_MODE_LEFT, + ":I" = MESSAGE_MODE_INTERCOM, ".I" = MESSAGE_MODE_INTERCOM, + ":H" = MESSAGE_MODE_DEPARTMENT, ".H" = MESSAGE_MODE_DEPARTMENT, + ":W" = MESSAGE_MODE_WHISPER, ".W" = MESSAGE_MODE_WHISPER, + ":C" = "Command", ".C" = "Command", + ":N" = "Science", ".N" = "Science", + ":M" = "Medical", ".M" = "Medical", + ":E" = "Engineering", ".E" = "Engineering", + ":S" = "Security", ".S" = "Security", + ":T" = "Mercenary", ".T" = "Mercenary", + ":X" = "Raider", ".X" = "Raider", + ":U" = "Supply", ".U" = "Supply", + ":V" = "Service", ".V" = "Service", + ":P" = "AI Private", ".P" = "AI Private", + ":Z" = "Entertainment", ".Z" = "Entertainment", + ":Y" = "Exploration", ".Y" = "Exploration", //russian version below - ":к" = "right ear", ".к" = "right ear", - ":д" = "left ear", ".д" = "left ear", - ":ш" = "intercom", ".ш" = "intercom", - ":р" = "department", ".р" = "department", - ":с" = "Command", ".с" = "Command", - ":т" = "Science", ".т" = "Science", - ":ь" = "Medical", ".ь" = "Medical", - ":у" = "Engineering", ".у" = "Engineering", - ":ы" = "Security", ".ы" = "Security", - ":ц" = "whisper", ".ц" = "whisper", - ":е" = "Mercenary", ".е" = "Mercenary", - ":г" = "Supply", ".г" = "Supply", - ":ч" = "Raider", ".ч" = "Raider", - ":м" = "Service", ".м" = "Service", - ":з" = "AI Private", ".з" = "AI Private", - ":я" = "Entertainment",".я" = "Entertainment", - ":н" = "Exploration", ".н" = "Exploration", - - ":К" = "right ear", ".К" = "right ear", - ":Д" = "left ear", ".Д" = "left ear", - ":Ш" = "intercom", ".Ш" = "intercom", - ":Р" = "department", ".Р" = "department", - ":С" = "Command", ".С" = "Command", - ":Т" = "Science", ".Т" = "Science", - ":Ь" = "Medical", ".Ь" = "Medical", - ":У" = "Engineering", ".У" = "Engineering", - ":Ы" = "Security", ".Ы" = "Security", - ":Ц" = "whisper", ".Ц" = "whisper", - ":Е" = "Mercenary", ".Е" = "Mercenary", - ":Г" = "Supply", ".Г" = "Supply", - ":Ч" = "Raider", ".Ч" = "Raider", - ":М" = "Service", ".М" = "Service", - ":З" = "AI Private", ".З" = "AI Private", - ":Я" = "Entertainment",".Я" = "Entertainment", - ":Н" = "Exploration", ".Н" = "Exploration", + ":к" = MESSAGE_MODE_RIGHT, ".к" = MESSAGE_MODE_RIGHT, + ":д" = MESSAGE_MODE_LEFT, ".д" = MESSAGE_MODE_LEFT, + ":ш" = MESSAGE_MODE_INTERCOM, ".ш" = MESSAGE_MODE_INTERCOM, + ":р" = MESSAGE_MODE_DEPARTMENT, ".р" = MESSAGE_MODE_DEPARTMENT, + ":ц" = MESSAGE_MODE_WHISPER, ".ц" = MESSAGE_MODE_WHISPER, + ":с" = "Command", ".с" = "Command", + ":т" = "Science", ".т" = "Science", + ":ь" = "Medical", ".ь" = "Medical", + ":у" = "Engineering", ".у" = "Engineering", + ":ы" = "Security", ".ы" = "Security", + ":е" = "Mercenary", ".е" = "Mercenary", + ":г" = "Supply", ".г" = "Supply", + ":ч" = "Raider", ".ч" = "Raider", + ":м" = "Service", ".м" = "Service", + ":з" = "AI Private", ".з" = "AI Private", + ":я" = "Entertainment", ".я" = "Entertainment", + ":н" = "Exploration", ".н" = "Exploration", + + ":К" = MESSAGE_MODE_RIGHT, ".К" = MESSAGE_MODE_RIGHT, + ":Д" = MESSAGE_MODE_LEFT, ".Д" = MESSAGE_MODE_LEFT, + ":Ш" = MESSAGE_MODE_INTERCOM, ".Ш" = MESSAGE_MODE_INTERCOM, + ":Р" = MESSAGE_MODE_DEPARTMENT, ".Р" = MESSAGE_MODE_DEPARTMENT, + ":Ц" = MESSAGE_MODE_WHISPER, ".Ц" = MESSAGE_MODE_WHISPER, + ":С" = "Command", ".С" = "Command", + ":Т" = "Science", ".Т" = "Science", + ":Ь" = "Medical", ".Ь" = "Medical", + ":У" = "Engineering", ".У" = "Engineering", + ":Ы" = "Security", ".Ы" = "Security", + ":Е" = "Mercenary", ".Е" = "Mercenary", + ":Г" = "Supply", ".Г" = "Supply", + ":Ч" = "Raider", ".Ч" = "Raider", + ":М" = "Service", ".М" = "Service", + ":З" = "AI Private", ".З" = "AI Private", + ":Я" = "Entertainment", ".Я" = "Entertainment", + ":Н" = "Exploration", ".Н" = "Exploration", ) +// Assoc for lookup speed since this is in potentially semihot code +var/global/list/nondepartmental_message_modes = list( + MESSAGE_MODE_LEFT = TRUE, + MESSAGE_MODE_RIGHT = TRUE, + MESSAGE_MODE_INTERCOM = TRUE, + MESSAGE_MODE_DEFAULT = TRUE, + MESSAGE_MODE_WHISPER = TRUE +) var/global/list/channel_to_radio_key = new /proc/get_radio_key_from_channel(var/channel) @@ -143,12 +151,9 @@ var/global/list/channel_to_radio_key = new // determine relevancy. See handle_message_mode below. /mob/living/proc/get_radios(var/message_mode) - if(!message_mode) - return - var/list/possible_radios - if(message_mode == "right ear" || message_mode == "left ear") - var/use_right = message_mode == "right ear" + if(message_mode == MESSAGE_MODE_RIGHT || message_mode == MESSAGE_MODE_LEFT) + var/use_right = (message_mode == MESSAGE_MODE_RIGHT) var/obj/item/thing = get_equipped_item(use_right ? slot_r_ear_str : slot_l_ear_str) if(thing) LAZYDISTINCTADD(possible_radios, thing) @@ -156,13 +161,18 @@ var/global/list/channel_to_radio_key = new thing = get_equipped_item(use_right ? BP_R_HAND : BP_L_HAND) if(thing) LAZYDISTINCTADD(possible_radios, thing) - else + else if(message_mode == MESSAGE_MODE_INTERCOM) + if(!restrained()) + for(var/obj/item/radio/I in view(1)) + if(I.intercom_handling) + LAZYDISTINCTADD(possible_radios, I) + else if(message_mode != MESSAGE_MODE_WHISPER) for(var/slot in global.ear_slots) var/thing = get_equipped_item(slot) if(thing) LAZYDISTINCTADD(possible_radios, thing) - if(length(possible_radios)) + if(LAZYLEN(possible_radios)) for(var/atom/movable/thing as anything in possible_radios) var/obj/item/radio/radio = thing.get_radio(message_mode) if(istype(radio)) @@ -172,16 +182,15 @@ var/global/list/channel_to_radio_key = new // It then processes the message_mode to implement an additional behavior needed for the message, such // as retrieving radios or looking for an intercom nearby. /mob/living/proc/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) + if(!message_mode) + return var/list/assess_items_as_radios = get_radios(message_mode) - if(message_mode == "intercom" && !restrained()) - for(var/obj/item/radio/I in view(1)) - if(I.intercom_handling) - LAZYDISTINCTADD(assess_items_as_radios, I) - for(var/obj/item/radio/radio as anything in assess_items_as_radios) - used_radios += radio + if(!LAZYLEN(assess_items_as_radios)) + return + used_radios |= assess_items_as_radios + for(var/obj/item/radio/radio as anything in used_radios) radio.add_fingerprint(src) radio.talk_into(src, message, message_mode, verb, speaking) - . = TRUE /mob/living/proc/handle_speech_sound() var/list/returns[2] @@ -227,9 +236,9 @@ var/global/list/channel_to_radio_key = new return custom_emote(1, copytext(message,2)) //parse the radio code and consume it - var/message_mode = parse_message_mode(message, "headset") + var/message_mode = parse_message_mode(message) if (message_mode) - if (message_mode == "headset") + if (message_mode == MESSAGE_MODE_DEFAULT) message = copytext_char(message,2) //it would be really nice if the parse procs could do this for us. else message = copytext_char(message,3) @@ -281,7 +290,7 @@ var/global/list/channel_to_radio_key = new if(!message || message == "") return 0 - var/list/obj/item/used_radios = new + var/list/obj/item/used_radios = list() if(handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)) return 1 diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index e8c5bc12b5c..55521ad2cbf 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -8,30 +8,27 @@ if(message_mode) if(!is_component_functioning("radio")) to_chat(src, SPAN_WARNING("Your radio isn't functional at this time.")) - return FALSE - if(message_mode == "general") - message_mode = null - return silicon_radio.talk_into(src, message, message_mode, verb, speaking) + else + used_radios += silicon_radio + . = TRUE return ..() /mob/living/silicon/ai/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) if(message_mode) - if(message_mode == "department") - return holopad_talk(message, verb, speaking) - if (ai_radio.disabledAi || !has_power() || stat) - to_chat(src, "System Error - Transceiver Disabled.") - return FALSE - if(message_mode == "general") - message_mode = null - return ai_radio.talk_into(src,message,message_mode,verb,speaking) - return ..() + if(message_mode == MESSAGE_MODE_DEPARTMENT) + holopad_talk(message, verb, speaking) + else if (ai_radio.disabledAi || !has_power() || stat) + to_chat(src, SPAN_DANGER("System Error - Transceiver Disabled.")) + else + used_radios += ai_radio + . = TRUE + ..() /mob/living/silicon/pai/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) if(message_mode) - if(message_mode == "general") - message_mode = null - return silicon_radio.talk_into(src,message,message_mode,verb,speaking) - return ..() + used_radios += silicon_radio + . = TRUE + ..() /mob/living/silicon/say_quote(var/text) var/ending = copytext(text, length(text)) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm index ad5b6a71b6f..e4c0afb4db6 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/parrot.dm @@ -668,9 +668,9 @@ verb = pick(speak_emote) - var/message_mode="" + var/message_mode if(copytext(message,1,2) == get_prefix_key(/decl/prefix/radio_main_channel)) - message_mode = "headset" + message_mode = MESSAGE_MODE_DEFAULT message = copytext(message,2) if(length(message) >= 2) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 10e7f46608a..b429a8169d7 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -67,15 +67,13 @@ //parses the message mode code (e.g. :h, :w) from text, such as that supplied to say. //returns the message mode string or null for no message mode. //standard mode is the mode returned for the special ';' radio code. -/mob/proc/parse_message_mode(var/message, var/standard_mode="headset") - if(length(message) >= 1 && copytext_char(message,1,2) == get_prefix_key(/decl/prefix/radio_main_channel)) - return standard_mode - - if(length(message) >= 2) - var/channel_prefix = copytext_char(message, 1 ,3) - return department_radio_keys[channel_prefix] - - return null +/mob/proc/parse_message_mode(var/message) + if(length(message) >= 1) + if(copytext_char(message,1,2) == get_prefix_key(/decl/prefix/radio_main_channel)) + return MESSAGE_MODE_DEFAULT + if(length(message) >= 2) + var/channel_prefix = copytext_char(message, 1, 3) + return department_radio_keys[channel_prefix] //parses the language code (e.g. :j) from text, such as that supplied to say. //returns the language object only if the code corresponds to a language that src can speak, otherwise null. diff --git a/nebula.dme b/nebula.dme index 511c4740be7..31e8f1a69a0 100644 --- a/nebula.dme +++ b/nebula.dme @@ -71,6 +71,7 @@ #include "code\__defines\power.dm" #include "code\__defines\proc_presets.dm" #include "code\__defines\qdel.dm" +#include "code\__defines\radio.dm" #include "code\__defines\research.dm" #include "code\__defines\ruin_tags.dm" #include "code\__defines\shields.dm" From c27de5b587b1e3344e55e985803bdcf3c72ef9fe Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Tue, 17 Jan 2023 19:43:12 +1100 Subject: [PATCH 031/239] Shuttle clearing landmarks now use shuttle size properly. --- code/game/turfs/exterior/exterior_barren.dm | 4 ---- code/modules/overmap/exoplanets/_exoplanet.dm | 7 ++++--- code/modules/shuttles/landmarks.dm | 4 +++- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/code/game/turfs/exterior/exterior_barren.dm b/code/game/turfs/exterior/exterior_barren.dm index 5e645d85950..5418b5331c6 100644 --- a/code/game/turfs/exterior/exterior_barren.dm +++ b/code/game/turfs/exterior/exterior_barren.dm @@ -7,7 +7,3 @@ . = ..() if(prob(20)) add_overlay(image('icons/turf/flooring/decals.dmi', "asteroid[rand(0,9)]")) - -/turf/exterior/barren/Initialize() - . = ..() - update_icon() \ No newline at end of file diff --git a/code/modules/overmap/exoplanets/_exoplanet.dm b/code/modules/overmap/exoplanets/_exoplanet.dm index 5e1fe842c73..4bd89d390a2 100644 --- a/code/modules/overmap/exoplanets/_exoplanet.dm +++ b/code/modules/overmap/exoplanets/_exoplanet.dm @@ -230,7 +230,8 @@ /obj/effect/overmap/visitable/sector/exoplanet/proc/generate_landing() var/places = list() var/attempts = 10*landing_points_to_place - var/border_padding = shuttle_size / 2 + 3 + var/landing_radius = CEILING(shuttle_size / 2) + var/border_padding = landing_radius + 3 while(landing_points_to_place) attempts-- @@ -241,7 +242,7 @@ if(attempts >= 0) // While we have the patience, try to find better spawn points. If out of patience, put them down wherever, so long as there are no repeats. var/valid = 1 - var/list/block_to_check = block(locate(T.x - shuttle_size / 2, T.y - shuttle_size / 2, T.z), locate(T.x + shuttle_size / 2, T.y + shuttle_size / 2, T.z)) + var/list/block_to_check = block(locate(T.x - landing_radius, T.y - landing_radius, T.z), locate(T.x + landing_radius, T.y + landing_radius, T.z)) for(var/turf/check in block_to_check) if(!istype(get_area(check), /area/exoplanet) || check.turf_flags & TURF_FLAG_NORUINS) valid = 0 @@ -255,7 +256,7 @@ landing_points_to_place-- places += T - new /obj/effect/shuttle_landmark/automatic/clearing(T) + new /obj/effect/shuttle_landmark/automatic/clearing(T, landing_radius) /obj/effect/overmap/visitable/sector/exoplanet/get_scan_data(mob/user) . = ..() diff --git a/code/modules/shuttles/landmarks.dm b/code/modules/shuttles/landmarks.dm index 95172c4e323..4758c863575 100644 --- a/code/modules/shuttles/landmarks.dm +++ b/code/modules/shuttles/landmarks.dm @@ -133,8 +133,10 @@ var/global/list/shuttle_landmarks = list() /obj/effect/shuttle_landmark/automatic/clearing var/radius = 10 -/obj/effect/shuttle_landmark/automatic/clearing/Initialize() +/obj/effect/shuttle_landmark/automatic/clearing/Initialize(var/ml, var/supplied_radius) ..() + if(!isnull(supplied_radius)) + radius = supplied_radius return INITIALIZE_HINT_LATELOAD /obj/effect/shuttle_landmark/automatic/clearing/LateInitialize() From da725d50e934e7e4b9ed03f44e73b390ce59d034 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Wed, 18 Jan 2023 00:44:29 +0000 Subject: [PATCH 032/239] Automatic changelog generation [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-2882.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2882.yml diff --git a/html/changelog.html b/html/changelog.html index 27d988da6bd..dd76457d089 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,12 @@ -->
+

18 January 2023

+

NataKilar updated:

+
    +
  • Items no longer appear heavily damaged regardless of their health
  • +
+

14 January 2023

MistakeNot4892 updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index ce1207372cc..f9f60d933b1 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -14440,3 +14440,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2023-01-14: MistakeNot4892: - tweak: Randomize Appearance is back. +2023-01-18: + NataKilar: + - bugfix: Items no longer appear heavily damaged regardless of their health diff --git a/html/changelogs/AutoChangeLog-pr-2882.yml b/html/changelogs/AutoChangeLog-pr-2882.yml deleted file mode 100644 index db0d93dca10..00000000000 --- a/html/changelogs/AutoChangeLog-pr-2882.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: NataKilar -delete-after: true -changes: - - bugfix: Items no longer appear heavily damaged regardless of their health From 3c525fef7807cef896016e01eb2f01c264a69fde Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Thu, 19 Jan 2023 00:43:39 +0000 Subject: [PATCH 033/239] Automatic changelog generation [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index dd76457d089..4fcb19c5b66 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -137,12 +137,6 @@

    PsyCommando updated:

    • Fix disconnected pipes + blastdoors button on desperado/mercenary base.
    - -

    17 November 2022

    -

    MistakeNot4892 updated:

    -
      -
    • Liver and brain regeneration has been tweaked, and all internal organs will now regenerate slowly to a point.
    • -
From 919590f8f53d032dc3074dd818a519903bff1436 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Thu, 19 Jan 2023 15:36:13 -0600 Subject: [PATCH 034/239] Fix runtime from invalid explosion_act severity --- code/game/atoms.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 7f64bee5ef9..c261e829bd4 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -289,7 +289,7 @@ its easier to just keep the beam vertical. . = (severity <= 3) if(.) for(var/atom/movable/AM in get_contained_external_atoms()) - AM.explosion_act(severity++) + AM.explosion_act(severity + 1) try_detonate_reagents(severity) currently_exploding = FALSE From 25289c6a098149511ca21eaf6cf6c2983957695e Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Thu, 19 Jan 2023 15:35:16 -0600 Subject: [PATCH 035/239] Fix closets that start open containing objects --- .../structures/crates_lockers/closets/__closet.dm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets/__closet.dm b/code/game/objects/structures/crates_lockers/closets/__closet.dm index 5027c5392de..c7309603da7 100644 --- a/code/game/objects/structures/crates_lockers/closets/__closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/__closet.dm @@ -50,7 +50,7 @@ var/global/list/closets = list() /obj/structure/closet/LateInitialize(mapload, ...) var/list/will_contain = WillContain() if(will_contain) - create_objects_in_loc(src, will_contain) + create_objects_in_loc(opened && loc || src, will_contain) if(!opened && mapload) // if closed and it's the map loading phase, relevant items at the crate's loc are put in the contents store_contents() @@ -106,7 +106,7 @@ var/global/list/closets = list() stored_units += store_mobs(stored_units) if(storage_types & CLOSET_STORAGE_STRUCTURES) stored_units += store_structures(stored_units) - + /obj/structure/closet/proc/open() if(src.opened) return 0 @@ -237,7 +237,7 @@ var/global/list/closets = list() take_damage(proj_damage) /obj/structure/closet/attackby(obj/item/W, mob/user) - + if(user.a_intent == I_HURT && W.force) return ..() @@ -419,7 +419,9 @@ var/global/list/closets = list() open() /obj/structure/closet/onDropInto(var/atom/movable/AM) - return + if(opened) + return loc + return null // If we use the /obj/structure/closet/proc/togglelock variant BYOND asks the user to select an input for id_card, which is then mostly irrelevant. /obj/structure/closet/proc/togglelock_verb() From 289260a8375a9abd8127a067acfa9a8e9aaa6f87 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Thu, 19 Jan 2023 18:41:57 -0600 Subject: [PATCH 036/239] Update carnage landmark --- code/modules/maps/helper_landmarks.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/maps/helper_landmarks.dm b/code/modules/maps/helper_landmarks.dm index 2bbee52d8c8..2178b6a4461 100644 --- a/code/modules/maps/helper_landmarks.dm +++ b/code/modules/maps/helper_landmarks.dm @@ -32,11 +32,11 @@ INITIALIZE_IMMEDIATE(/obj/abstract/landmark/map_load_mark/non_template) return INITIALIZE_HINT_LATELOAD /obj/abstract/landmark/carnage_mark/LateInitialize() - var/area/A = get_area(src) - for(var/atom/movable/AM in A) - if(AM && !AM.anchored && AM.simulated && prob(movement_prob)) - spawn() - AM.throw_at_random(FALSE, movement_range, 1) + var/area/our_area = get_area(src) + spawn() + for(var/atom/movable/throw_candidate in our_area) + if(!QDELETED(throw_candidate) && !throw_candidate.anchored && throw_candidate.simulated && prob(movement_prob)) + throw_candidate.throw_at_random(FALSE, movement_range, 1) qdel(src) //Clears walls From ca58e0a06c099b4570ec4e92e4bcefce9caf52ce Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Thu, 19 Jan 2023 18:42:50 -0600 Subject: [PATCH 037/239] Add probabilistic variable setter mapping helper --- code/modules/maps/helper_landmarks.dm | 36 ++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/code/modules/maps/helper_landmarks.dm b/code/modules/maps/helper_landmarks.dm index a42fddfb775..0063d359791 100644 --- a/code/modules/maps/helper_landmarks.dm +++ b/code/modules/maps/helper_landmarks.dm @@ -98,4 +98,38 @@ events_repository.unregister_global(/decl/observ/shuttle_added, src, .proc/check_shuttle) if(shuttle_datum) events_repository.unregister(/decl/observ/shuttle_moved, shuttle_datum, src, .proc/delete_everything) - . = ..() \ No newline at end of file + . = ..() + +// Has a percent chance on spawn to set the specified variable on the specified type to the specified value. + +/obj/abstract/landmark/variable_setter + var/type_to_find + var/variable_to_set + var/value_to_set + var/probability = 100 + +/obj/abstract/landmark/variable_setter/Initialize() + . = ..() + if(!prob(probability)) + return // Do nothing. + for(var/atom/candidate_atom in get_turf(src)) + if(!istype(candidate_atom, type_to_find)) + continue + if(try_set_variable(candidate_atom)) + break + return INITIALIZE_HINT_QDEL + +/obj/abstract/landmark/variable_setter/proc/try_set_variable(atom/atom_to_modify) + // We don't have that variable! Give our own runtime to be more informative than the default one. + if(!(variable_to_set in atom_to_modify.vars)) + CRASH("Unable to find variable [variable_to_set] to modify on type [atom_to_modify.type].") + // Already modified, if we're stacked we shouldn't modify the same one twice. + if(atom_to_modify.vars[variable_to_set] == value_to_set) + return FALSE + atom_to_modify.vars[variable_to_set] = value_to_set + return TRUE + +/obj/abstract/landmark/variable_setter/closet_opener + type_to_find = /obj/structure/closet + variable_to_set = "opened" + value_to_set = TRUE From 20cf9547ff731e2d44c56541d43b538da853bcf4 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Thu, 19 Jan 2023 09:26:24 -0600 Subject: [PATCH 038/239] Fix material processors breaking on (shuttle) move --- code/modules/mining/machinery/_material_processing.dm | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/code/modules/mining/machinery/_material_processing.dm b/code/modules/mining/machinery/_material_processing.dm index de39207ba8c..3b7f9baa901 100644 --- a/code/modules/mining/machinery/_material_processing.dm +++ b/code/modules/mining/machinery/_material_processing.dm @@ -27,13 +27,13 @@ /obj/machinery/material_processing/on_update_icon() cut_overlays() - + icon_state = initial(icon_state) if(panel_open) add_overlay("[icon_state]-open") if(!use_power || (stat & (BROKEN|NOPOWER))) icon_state = "[icon_state]-off" - + var/overlay_dir = 0 if(input_turf) overlay_dir = get_dir(src, input_turf) @@ -98,6 +98,13 @@ SET_OUTPUT(output_turf) . = ..() queue_icon_update() + events_repository.register(/decl/observ/moved, src, src, .proc/on_moved) + +/obj/machinery/material_processing/proc/on_moved(atom/moving, atom/old_loc, atom/new_loc) + if(istype(input_turf, /turf)) + input_turf = get_step(get_turf(src), get_dir(get_turf(old_loc), input_turf)) + if(istype(output_turf, /turf)) + output_turf = get_step(get_turf(src), get_dir(get_turf(old_loc), output_turf)) /obj/machinery/material_processing/OnTopic(var/user, var/list/href_list) if(href_list["toggle_power"]) From e30603adc5f9829c05b953b449567f8cece10ae8 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Wed, 11 Jan 2023 01:07:38 +1100 Subject: [PATCH 039/239] Reworking how markings are handled. Tweaks Taj eye icon. Adding organ icon state checking to species validation. --- .../preference_setup/general/01_basic.dm | 2 +- .../mob/living/carbon/human/update_icons.dm | 29 +++++++++++------- code/modules/organs/external/_external.dm | 1 - .../organs/external/_external_icons.dm | 16 +++++----- code/modules/organs/external/head.dm | 14 ++++----- code/modules/organs/external/standard.dm | 10 ------ .../prosthetics/prosthetics_manufacturer.dm | 8 +++++ code/modules/species/outsider/random.dm | 2 +- code/modules/species/species.dm | 13 +++++++- code/modules/species/species_bodytype.dm | 15 ++++++++- code/modules/sprite_accessories/_accessory.dm | 1 + .../sprite_accessories/_accessory_facial.dm | 1 + .../sprite_accessories/_accessory_hair.dm | 1 + .../sprite_accessories/_accessory_markings.dm | 20 +++++++++++- icons/mob/bandage.dmi | Bin 1810 -> 1812 bytes .../cyberlimbs/morgan/morgan_main.dmi | Bin 1085 -> 1085 bytes icons/mob/human_races/cyberlimbs/robotic.dmi | Bin 1530 -> 1530 bytes .../human_races/species/default_markings.dmi | Bin 25241 -> 11202 bytes icons/mob/human_races/species/golem/body.dmi | Bin 6175 -> 6177 bytes .../human_races/species/human/body_female.dmi | Bin 1613 -> 1614 bytes .../human_races/species/human/body_male.dmi | Bin 1598 -> 1599 bytes .../species/human/deformed_body_female.dmi | Bin 4203 -> 4204 bytes .../species/human/deformed_body_male.dmi | Bin 1612 -> 1613 bytes .../mob/human_races/species/humanoid/body.dmi | Bin 1460 -> 1461 bytes .../species/monkey/monkey_body.dmi | Bin 1062 -> 1063 bytes icons/mob/surgery.dmi | Bin 1470 -> 1474 bytes .../icons/cyberlimbs/bishop/bishop_main.dmi | Bin 4190 -> 4191 bytes .../icons/cyberlimbs/bishop/bishop_rook.dmi | Bin 2984 -> 2983 bytes .../cyberlimbs/hephaestus/hephaestus_main.dmi | Bin 3872 -> 3873 bytes .../hephaestus/hephaestus_titan.dmi | Bin 1850 -> 1850 bytes .../cyberlimbs/morpheus/morpheus_main.dmi | Bin 1819 -> 1820 bytes .../cyberlimbs/morpheus/morpheus_mantis.dmi | Bin 1737 -> 1738 bytes .../cyberlimbs/nanotrasen/nanotrasen_main.dmi | Bin 3123 -> 3125 bytes .../cyberlimbs/shellguard/shellguard_main.dmi | Bin 1458 -> 1459 bytes .../icons/cyberlimbs/veymed/veymed_female.dmi | Bin 1609 -> 1610 bytes .../icons/cyberlimbs/veymed/veymed_male.dmi | Bin 1608 -> 1609 bytes .../wardtakahashi/wardtakahashi_economy.dmi | Bin 1434 -> 1435 bytes .../wardtakahashi/wardtakahashi_main.dmi | Bin 1589 -> 1589 bytes .../icons/cyberlimbs/xion/xion_econo.dmi | Bin 1682 -> 1683 bytes .../icons/cyberlimbs/xion/xion_main.dmi | Bin 3617 -> 3618 bytes .../icons/cyberlimbs/zenghu/zenghu_spirit.dmi | Bin 1602 -> 1603 bytes .../ascent/icons/species/body/alate/body.dmi | Bin 1850 -> 1850 bytes .../ascent/icons/species/body/gyne/body.dmi | Bin 3233 -> 3235 bytes .../ascent/mobs/bodyparts_insectoid.dm | 5 +-- .../bayliens/adherent/icons/body_amethyst.dmi | Bin 2988 -> 2988 bytes .../bayliens/adherent/icons/body_emerald.dmi | Bin 2988 -> 2988 bytes .../bayliens/adherent/icons/body_jet.dmi | Bin 2840 -> 2840 bytes .../bayliens/adherent/icons/body_quartz.dmi | Bin 2988 -> 2988 bytes .../bayliens/adherent/icons/body_ruby.dmi | Bin 2988 -> 2988 bytes .../bayliens/adherent/icons/body_sapphire.dmi | Bin 2988 -> 2988 bytes .../bayliens/adherent/icons/body_topaz.dmi | Bin 2988 -> 2988 bytes .../adherent/icons/body_turquoise.dmi | Bin 2988 -> 2988 bytes .../bayliens/adherent/icons/damage_mask.dmi | Bin 593 -> 0 bytes .../adherent/organs/organs_external.dm | 4 --- .../bayliens/skrell/icons/body/body.dmi | Bin 1335 -> 1335 bytes .../bayliens/tajaran/datum/accessory.dm | 23 +++++++------- .../species/bayliens/tajaran/datum/species.dm | 2 +- mods/species/bayliens/tajaran/icons/body.dmi | Bin 1331 -> 1331 bytes .../bayliens/tajaran/icons/deformed_body.dmi | Bin 1201 -> 1202 bytes mods/species/bayliens/tajaran/icons/eyes.dmi | Bin 390 -> 400 bytes .../bayliens/tajaran/icons/markings.dmi | Bin 8206 -> 6502 bytes .../bayliens/tritonian/icons/body_female.dmi | Bin 1194 -> 1194 bytes .../bayliens/tritonian/icons/body_male.dmi | Bin 1191 -> 1191 bytes .../bayliens/unathi/icons/body_female.dmi | Bin 1478 -> 1479 bytes .../bayliens/unathi/icons/body_male.dmi | Bin 1471 -> 1472 bytes .../unathi/icons/deformed_body_female.dmi | Bin 1504 -> 1505 bytes .../unathi/icons/deformed_body_male.dmi | Bin 1483 -> 1484 bytes mods/species/neoavians/icons/body.dmi | Bin 1200 -> 1201 bytes mods/species/neoavians/icons/body_add.dmi | Bin 1210 -> 1211 bytes mods/species/neoavians/icons/body_raptor.dmi | Bin 1183 -> 1184 bytes .../neoavians/icons/body_raptor_add.dmi | Bin 1193 -> 1194 bytes mods/species/neoavians/icons/markings.dmi | Bin 1140 -> 1002 bytes mods/species/serpentid/icons/body_green.dmi | Bin 2268 -> 2267 bytes mods/species/serpentid/icons/body_grey.dmi | Bin 2317 -> 2316 bytes mods/species/utility_frames/icons/body.dmi | Bin 1289 -> 1289 bytes .../species/utility_frames/icons/markings.dmi | Bin 1029 -> 857 bytes mods/species/vox/icons/body/deformed_body.dmi | Bin 2096 -> 2096 bytes .../vox/icons/body/improvised_cyberlimbs.dmi | Bin 1824 -> 1824 bytes .../vox/icons/body/primalis_cyberlimbs.dmi | Bin 1855 -> 1855 bytes mods/species/vox/icons/body/servitor/body.dmi | Bin 2205 -> 2206 bytes .../vox/icons/body/servitor/markings.dmi | Bin 3423 -> 2691 bytes mods/species/vox/icons/body/soldier/body.dmi | Bin 2153 -> 2341 bytes .../vox/icons/body/soldier/markings.dmi | Bin 3244 -> 2471 bytes 83 files changed, 105 insertions(+), 62 deletions(-) delete mode 100644 mods/species/bayliens/adherent/icons/damage_mask.dmi diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index 548a88fa022..04fb9537e40 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -33,7 +33,7 @@ W.write("spawnpoint", spawnpoint.name) /datum/category_item/player_setup_item/physical/basic/sanitize_character() - + var/valid_spawn = FALSE for(var/decl/spawnpoint/spawnpoint as anything in global.using_map.allowed_spawns) if(pref.spawnpoint == spawnpoint.type) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index db3ad1fbc50..ed9bdc7f0e1 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1,3 +1,12 @@ +var/global/list/_limb_mask_cache = list() +/proc/get_limb_mask_for(var/decl/bodytype/bodytype, var/bodypart) + LAZYINITLIST(_limb_mask_cache[bodytype]) + if(!_limb_mask_cache[bodytype][bodypart]) + var/icon/limb_mask = icon(bodytype.icon_base, bodypart) + limb_mask.MapColors(0,0,0, 0,0,0, 0,0,0, 1,1,1) + _limb_mask_cache[bodytype][bodypart] = limb_mask + return _limb_mask_cache[bodytype][bodypart] + /* Global associative list for caching humanoid icons. Index format m or f, followed by a string of 0 and 1 to represent bodyparts followed by husk 1 or 0. @@ -301,10 +310,10 @@ var/global/list/damage_icon_parts = list() continue var/icon/DI var/use_colour = (BP_IS_PROSTHETIC(O) ? SYNTH_BLOOD_COLOR : O.species.get_blood_color(src)) - var/cache_index = "[O.damage_state]/[O.icon_name]/[use_colour]/[species.name]" + var/cache_index = "[O.damage_state]/[O.bodytype.type]/[O.icon_state]/[use_colour]/[species.name]" if(damage_icon_parts[cache_index] == null) DI = new /icon(bodytype.get_damage_overlays(src), O.damage_state) // the damage icon for whole human - DI.Blend(new /icon(O.icon, O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels + DI.Blend(get_limb_mask_for(O.bodytype, O.icon_state), ICON_MULTIPLY) // mask with this organ's pixels DI.Blend(use_colour, ICON_MULTIPLY) damage_icon_parts[cache_index] = DI else @@ -326,7 +335,7 @@ var/global/list/damage_icon_parts = list() for(var/obj/item/organ/external/O in get_external_organs()) var/bandage_level = O.bandage_level() if(bandage_level) - standing_image.overlays += image(bandage_icon, "[O.icon_name][bandage_level]") + standing_image.overlays += image(bandage_icon, "[O.icon_state][bandage_level]") overlays_standing[HO_DAMAGE_LAYER] = standing_image if(update_icons) @@ -358,8 +367,8 @@ var/global/list/damage_icon_parts = list() var/obj/item/organ/internal/eyes/eyes = get_organ((species.vision_organ || BP_EYES), /obj/item/organ/internal/eyes) icon_key += istype(eyes) ? eyes.eye_colour : COLOR_BLACK - for(var/organ_tag in global.all_limb_tags) - var/obj/item/organ/external/part = GET_EXTERNAL_ORGAN(src, organ_tag) + for(var/limb_tag in global.all_limb_tags) + var/obj/item/organ/external/part = GET_EXTERNAL_ORGAN(src, limb_tag) if(isnull(part) || part.skip_body_icon_draw) icon_key += "0" continue @@ -846,7 +855,6 @@ var/global/list/damage_icon_parts = list() if(update_icons) queue_icon_update() - /mob/living/carbon/human/update_fire(var/update_icons=1) overlays_standing[HO_FIRE_LAYER] = null if(on_fire) @@ -867,21 +875,20 @@ var/global/list/damage_icon_parts = list() var/surgery_icon = E.species.get_surgery_overlay_icon(src) if(!surgery_icon) continue - var/list/surgery_states = icon_states(surgery_icon) - var/base_state = "[E.icon_name][how_open]" + var/base_state = "[E.icon_state][how_open]" var/overlay_state = "[base_state]-flesh" var/list/overlays_to_add - if(overlay_state in surgery_states) + if(check_state_in_icon(overlay_state, surgery_icon)) var/image/flesh = image(icon = surgery_icon, icon_state = overlay_state, layer = -HO_SURGERY_LAYER) flesh.color = E.species.get_flesh_colour(src) LAZYADD(overlays_to_add, flesh) overlay_state = "[base_state]-blood" - if(overlay_state in surgery_states) + if(check_state_in_icon(overlay_state, surgery_icon)) var/image/blood = image(icon = surgery_icon, icon_state = overlay_state, layer = -HO_SURGERY_LAYER) blood.color = E.species.get_blood_color(src) LAZYADD(overlays_to_add, blood) overlay_state = "[base_state]-bones" - if(overlay_state in surgery_states) + if(check_state_in_icon(overlay_state, surgery_icon)) LAZYADD(overlays_to_add, image(icon = surgery_icon, icon_state = overlay_state, layer = -HO_SURGERY_LAYER)) total.overlays |= overlays_to_add diff --git a/code/modules/organs/external/_external.dm b/code/modules/organs/external/_external.dm index d1967950625..66765d34dd2 100644 --- a/code/modules/organs/external/_external.dm +++ b/code/modules/organs/external/_external.dm @@ -29,7 +29,6 @@ var/limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_CAN_BREAK | ORGAN_FLAG_CAN_DISLOCATE // Appearance vars. - var/icon_name = null // Icon state base. var/body_part = null // Part flag var/icon_position = 0 // Used in mob overlay layering calculations. var/model // Used when caching robolimb icons. diff --git a/code/modules/organs/external/_external_icons.dm b/code/modules/organs/external/_external_icons.dm index 8f0ea8a9d7c..d2535dff85d 100644 --- a/code/modules/organs/external/_external_icons.dm +++ b/code/modules/organs/external/_external_icons.dm @@ -58,12 +58,12 @@ var/global/list/limb_icon_cache = list() for(var/M in markings) var/decl/sprite_accessory/marking/mark_style = GET_DECL(M) if (mark_style.draw_target == MARKING_TARGET_SKIN) - var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]") - mark_s.Blend(markings[M], mark_style.blend) + var/mark_color = markings[M] + var/icon/mark_s = mark_style.get_cached_marking_icon(bodytype, icon_state, mark_color) //#TODO: This probably should be added to a list that's applied on update icon, otherwise its gonna act really wonky! add_overlay(mark_s) //So when it's not on your body, it has icons mob_icon.Blend(mark_s, mark_style.layer_blend) //So when it's on your body, it has icons - icon_cache_key += "[M][markings[M]]" + icon_cache_key += "[M][mark_color]" /obj/item/organ/external/proc/update_limb_icon_file() if (BP_IS_PROSTHETIC(src)) @@ -81,7 +81,7 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/on_update_icon(var/regenerate = 0) . = ..() - icon_state = "[icon_name]" + icon_state = organ_tag icon_cache_key = "[icon_state]_[species ? species.name : "unknown"][render_alpha]" if(model) icon_cache_key += "_model_[model]" @@ -93,12 +93,12 @@ var/global/list/limb_icon_cache = list() for(var/M in markings) var/decl/sprite_accessory/marking/mark_style = GET_DECL(M) if (mark_style.draw_target == MARKING_TARGET_SKIN) - var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]") - mark_s.Blend(markings[M], mark_style.blend) + var/mark_color = markings[M] + var/icon/mark_s = mark_style.get_cached_marking_icon(bodytype, icon_state, mark_color) //#TODO: This probably should be added to a list that's applied on update icon, otherwise its gonna act really wonky! add_overlay(mark_s) //So when it's not on your body, it has icons mob_icon.Blend(mark_s, mark_style.layer_blend) //So when it's on your body, it has icons - icon_cache_key += "[M][markings[M]]" + icon_cache_key += "[M][mark_color]" if(render_alpha < 255) mob_icon += rgb(,,,render_alpha) @@ -170,7 +170,7 @@ var/global/list/robot_hud_colours = list("#ffffff","#cccccc","#aaaaaa","#888888" return applying /obj/item/organ/external/proc/bandage_level() - if(damage_state_text() == "00") + if(damage_state_text() == "00") return 0 if(!is_bandaged()) return 0 diff --git a/code/modules/organs/external/head.dm b/code/modules/organs/external/head.dm index e6ff11e4c19..e9ab3fe9eeb 100644 --- a/code/modules/organs/external/head.dm +++ b/code/modules/organs/external/head.dm @@ -1,6 +1,5 @@ /obj/item/organ/external/head organ_tag = BP_HEAD - icon_name = "head" name = "head" slot_flags = SLOT_LOWER_BODY max_damage = 75 @@ -148,17 +147,18 @@ for (var/M in markings) var/decl/sprite_accessory/marking/mark_style = GET_DECL(M) if (mark_style.draw_target == MARKING_TARGET_HAIR) - var/icon/mark_icon = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]") + + var/mark_color if (!mark_style.do_colouration && owner.h_style) var/decl/sprite_accessory/hair/hair_style = GET_DECL(owner.h_style) if ((~hair_style.flags & HAIR_BALD) && hair_colour) - mark_icon.Blend(hair_colour, ICON_ADD) + mark_color = hair_colour else //only baseline human skin tones; others will need species vars for coloration - mark_icon.Blend(rgb(200 + skin_tone, 150 + skin_tone, 123 + skin_tone), ICON_ADD) + mark_color = rgb(200 + skin_tone, 150 + skin_tone, 123 + skin_tone) else - mark_icon.Blend(markings[M], ICON_ADD) - res.overlays |= mark_icon - icon_cache_key += "[M][markings[M]]" + mark_color = markings[M] + res.overlays |= mark_style.get_cached_marking_icon(bodytype, icon_state, mark_color) + icon_cache_key += "[M][mark_color]" return res diff --git a/code/modules/organs/external/standard.dm b/code/modules/organs/external/standard.dm index f9cd1b326c7..2903fe3c932 100644 --- a/code/modules/organs/external/standard.dm +++ b/code/modules/organs/external/standard.dm @@ -7,7 +7,6 @@ /obj/item/organ/external/chest name = "upper body" organ_tag = BP_CHEST - icon_name = "torso" max_damage = 100 min_broken_damage = 35 w_class = ITEM_SIZE_HUGE //Used for dismembering thresholds, in addition to storage. Humans are w_class 6, so it makes sense that chest is w_class 5. @@ -39,7 +38,6 @@ /obj/item/organ/external/groin name = "lower body" organ_tag = BP_GROIN - icon_name = "groin" max_damage = 100 min_broken_damage = 35 w_class = ITEM_SIZE_LARGE @@ -61,7 +59,6 @@ /obj/item/organ/external/arm organ_tag = BP_L_ARM name = "left arm" - icon_name = "l_arm" max_damage = 50 min_broken_damage = 30 w_class = ITEM_SIZE_NORMAL @@ -77,7 +74,6 @@ /obj/item/organ/external/arm/right organ_tag = BP_R_ARM name = "right arm" - icon_name = "r_arm" body_part = SLOT_ARM_RIGHT joint = "right elbow" amputation_point = "right shoulder" @@ -85,7 +81,6 @@ /obj/item/organ/external/leg organ_tag = BP_L_LEG name = "left leg" - icon_name = "l_leg" max_damage = 50 min_broken_damage = 30 w_class = ITEM_SIZE_NORMAL @@ -102,7 +97,6 @@ /obj/item/organ/external/leg/right organ_tag = BP_R_LEG name = "right leg" - icon_name = "r_leg" body_part = SLOT_LEG_RIGHT icon_position = RIGHT joint = "right knee" @@ -111,7 +105,6 @@ /obj/item/organ/external/foot organ_tag = BP_L_FOOT name = "left foot" - icon_name = "l_foot" max_damage = 30 min_broken_damage = 15 w_class = ITEM_SIZE_SMALL @@ -127,7 +120,6 @@ /obj/item/organ/external/foot/right organ_tag = BP_R_FOOT name = "right foot" - icon_name = "r_foot" body_part = SLOT_FOOT_RIGHT icon_position = RIGHT parent_organ = BP_R_LEG @@ -137,7 +129,6 @@ /obj/item/organ/external/hand organ_tag = BP_L_HAND name = "left hand" - icon_name = "l_hand" icon_position = LEFT max_damage = 30 min_broken_damage = 15 @@ -165,7 +156,6 @@ /obj/item/organ/external/hand/right organ_tag = BP_R_HAND name = "right hand" - icon_name = "r_hand" icon_position = RIGHT body_part = SLOT_HAND_RIGHT parent_organ = BP_R_ARM diff --git a/code/modules/organs/prosthetics/prosthetics_manufacturer.dm b/code/modules/organs/prosthetics/prosthetics_manufacturer.dm index 44180d4c4f9..8c13ba5fd82 100644 --- a/code/modules/organs/prosthetics/prosthetics_manufacturer.dm +++ b/code/modules/organs/prosthetics/prosthetics_manufacturer.dm @@ -20,6 +20,14 @@ var/modular_prosthetic_tier = MODULAR_BODYPART_INVALID // Determines how the limb behaves as a prosthetic with regards to manual attachment/detachment. var/limb_tech = "{'engineering':1,'materials':1,'magnets':1}" // What tech levels should limbs of this type use/need? +/decl/prosthetics_manufacturer/validate() + . = ..() + if(icon && (!applies_to_part || (BP_CHEST in applies_to_part))) + if(check_state_in_icon("torso", icon)) + . += "deprecated \"torso\" state present in [icon]" + if(!check_state_in_icon(BP_CHEST, icon)) + . += "[BP_CHEST] state not present in [icon]" + /decl/prosthetics_manufacturer/proc/check_can_install(var/target_slot, var/target_bodytype, var/target_species) . = istext(target_slot) if(.) diff --git a/code/modules/species/outsider/random.dm b/code/modules/species/outsider/random.dm index e9287471e5c..7bb6b782ea6 100644 --- a/code/modules/species/outsider/random.dm +++ b/code/modules/species/outsider/random.dm @@ -32,7 +32,7 @@ /decl/emote/exertion/biological/pant ) var/blood_color - + /decl/species/alium/Initialize() //Coloring diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm index 6629d67f1a8..5e0633dbc25 100644 --- a/code/modules/species/species.dm +++ b/code/modules/species/species.dm @@ -440,9 +440,20 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 /decl/species/validate() . = ..() + for(var/decl/bodytype/bodytype in available_bodytypes) + var/bodytype_base_icon = bodytype.get_base_icon() + var/deformed_base_icon = bodytype.get_base_icon(get_deform = TRUE) + for(var/organ_tag in has_limbs) + if(organ_tag == BP_TAIL) // Tails are handled specially due to overlays and animations, will not be present in the base bodytype icon(s). + continue + if(bodytype_base_icon && !check_state_in_icon(organ_tag, bodytype_base_icon)) + . += "missing state \"[organ_tag]\" from base icon [bodytype_base_icon] on bodytype [bodytype.type]" + if(deformed_base_icon && bodytype_base_icon != deformed_base_icon && !check_state_in_icon(organ_tag, deformed_base_icon)) + . += "missing state \"[organ_tag]\" from deformed icon [deformed_base_icon] on bodytype [bodytype.type]" + for(var/organ_tag in vital_organs) if(!(organ_tag in has_organ) && !(organ_tag in has_limbs)) - . += "vital organ '[organ_tag]' not present in organ/limb lists" + . += "vital organ \"[organ_tag]\" not present in organ/limb lists" for(var/trait_type in traits) var/trait_level = traits[trait_type] diff --git a/code/modules/species/species_bodytype.dm b/code/modules/species/species_bodytype.dm index f34a2d25fcb..708566c1e7b 100644 --- a/code/modules/species/species_bodytype.dm +++ b/code/modules/species/species_bodytype.dm @@ -74,4 +74,17 @@ var/global/list/bodytypes_by_category = list() return disintegrate /decl/bodytype/proc/get_hug_zone_messages(var/zone) - return LAZYACCESS(hug_messages, zone) \ No newline at end of file + return LAZYACCESS(hug_messages, zone) + +/decl/bodytype/validate() + . = ..() + if(icon_base) + if(check_state_in_icon("torso", icon_base)) + . += "torso state present in icon_base" + if(!check_state_in_icon(BP_CHEST, icon_base)) + . += "chest state not present in icon_base" + if(icon_deformed && icon_deformed != icon_base) + if(check_state_in_icon("torso", icon_deformed)) + . += "torso state present in icon_deformed" + if(!check_state_in_icon(BP_CHEST, icon_deformed)) + . += "chest state not present in icon_deformed" diff --git a/code/modules/sprite_accessories/_accessory.dm b/code/modules/sprite_accessories/_accessory.dm index 8dcf3295dc3..46a0a1e9447 100644 --- a/code/modules/sprite_accessories/_accessory.dm +++ b/code/modules/sprite_accessories/_accessory.dm @@ -17,6 +17,7 @@ */ /decl/sprite_accessory + abstract_type = /decl/sprite_accessory var/name // The preview name of the accessory var/icon // the icon file the accessory is located in var/icon_state // the icon_state of the accessory diff --git a/code/modules/sprite_accessories/_accessory_facial.dm b/code/modules/sprite_accessories/_accessory_facial.dm index cdc08e4873d..b1c70136c4d 100644 --- a/code/modules/sprite_accessories/_accessory_facial.dm +++ b/code/modules/sprite_accessories/_accessory_facial.dm @@ -7,6 +7,7 @@ */ /decl/sprite_accessory/facial_hair + abstract_type = /decl/sprite_accessory/facial_hair icon = 'icons/mob/human_races/species/human/facial.dmi' gender = MALE diff --git a/code/modules/sprite_accessories/_accessory_hair.dm b/code/modules/sprite_accessories/_accessory_hair.dm index ae3cf5bba39..26738c69487 100644 --- a/code/modules/sprite_accessories/_accessory_hair.dm +++ b/code/modules/sprite_accessories/_accessory_hair.dm @@ -7,6 +7,7 @@ */ /decl/sprite_accessory/hair + abstract_type = /decl/sprite_accessory/hair icon = 'icons/mob/human_races/species/human/hair.dmi' /decl/sprite_accessory/hair/bald diff --git a/code/modules/sprite_accessories/_accessory_markings.dm b/code/modules/sprite_accessories/_accessory_markings.dm index bf2ab7a2f40..d9d41d8c798 100644 --- a/code/modules/sprite_accessories/_accessory_markings.dm +++ b/code/modules/sprite_accessories/_accessory_markings.dm @@ -1,8 +1,8 @@ //body markings - /decl/sprite_accessory/marking icon = 'icons/mob/human_races/species/default_markings.dmi' do_colouration = 1 //Almost all of them have it, COLOR_ADD + abstract_type = /decl/sprite_accessory/marking //Empty list is unrestricted. Should only restrict the ones that make NO SENSE on other species, //like IPC optics overlay stuff. var/layer_blend = ICON_OVERLAY @@ -10,6 +10,24 @@ //Reminder: BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_CHEST,BP_GROIN,BP_HEAD var/draw_target = MARKING_TARGET_SKIN var/list/disallows = list() //A list of other marking types to ban from adding when this marking is already added + var/list/icons = list() + var/mask_to_bodypart = TRUE + +/decl/sprite_accessory/marking/proc/get_cached_marking_icon(var/decl/bodytype/bodytype, var/bodypart, var/color = COLOR_WHITE) + LAZYINITLIST(icons[bodytype]) + LAZYINITLIST(icons[bodytype][bodypart]) + if(!icons[bodytype][bodypart][color]) + var/icon/marking_icon = icon(icon, icon_state) // make a new one to avoid mutating the base + if(mask_to_bodypart) + marking_icon.Blend(get_limb_mask_for(bodytype, bodypart), ICON_MULTIPLY) + marking_icon.Blend(color, blend) + icons[bodytype][bodypart][color] = marking_icon + return icons[bodytype][bodypart][color] + +/decl/sprite_accessory/marking/validate() + . = ..() + if(!check_state_in_icon(icon_state, icon)) + . += "missing icon state \"[icon_state]\" in [icon]" /decl/sprite_accessory/marking/tat_hive name = "Tattoo (Hive, Back)" diff --git a/icons/mob/bandage.dmi b/icons/mob/bandage.dmi index bab279f6c1d1b3db92911cfdba4509c986985966..807318555fd6684b1a016bab54b1ba60b8320e27 100644 GIT binary patch delta 267 zcmV+m0rdWo4wMd%Qh(ukR9JLGWpiV4X>fFDZ*Bkpc$|%tu?oW=6h&wK3Q6|TBwf3d zl#-$Og&>WILK5LA?eEu^sY~D86pkFu6D`&4{^)wuK0Em~6rA7GRb5VJDL!tDHf@?( z3TxbK1hV zFA@k|o#VZP#S#`vSS*3D1jZ5=y9|q&kr^ip8F9i8 z>Eu1|at;pB?i?~?D3-8T!eR-GB`}u$$Cm2exA_D80+#c789#f5XaE2Oz)3_wRCt{2 R-A#9zOccQJnX^s-#08q@dfWg2 delta 245 zcmVfFDZ*Bkpc$|%tu?oU46h-IeD}voct*eVD z(!u^h2{bl=+Q3cF-#3Yqi|=kPaKhodKw5pi-ugjb?!9_hL?2dt(#P#iHE%y9mk-@R zHO~6krSBmolWZP0&YEezQO)EL%O%x3V4k+j`(NrnQJqMofN2;8$5% zFdZ6c@)g_FJDV!_3Niv<}AG8Sa)GA?#zcAPP0#TjFy vj}Q`LEgYjQ9J6F97F;a2Sdg(GWAQ(>)z{%tKhO_D>Uw!*baThEJOS7RTcvX& diff --git a/icons/mob/human_races/cyberlimbs/morgan/morgan_main.dmi b/icons/mob/human_races/cyberlimbs/morgan/morgan_main.dmi index 546259706dd7ed18db65d2e4d31304afb5af3870..dfa94b94d13a4c7b1547166f19958543bdabd768 100644 GIT binary patch delta 142 zcmV;90CE4l2)zi9i+?B?k}DWfE0!R!K{oC6le9yp5^Z|$=?zkC?(L%+Ow)Jz1)M2G zb2Hb&QL8ukf@`>(wL+kPv*oT^2B*t(rRQk!#1COY7!~7=%N>ti5S}n wf}l*I*p4X`L79j>5%RtYoG9)p1o!t8wP}au^VJ0-l7=SkumT(+vkU<-0}E+F@c;k- delta 142 zcmV;90CE4l2)zi9i+>0inkyKC72A+lAdBYuN!p=Pi8ej>^aiOm&$jCa)4Y291}X`& zd6@g@tkse{$1U8hT17}9@;4NA4BJ?dbu?F6`9x)3(rP3(!#-brY7!~3(Pb|v6EU(A w1VNcZksT3PP$puGRPay*!junH1o!t8wP}au^VJnG#fC;zM*>WcvkU<-12lF$?*IS* diff --git a/icons/mob/human_races/cyberlimbs/robotic.dmi b/icons/mob/human_races/cyberlimbs/robotic.dmi index d16ee148203dcb30c85e3cc76e2232a9eee14008..2c149716cd2f1d8804f491e90f96102ace053a80 100644 GIT binary patch delta 160 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 literal 25241 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 diff --git a/icons/mob/human_races/species/golem/body.dmi b/icons/mob/human_races/species/golem/body.dmi index b3775425bbde751bb10c409d15506b336ba59177..4a7e14a05b82b9949176b553c8c354b719916409 100644 GIT binary patch delta 181 zcmV;m080O#FrhGzB!8fKR9JLGWpiV4X>fFDZ*Bkpc$|&Ty$Zu16o%nhui_)wOMkMu zl!W4t+(M9gqJoKVl=k*Jbm&$c4?Mhlr^kJI=mq1f<%>9nbUfFDZ*Bkpc$|&Ty$Zu17=__kui}vGr9W9+ ziXk{8w-5x43P#~m+S~8Yp<8u4@bJPJ@tha6L9U9wER~QG1g6WCvv)AnL*Q}e%-i66 z{f<&~wGbF;rjiHFOrQdRiL-nJ+Zk#lXb*cFR?G1@hq h9m?y}z8Sk>@o#Lzyh+Ga@eeBzhDOT{Sj@4_R2L)JSLOf! diff --git a/icons/mob/human_races/species/human/body_female.dmi b/icons/mob/human_races/species/human/body_female.dmi index bc073eeaf5a767eff14bd4b4f53532630fd75b0f..e0dc8a7a036d1d19069fbf81541306747b819e59 100644 GIT binary patch delta 166 zcmV;X09pUd49*OYpaGwep%Z^oR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6# za*U0*I5Sc+(=$pSoZ^zil2jm5sVF|NC|8M#GbOXA7^I1dGp#5wHxx#O zMq*wH5rz?^EWIc{Gmi*6b5hfZu#y;6Me%9*`6WacMwGJTjMQSnsxlQ)6LAKGvVyCh U3piE*BN~P#?%R(Zvqu321$oRzI{*Lx delta 165 zcmV;W09yaf49yIXpaGtdp%Z_Nk-ZATFbsre>nTjKm;S9?Nj@vS?qw zNjr2Z)piG;?m*YtYkwO?+ua9vAlFRAUhH|d2lLE9(rQjeFbQ)^@-bDs;3^w-o|gtp z$XvH0FcbR)H+}e0vx;JudfFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5; z&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3KBSC_b?$SBZ-=C9|j)q=}0& zttc@!6~s0~sLCNqRZ)CKVqOXnh7qMKy(m93j|e++QqzgBk|`KfMe%9*`6WacMwGJT ijMQSnsxnd&aR!C5f~%hkI93588ipqB+m9ZjJ^=+FRZR5& delta 179 zcmV;k08IbC489DImw%pmR9JLGWpiV4X>fFDZ*Bkpc$|%qy$ZuH41{OvDNM4L{;gd~ zLdnp)f-zXJ4T%M^XkWicJ9H}5b_bvCK-b!9e;Y>I-3NFe*G$D;?0L5b^UOigYEDNm z33E*HF;%?aDjRm5mj+D8T(=`I6Z-`>efUzdiei_135qZk7ATo=QFP826_px_-9#jc hFcl`mmHtu*{m)mlwjaCqsxK^!hDM|xFZ-iE0R>M0PoMw* diff --git a/icons/mob/human_races/species/human/deformed_body_female.dmi b/icons/mob/human_races/species/human/deformed_body_female.dmi index da386c18ad19b1ffc844466a63ac034a410ba289..a1fa8ba191f577ac67bdf720e7fcc20d39e493a0 100644 GIT binary patch delta 181 zcmV;m080PsAnYKJB!8fKR9JLGWpiV4X>fFDZ*Bkpc$|&UI|{=v5CqU#I>li3As@GD zf{amNU%`lYEeUK3RwB86iWI3rwj6lOz_hscgPUMSr=P?n8#Z&Ej7a6cGW6U z3bB4dslE~n8lFAxjaEzI0)tMgmHkcy2A8keM2hF=k3~=>Vk&`iIs}^=1;M05@x10- j1!W@kh*bWoNdD&)E&9pAj!wS;BN~P#4IW29vCN+joa0fK delta 180 zcmV;l089VuAnPEIB!8cJR9JLGWpiV4X>fFDZ*Bkpc$|&UzY4=37zFTHpW;aN(mz>U zilI0puONa(g+$>~+Sl*Up;PHM9{jk28*!f>W`$midEYxg#_vT)t{&DYD5G&nRQDNGUZJ#^xR(W0IrDZnbts i8H@Ewt^QRhxSv;ym{$$G82JV)jfO^L<0r_m&7TjfFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5; z&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3KBSC_b?$SBZ-=C9|j)q=}0& zttc@!6~s0~sLCNqRZ)CKVqOXnh7qMKy(m93j|e++QqzgBk|`KfMe%9*`6WacMwGJT jjMQSnsxnd&aR!C5f~%hkI93588ipqB+m9ZzWdY{|o_fFDZ*Bkpc$|%qy$ZuH41{OvDNM4L{;gd~ zLdnp)f-zXJ4T%M^XkWicJ9H}5b_bvCK-b!9e;Y>I-3NFe*G$D;?0L5b^UOigYEDNm z33E*HF;%?aDjRm5mj+D8T(=`I6Z-`>efUzdiei_135qZk7ATo=QFP826_px_-9#jc iFcl`mmHtu*{m)mlwjaCqsxK^!hDM|xFZ;7*0p|qIkx>8u diff --git a/icons/mob/human_races/species/humanoid/body.dmi b/icons/mob/human_races/species/humanoid/body.dmi index 989dcb243af8cf9ac82d487e1f6c8016ad515d3c..65f0f5676da1133654dfff94b47d0cecc25128ae 100644 GIT binary patch delta 181 zcmV;m080O~3$+W7h<~4YR9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5; z&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3KBSC_b?$SBZ-=C9|j)q=}0& zttc@!6~s0~sLCNqRZ)CKVqOXnh7qMKy(m93j|e++QqzgBk|`KfMe%9*`6WacMwGJT jjMQSnsxnd&aR!C5f~%hkI93588ipqB+m9ZzF9C%FRGdv! delta 180 zcmV;l089V13$zQ6h<~1XR9JLGWpiV4X>fFDZ*Bkpc$|%qy$ZuH41{OvDNM4L{;gd~ zLdnp)f-zXJ4T%M^XkWicJ9H}5b_bvCK-b!9e;Y>I-3NFe*G$D;?0L5b^UOigYEDNm z33E*HF;%?aDjRm5mj+D8T(=`I6Z-`>efUzdiei_135qZk7ATo=QFP826_px_-9#jc iFcl`mmHtu*{m)mlwjaCqsxK^!hDM|xFZ;7F0fhvH7f=8I diff --git a/icons/mob/human_races/species/monkey/monkey_body.dmi b/icons/mob/human_races/species/monkey/monkey_body.dmi index 778798ae48dcdd09634ce1956914fdd90ebe2115..11779ee5b995b329002c489e60dd9081e3ce97a1 100644 GIT binary patch delta 182 zcmV;n07?I*2&V{;UVor^R9JLGWpiV4X>fFDZ*Bkpc$|%qy9&cF3`J-AD@?MNzSb@! zp=3yY!I)aH1c?o@X@5USJ9H}1b}t+qgjAb*`{)MK^qqbIXG+oB%=K{8>P^1jS}td; z5GY{zmRwwcHCAlVMPF&4vjzbm1BDw>+W-In delta 181 zcmV;m080O-2&M>-UVoo@R9JLGWpiV4X>fFDZ*Bkpc$|&VJqp7x3wP}au^VJo4`G!U-2Xl$D2LT`hv@}#N diff --git a/icons/mob/surgery.dmi b/icons/mob/surgery.dmi index 8457a59526b37eb0658a70222795e890276a9e98..eb38e6236eb72578c64a3dd1cfd3b583fcf3368c 100644 GIT binary patch delta 291 zcmV+;0o?w+3&IPKXMYTOR9JLGWpiV4X>fFDZ*Bkpc$}4$!HUBm5Qfk3DWpAj*(SaA zvb2;QnpX&RGl{|^g39*wH)>&z`_E0`^J5(6Pxkujdb{`f^0=!X3eovhpY`eEQ#CI) zCcACARyCH~Y*XFDWD;%5-5k7I+rz{Z?M^kL3o)Nn%@oW+d4GNUgTr9Lg2F6;zb(Zi zf;$=f^eaW6W^2|FZ-}9l>qMGn)C4EH>^=XJ1ubsp?gaft}Zb|?{#9RZ87hMC6 p79w%8$elxuniuPb250}7)4jg-m-0va1z@ldgVD&TX|s3%Mg*ZslV|_{ delta 287 zcmV+)0pR|^3%(1GXMYHKR9JLGWpiV4X>fFDZ*Bkpc$}4$K@P$o5JlJJ6hzk=ZQZ&t z8skE*U@)bH1Utz<^!gSsap|8OB#)P2nBOk-;dH*-^znL8FU!%>r1yHa-l*p7`{d?L z*Q&-@Ke|*mF_~oN!) diff --git a/mods/content/corporate/icons/cyberlimbs/bishop/bishop_main.dmi b/mods/content/corporate/icons/cyberlimbs/bishop/bishop_main.dmi index 7416142c7fc26a1eb1c15a87750bbfe26daa4b6a..97cee647880be3e65492c6faab15b749597c78f6 100644 GIT binary patch delta 181 zcmV;m080PfAm1R6B!8fKR9JLGWpiV4X>fFDZ*Bkpc$|&SI|{=v5Jk~iTE)ZeLq2ZR z1exH%-hvSESQ6M4j6|~i6e&^#PdRY7Z(7{@$1uT;gMJa0ly?|(r?Xb?G}j1&+f}Pb zDa86cO7)ds(6IBoHCoMy3k*7~7WNwz7+ij86)ASn@3SB#Vk+!b3WAtKv0HMkf|!U! j^2hH7&S^hX&q(F(V2ggTu;ZXV5sro?467;bvCNVWybe{v delta 180 zcmV;l089VhAl@L5B!8cJR9JLGWpiV4X>fFDZ*Bkpc$|&Sy$Zu17=__kui}vGr9W9+ ziXk{8w;+N>g(SkKw71`(L#L8&Jn-;xdOXL;EYP!&uRt}I0}8|CD#bhdmZ0#sOOZm3 zseMOnt_3J`WF76D6h2dh!XU*;ZVwd-x1ZWrifnR+XT(^H>?sx^BgRo=*HRiI#$qYB i^ZSuXK2B9DRLeirV_Y=!Y~%+PVTMM*VUC-z&5{qn{8R)0 diff --git a/mods/content/corporate/icons/cyberlimbs/bishop/bishop_rook.dmi b/mods/content/corporate/icons/cyberlimbs/bishop/bishop_rook.dmi index 38aba177e92efdd1856ca033ece8749b59961099..e32cd73d76bcb025a68de611fb3e2d8346168362 100644 GIT binary patch delta 170 zcmV;b09F5}7pE7HY5}~FYb<}4t%a@~Y1!D@+bW`$u{v@|!uP>XNXjn7wX9fvE9n4e zrP1unj@un2qpY3q!(mT}0ND!n9<1XIe4F51a9t;q)Dms5C~1&)5c=#FXNX|~xxo%i_sp$ad zlr`+g_UjELqY_?*VYj73g6gDy4$gBAq0R6rxe*y9LZOQmB`xwEVqbh>9Qy=HLzh6c z*7{jYrzO)#$#haOotDg7boM)S2wTv6itAPJs<+yqRc4tgf&aM1oCz8exMk)IVNfvs ZCFiVa%EvF>0gg1YjWR5lgR?IIcna5FQ|tf$ diff --git a/mods/content/corporate/icons/cyberlimbs/hephaestus/hephaestus_main.dmi b/mods/content/corporate/icons/cyberlimbs/hephaestus/hephaestus_main.dmi index 55a22e7455500c2bbde531c90ade1984b5d0355d..c5459759caf2887fb40911daecfcca0505ee5d15 100644 GIT binary patch delta 181 zcmV;m080O$9-$tPB!8fKR9JLGWpiV4X>fFDZ*Bkpc$|&SI|{=v5Jk~iTE)ZeLq2ZR z1exH%-hvSESQ6M4j6|~i6e&^#PdRY7Z(7{@$1uT;gMJa0ly?|(r?Xb?G}j1&+f}Pb zDa86cO7)ds(6IBoHCoMy3k*7~7WNwz7+ij86)ASn@3SB#Vk+!b3WAtKv0HMkf|!U! j^2hH7&S^hX&q(F(V2ggTu;ZXV5sro?467;bvCLEsVU<+` delta 180 zcmV;l089U&9-tnOB!8cJR9JLGWpiV4X>fFDZ*Bkpc$|&Sy$Zu17=__kui}vGr9W9+ ziXk{8w;+N>g(SkKw71`(L#L8&Jn-;xdOXL;EYP!&uRt}I0}8|CD#bhdmZ0#sOOZm3 zseMOnt_3J`WF76D6h2dh!XU*;ZVwd-x1ZWrifnR+XT(^H>?sx^BgRo=*HRiI#$qYB i^ZSuXK2B9DRLeirV_Y=!Y~%+PVTMM*VUC-z%~TF(15-r+ diff --git a/mods/content/corporate/icons/cyberlimbs/hephaestus/hephaestus_titan.dmi b/mods/content/corporate/icons/cyberlimbs/hephaestus/hephaestus_titan.dmi index b22ce8aff62044f7f5986509a0b9b47630d7a45f..537c9ce687904df9a4fe912ee5e4cf1e17ea107c 100644 GIT binary patch delta 177 zcmV;i08an94!RDIe}BR-5QXRDSA=#I(dz0VEz-gM1v$($38aZ!LW}?2v<|wIhFji) z@7=xON^xy&Z71q`%SWVOyb~93-XA!djEp*&Q^lD^qjdb55Fuic1wDX fP3lEB8l2X+QZ!w?yu$~vMU}T6Ga<*bBLNo%!emx} delta 177 zcmV;i08an94!RDIe}9885QXRDR|H*4X>HdoMJW#TFO)#eBoIBh1f~DJ(GKk*3Aell z-@ALmmEzt!+D_EZmd`-m;wWz7dOUHqSQSh(mx?n3R-5oOKF9!37W9%d6r3qbehqQf zlN?~x=YPt`QDtBbbOzNUh9u^)nz_7YE~}Z#Yi2<1T#QfFDZ*Bkpc$|&VI|{=v3L{h-zFDRU@IF($;UnZO;Qp{u)*z40zJrQ!LD$<6QswxUBMH)@Cj4&1>9l$Zd kIEwU~QvDc##}Lfl^;^|X-RG+-Ao_+TFrn{rvuOdc1u0lnE&u=k delta 181 zcmV;m080Oy4x0{;!GE86R9JLGWpiV4X>fFDZ*Bkpc$|&VJqp7x3gP@6^y<2Y?MQp~Iu-16av z@P(;}SZQ90%2z2?q(ga^uVZ(@l#9x8bfIFIM_VzhMzNY>ED!U4Sql#R)O}w62Hh)= NeH7+M!?Q^NfCU5KO+o+w delta 158 zcmV;P0Ac^i4ap6VodKhfo*#cn_R_z#OGzjhnkxi@72DugAd8mXzDYZDtF`IDC-Fe7 zx%RhVG~IpB51TGI`W-RJdh`Tmfd MsS+Hbvq}Mg1@`4j{Qv*} diff --git a/mods/content/corporate/icons/cyberlimbs/nanotrasen/nanotrasen_main.dmi b/mods/content/corporate/icons/cyberlimbs/nanotrasen/nanotrasen_main.dmi index 817df63e3ee0d89cc51a507302e950bb2429d52f..66d0bbdb87046b30a68c7533371fb3583d6ff37f 100644 GIT binary patch delta 182 zcmV;n07?I|7_}IXB!8iLR9JLGWpiV4X>fFDZ*Bkpc$|&UI|{=v5CqU#dy2vCLq2ZR z1exH%zJd_(+7ieXtVDAC6e&^#s~mU?!?d{fk70rt2YRvOkalQvr!%Q{n2U$T?MljX zSbh11TwGyjG^?brH>Bnu85$j_Mcl?28ke7Xdd}rgiFL9asw-Hf#Co^S6=hXSY~;0~ ktVW4lQaU~()-liS@B9}1WMIaDJ|OyrCY698!?Da~3-47{#Q*>R delta 180 zcmV;l089V17_%6VB!8cJR9JLGWpiV4X>fFDZ*Bkpc$|&Sy$Zu17=__kui}vGr9W9+ ziXk{8w;+N>g(SkKw71`(L#L8&Jn-;xdOXL;EYP!&uRt}I0}8|CD#bhdmZ0#sOOZm3 zseMOnt_3J`kxD)~DSW01g+Ypy+#V_vZa>uu)pDxHI@(Xw#wk){lRG>k#$sf*5E(I! iBD)0!Tr78V_Y=!Y~%+}?S@9~R}RRr&Swj1dQ;^9 diff --git a/mods/content/corporate/icons/cyberlimbs/shellguard/shellguard_main.dmi b/mods/content/corporate/icons/cyberlimbs/shellguard/shellguard_main.dmi index a91367c6b2a119c38f15faab67cbda8737aed2e5..f0f2ad5f42ea437519e1193afb0bfab6c6f75594 100644 GIT binary patch delta 163 zcmV;U09^mF3$qK5Z~>l?aTR|-3c@fDMc2tGLc15OZrw;r>B3$?1~bhB+5{#+uisWT zZX~n&AKo7xOl@vmKa8fm5Bi0id<^DlE{CI5Z*Mbg<=kjR=pE&6Nf|P3v6>&iOQn_d zoc57c6T^agKK)Wtj9GvY1S`O1bVZ6qW-K#fnHh`B2%&t+arB``JqZ%iU;Em0WBd8) R3Nwv{CVL(u>$4UCoCM-mNUi_? delta 162 zcmV;T0A2sH3$hE4Z~>i>aTR~N3d1lAMQ7_POtP20)-ENXWN3b&7_8Wa!~$8gzu%-? zx)f`>7tR$2)Y@x*8%EpR2Y4cvMA=^KdAA4iN?zhxPDd~iQ;6~{MV#OooB82*X~6iz zWgCH+*e$r_!!I=vi2{o*dj&RQs8XylW1Si6%vfa>(bZ1{rj)Cc5El{pN42&eyU$nO QIADfGoA#3PvljuJ1o}`+2><{9 diff --git a/mods/content/corporate/icons/cyberlimbs/veymed/veymed_female.dmi b/mods/content/corporate/icons/cyberlimbs/veymed/veymed_female.dmi index 41d1d1e6f51ef5f9ba26a647b2dcb6e0827daa64..26b92416d23c14731bda6fb71cca14e224a7d402 100644 GIT binary patch delta 181 zcmV;m080PK49X0Usehk(R9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5; z&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3KBSC_b?$SBZ-=C9|j)q=}0& zttc@!6~s0~sLCNqRZ)CKVqOXnh7qMKy(m93j|e++QqzgBk|`KfMe%9*`6WacMwGJT jjMQSnsxnd&aR!C5f~%hkI93588ipqB+m9ZzPyzV_i>6LD delta 180 zcmV;l089VM49N_Tsehh&R9JLGWpiV4X>fFDZ*Bkpc$|%qy$ZuH41{OvDNM4L{;gd~ zLdnp)f-zXJ4T%M^XkWicJ9H}5b_bvCK-b!9e;Y>I-3NFe*G$D;?0L5b^UOigYEDNm z33E*HF;%?aDjRm5mj+D8T(=`I6Z-`>efUzdiei_135qZk7ATo=QFP826_px_-9#jc iFcl`mmHtu*{m)mlwjaCqsxK^!hDM|xFZ;7m0r>>H)KKC8 diff --git a/mods/content/corporate/icons/cyberlimbs/veymed/veymed_male.dmi b/mods/content/corporate/icons/cyberlimbs/veymed/veymed_male.dmi index 783725c8459a045602a788259535d552bfe6b8d2..b4fd5806bb0bd59971af13b4e91d4fa366f16a50 100644 GIT binary patch delta 166 zcmV;X09pUY49N_TpaGwep%Z^oR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6# za*U0*I5Sc+(=$pSoZ^zil2jm5sVF|NC|8M#GbOXA7^I1dGp#5wHxx#O zMq*wH5rz?^EWIc{Gmi*6b5hfZu#y;6Me%9*`6WacMwGJTjMQSnsxlQ)6LAKGvVyCh U3piE*BN~P#?%R(Zvqu2|1#?hGEC2ui delta 165 zcmV;W09yaa49EnTjKm;S9?Nj@vS?qw zNjr2Z)piG;?m*YtYkwO?+ua9vAlFRAUhH|d2lLE9(rQjeFbQ)^@-bDs;3^w-o|gtp z$XvH0FcbR)H+}e0vx;JudfFDZ*Bkpc$|&VI|{=v3H_1b)v})c^nh delta 181 zcmV;m080Ox3z`d%g@2!VR9JLGWpiV4X>fFDZ*Bkpc$|&VJqp7x3_uTj2%a=@e>>V7&)u?EY254Won z9)k1y4VewYJ~keVZKSY)^06buOlE;&zWfj)Wh^R37*bJ@jw#@ZDpo1dGa^@%RWZ_r jmWr|(McSKGK5YEUTGdb8=c^kALxx7!yItY4E&*)>+PhLH diff --git a/mods/content/corporate/icons/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi b/mods/content/corporate/icons/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi index 7122cafb81875e7eb79fbe2aae97178960faaf20..1fb14207c9b42d720b4ca99888b4f5a92b9f0bac 100644 GIT binary patch delta 160 zcmV;R0AK&L47Ci9j(?H63d1lAMQ8gfOtP20)-ENXWJrF&m|C#}i4C%8e?Lh(bSlwy zFB}~SRGWMI=myjDoqhplO3~cR^>EbcO}^k-E@!O}C}8=PTwH-QR%{*5l~$fOZ$ny* z>}J^V=|@c>iY>b61u_xFc7h;~Nhr2sN<|o5}g-Q0(zqLzA2pO6y7=sntkXRs#=K4w6p;L)A zJ^1txs5Z~G>j%@kdi@3}3A1^a`{}IJl03&P+^$+hNFnk!6m|^TSdn!!S6cZ*Wna>2 zBsar8UwDYDUJFDMf+vJ(VBnM9Et5m`_sViDZ&`GGLyLlnhG1^=nqv_tdx>IxQN OhDP1nAUd-l0Tcy!I7pcQ diff --git a/mods/content/corporate/icons/cyberlimbs/xion/xion_econo.dmi b/mods/content/corporate/icons/cyberlimbs/xion/xion_econo.dmi index ecdfcc197c71c21bfac6ae82b6b8edcf63227de1..7bb9044f86be5feaa09b6d76aa8a0c0e99e36ef9 100644 GIT binary patch delta 149 zcmV;G0BZk|4U-L!VF9I)Vk&=_TCoI9Tx65{ev@|TQmpM>IN}~qZLaOD>rHd-^bDLR zPUd3HyS-Kmxr}Q$9koIrkNI0twi(t~@x$_1Y2}F1cBIw7c7!b-ekrt*6JP)M(4grJ( DU<^or delta 148 zcmV;F0Biq~4U!FzVF9F(Vk&qHuv_?^`?1tdI3&I zlewAe;i%P$E{CmL&RPXPAM&@PY%^@J;+N&I(#j#HeWcaEc7#2jeyLz5C%__j0W}ci zA{IqvQDzoJW>IDqz?Lt1CY*{?CQekOW`+e}{m0d&?VHc{-%KZw=^+CkHyg7L0fYrc CT|^}S diff --git a/mods/content/corporate/icons/cyberlimbs/xion/xion_main.dmi b/mods/content/corporate/icons/cyberlimbs/xion/xion_main.dmi index 3fd2d896fdebe25b76baa668099d9c62ca178606..b404f18738861c48af6b89e1a78ca846bd0d17db 100644 GIT binary patch delta 181 zcmV;m080O%9HJbMB!8fKR9JLGWpiV4X>fFDZ*Bkpc$|&SI|{=v5Jk~iTE)ZeLq2ZR z1exH%-hvSESQ6M4j6|~i6e&^#PdRY7Z(7{@$1uT;gMJa0ly?|(r?Xb?G}j1&+f}Pb zDa86cO7)ds(6IBoHCoMy3k*7~7WNwz7+ij86)ASn@3SB#Vk+!b3WAtKv0HMkf|!U! j^2hH7&S^hX&q(F(V2ggTu;ZXV5sro?467;bvCLHsU@}z# delta 180 zcmV;l089U(9HAVLB!8cJR9JLGWpiV4X>fFDZ*Bkpc$|&Sy$Zu17=__kui}vGr9W9+ ziXk{8w;+N>g(SkKw71`(L#L8&Jn-;xdOXL;EYP!&uRt}I0}8|CD#bhdmZ0#sOOZm3 zseMOnt_3J`WF76D6h2dh!XU*;ZVwd-x1ZWrifnR+XT(^H>?sx^BgRo=*HRiI#$qYB i^ZSuXK2B9DRLeirV_Y=!Y~%+PVTMM*VUC-z%~cI%qEkZv diff --git a/mods/content/corporate/icons/cyberlimbs/zenghu/zenghu_spirit.dmi b/mods/content/corporate/icons/cyberlimbs/zenghu/zenghu_spirit.dmi index 000d3837d69f66449953b3b2c1e019829982d047..ab9adde10b2112fda0e540bcbc4cecc23e785aa1 100644 GIT binary patch delta 149 zcmV;G0BZlj48shNRRN`uRw{p(TCoI9Tx65{ev@|TQmpM>IFb&iHrMvn^`^OZdInAu zCv!39-CnDOT*kGWj#?p*$NViR+YD>0_+fdhv~t908`5fEJHnO^zZBZZ39tZOKn*eG zA{InuL1q?2WqHuv_?^`?1tdI3&I zlewAe;i%P$E{CmL&RPXPAM&@PY%^@J;+N&I(#j#HeWcaEc7#2jeyLz5C%__j0W}ci zA{IqvQDzoJW>IDqz?Ls&;zUKtGvQREW`+e}{m0d&?VHc{-%q!Z>8=BF9_zCM0YC+& C3P)xD diff --git a/mods/species/ascent/icons/species/body/alate/body.dmi b/mods/species/ascent/icons/species/body/alate/body.dmi index 68efba56efd66a1bf0d6d8bc9732c0d04c7ccc54..d7093628bcf3e0a2351f074fdaf47ddad52c929e 100644 GIT binary patch delta 165 zcmV;W09yaL4!RDIbbmVv!!Qs;Yv~li?n8cUnqXsG#8(hXw3Zh1ft5(EA3G^h1#dS4 zZ--&0Ro8wPC)M3X`2;GMle(z$ZZE|PZS{*e9i{Mq&eyLg)l^tyL)uVmq_9Y3J(6N3 z6Jgbd9~D>>X>XEcgt4%QHekGOa*i@4Mz;WtQH?{9o^!5@Fc}v1@KClX59aU7TGdb8 TXZ<&F5s{^O?0uHA3;`|%yemp! delta 165 zcmV;W09yaL4!RDIbbq}H!!QhlXZtBkvX}m?T}nd9(7b|iv11GD2xQT|ev@|SRHE$; zJ{^ayHP`+&jHbH}`WdJK&gNpyyS-K~@SGNNI%<^y#Kd1y*>PB8L)KAgwDLf8J<@6- zSHh|fKPrnTvdPU}5GKM3_zdN-$wfk#1>JIpf@%_q?1adIFc}fXNEJ7!6x`pJwWc4t T&-!nBgptL?70f5I3;`|%Z@*9f diff --git a/mods/species/ascent/icons/species/body/gyne/body.dmi b/mods/species/ascent/icons/species/body/gyne/body.dmi index a147a64c1af324b50b41f98047c3a9620275cf8a..1f2dd77750715e8ec0d4f7f9fd265dbf955c766a 100644 GIT binary patch delta 189 zcmV;u07Czv8KW7HTYsl|R9JLGWpiV4X>fFDZ*Bkpc$|%qu@1s83`FPTE24HsAThA8 zpjN0u`wLMZZfq%OBqxI3r(t0u+3w`0JIn6XZM;v58sJz;2Juc!uVfUuf}Ege*Xg;W|6D4^80nO2?3Z3260)H delta 187 zcmV;s07UfFDZ*Bkpc$|%qu?oX53`A%9D@?MN7CLn4 zQW8pr<`;sC6?WC0YxV4%UC31 wscecd3r-VZJkIC@G70q}O#2%hM<4!CwQh&z`_&cdorWu-3j!@(vlRiC3J=;r&;S4c delta 142 zcmV;90CE4U7pxbMlz)T_%`XIl72A+RAdB|*8+YkcqU~Pp;UG|LA8pqUwt4pOLe7a+ zd$-ra5zISziCejx!9+|UN?C4@#R+b)is*a=#wX5Y0W+~%u;kMZnn%Zrf{Je4m$6F5 wTG>P-iqljWk23~^OhXBArd=v9rS%_G+jeNaU;O~|FosLw$^zy;vlRiC3SnbI;s5{u diff --git a/mods/species/bayliens/adherent/icons/body_emerald.dmi b/mods/species/bayliens/adherent/icons/body_emerald.dmi index b13887f944eafd14dd7d7ee940feaf42eadae43c..49f7e9ecf08737b598ff72fe6fd835eadb962adf 100644 GIT binary patch delta 142 zcmV;90CE4U7pxbMlz)^A$u9&`E0!U#K{oC0C+^azMB5eja3oNzAMLXnbkle6MovBk zeb?8+5!A=qOxtidgCg{fa%pamvdOr`iqO~!l=YlS18QQkV9BQ+G>?WC0YxV4%UC31 wscecd3r-VZJkIC@G70q}O#2%hM<4!CwQh&z`_&cdorWu-3j!@(vlRiC3J=;r&;S4c delta 142 zcmV;90CE4U7pxbMlz)T_%`XIl72A+RAdB|*8+YkcqU~Pp;UG|LA8pqUwt4pOLe7a+ zd$-ra5zISziCejx!9+|UN?C4@#R+b)is*a=#wX5Y0W+~%u;kMZnn%Zrf{Je4m$6F5 wTG>P-iqljWk23~^OhXBArd=v9rS%_G+jeNaU;O~|FosLw$^zy;vlRiC3SnbI;s5{u diff --git a/mods/species/bayliens/adherent/icons/body_jet.dmi b/mods/species/bayliens/adherent/icons/body_jet.dmi index 84031cc419521b07d20a1b6880dbd29f49d09434..e32bcd6b93249c54aafb450470f64a4787900441 100644 GIT binary patch delta 142 zcmV;90CE4A7MK>0k$;p7$u9&`E0!U#K{oC0C+^azMB5eja3oNzAMLXnbkle6MovBk zeb?8+5!A=qOxtidgCg{fa%pamvdOr`iqO~!l=YlS18QQkV9BQ+G>?WC0YxV4%UC31 wscecd3r-VZJkIC@G70q}O#2%hM<4!CwQh&z`_&cdorWu-3j!@(vl0OY3iaYa4*&oF delta 142 zcmV;90CE4A7MK>0k$;2?%`XIl72A+RAdB|*8+YkcqU~Pp;UG|LA8pqUwt4pOLe7a+ zd$-ra5zISziCejx!9+|UN?C4@#R+b)is*a=#wX5Y0W+~%u;kMZnn%Zrf{Je4m$6F5 wTG>P-iqljWk23~^OhXBArd=v9rS%_G+jeNaU;O~|FosLw$^zy;vl0OY3P*ZFApigX diff --git a/mods/species/bayliens/adherent/icons/body_quartz.dmi b/mods/species/bayliens/adherent/icons/body_quartz.dmi index 1746f84f8c4a6b1a97215349f498cd71e8699553..5dfc428bf662edd275de09ace96f6a2c70d0815f 100644 GIT binary patch delta 142 zcmV;90CE4U7pxbMlz)^A$u9&`E0!U#K{oC0C+^azMB5eja3oNzAMLXnbkle6MovBk zeb?8+5!A=qOxtidgCg{fa%pamvdOr`iqO~!l=YlS18QQkV9BQ+G>?WC0YxV4%UC31 wscecd3r-VZJkIC@G70q}O#2%hM<4!CwQh&z`_&cdorWu-3j!@(vlRiC3J=;r&;S4c delta 142 zcmV;90CE4U7pxbMlz)T_%`XIl72A+RAdB|*8+YkcqU~Pp;UG|LA8pqUwt4pOLe7a+ zd$-ra5zISziCejx!9+|UN?C4@#R+b)is*a=#wX5Y0W+~%u;kMZnn%Zrf{Je4m$6F5 wTG>P-iqljWk23~^OhXBArd=v9rS%_G+jeNaU;O~|FosLw$^zy;vlRiC3SnbI;s5{u diff --git a/mods/species/bayliens/adherent/icons/body_ruby.dmi b/mods/species/bayliens/adherent/icons/body_ruby.dmi index 9cc2983e73fcd5b6d11d88df6c7b03ffcac98c5e..8aa2c99e62c34f13af6ffe25994a23931e69274e 100644 GIT binary patch delta 142 zcmV;90CE4U7pxbMlz)^A$u9&`E0!U#K{oC0C+^azMB5eja3oNzAMLXnbkle6MovBk zeb?8+5!A=qOxtidgCg{fa%pamvdOr`iqO~!l=YlS18QQkV9BQ+G>?WC0YxV4%UC31 wscecd3r-VZJkIC@G70q}O#2%hM<4!CwQh&z`_&cdorWu-3j!@(vlRiC3J=;r&;S4c delta 142 zcmV;90CE4U7pxbMlz)T_%`XIl72A+RAdB|*8+YkcqU~Pp;UG|LA8pqUwt4pOLe7a+ zd$-ra5zISziCejx!9+|UN?C4@#R+b)is*a=#wX5Y0W+~%u;kMZnn%Zrf{Je4m$6F5 wTG>P-iqljWk23~^OhXBArd=v9rS%_G+jeNaU;O~|FosLw$^zy;vlRiC3SnbI;s5{u diff --git a/mods/species/bayliens/adherent/icons/body_sapphire.dmi b/mods/species/bayliens/adherent/icons/body_sapphire.dmi index 850b34f12e38623b052dee8faed751dc05f54051..0e8e864628905689e762b40e41e45936abd0eda2 100644 GIT binary patch delta 142 zcmV;90CE4U7pxbMlz)^A$u9&`E0!U#K{oC0C+^azMB5eja3oNzAMLXnbkle6MovBk zeb?8+5!A=qOxtidgCg{fa%pamvdOr`iqO~!l=YlS18QQkV9BQ+G>?WC0YxV4%UC31 wscecd3r-VZJkIC@G70q}O#2%hM<4!CwQh&z`_&cdorWu-3j!@(vlRiC3J=;r&;S4c delta 142 zcmV;90CE4U7pxbMlz)T_%`XIl72A+RAdB|*8+YkcqU~Pp;UG|LA8pqUwt4pOLe7a+ zd$-ra5zISziCejx!9+|UN?C4@#R+b)is*a=#wX5Y0W+~%u;kMZnn%Zrf{Je4m$6F5 wTG>P-iqljWk23~^OhXBArd=v9rS%_G+jeNaU;O~|FosLw$^zy;vlRiC3SnbI;s5{u diff --git a/mods/species/bayliens/adherent/icons/body_topaz.dmi b/mods/species/bayliens/adherent/icons/body_topaz.dmi index 9da15d6212639de19905248b1e633891183464f9..761483240338d8342ffdc71d2670dd17aa7585ec 100644 GIT binary patch delta 142 zcmV;90CE4U7pxbMlz)^A$u9&`E0!U#K{oC0C+^azMB5eja3oNzAMLXnbkle6MovBk zeb?8+5!A=qOxtidgCg{fa%pamvdOr`iqO~!l=YlS18QQkV9BQ+G>?WC0YxV4%UC31 wscecd3r-VZJkIC@G70q}O#2%hM<4!CwQh&z`_&cdorWu-3j!@(vlRiC3J=;r&;S4c delta 142 zcmV;90CE4U7pxbMlz)T_%`XIl72A+RAdB|*8+YkcqU~Pp;UG|LA8pqUwt4pOLe7a+ zd$-ra5zISziCejx!9+|UN?C4@#R+b)is*a=#wX5Y0W+~%u;kMZnn%Zrf{Je4m$6F5 wTG>P-iqljWk23~^OhXBArd=v9rS%_G+jeNaU;O~|FosLw$^zy;vlRiC3SnbI;s5{u diff --git a/mods/species/bayliens/adherent/icons/body_turquoise.dmi b/mods/species/bayliens/adherent/icons/body_turquoise.dmi index 78952bfb04ad87b725569479961b513e5b618c4d..4570f52fb88609010445b0e1bdf11f864388aa1f 100644 GIT binary patch delta 142 zcmV;90CE4U7pxbMlz)^A$u9&`E0!U#K{oC0C+^azMB5eja3oNzAMLXnbkle6MovBk zeb?8+5!A=qOxtidgCg{fa%pamvdOr`iqO~!l=YlS18QQkV9BQ+G>?WC0YxV4%UC31 wscecd3r-VZJkIC@G70q}O#2%hM<4!CwQh&z`_&cdorWu-3j!@(vlRiC3J=;r&;S4c delta 142 zcmV;90CE4U7pxbMlz)T_%`XIl72A+RAdB|*8+YkcqU~Pp;UG|LA8pqUwt4pOLe7a+ zd$-ra5zISziCejx!9+|UN?C4@#R+b)is*a=#wX5Y0W+~%u;kMZnn%Zrf{Je4m$6F5 wTG>P-iqljWk23~^OhXBArd=v9rS%_G+jeNaU;O~|FosLw$^zy;vlRiC3SnbI;s5{u diff --git a/mods/species/bayliens/adherent/icons/damage_mask.dmi b/mods/species/bayliens/adherent/icons/damage_mask.dmi deleted file mode 100644 index f42eb2760e64e9792e84ddd1024a3ea3be1c7591..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0s0{{R3SZmPk00006P)t-sz`(%& z|Nkp#hqM3y00DGTPE!Ct=GbNc005zSR9JLGWpiV4X>fFDZ*Bkpc$|%qy9&cF3`J+_ zD@?MNzUbDaB!mpjF9d@X+mP5Gi}v^Hw$QCu+r8*;xS&?w`eB@OcOT(_ltYU8s?WPU zsAsV3OF11uc?{0;`*MNIhOxxPqp=Mr8z`500JV_W@SA_oIvd&qlsB<1Baw`xvLz)J zOcP-=ujm9a3B`$Ws#1GT zPx9?}{O?h!b*hve0T>Tpm`;Js{y%^;YZ0v3O4py+%HVcvW%xS>9=GnuL%Z;_>A%BA zESn4r0WV-6FwJ|Mk;yR@E&8>#2=KTxp9nqxv=w+qF#fz_-%}TgoA@K$aWNtA0P=}? z48{G?4HoCbD&rD}!FoQMDxF4isFXmgt0{JTB`^vYVz73SDjTY}m!MB(z@Yb^Qil fjjLy?dzADA5=3Ac2d|s>00000NkvXXu0mjf`r!rq diff --git a/mods/species/bayliens/adherent/organs/organs_external.dm b/mods/species/bayliens/adherent/organs/organs_external.dm index 2e47331bd0b..e7f3c3426b8 100644 --- a/mods/species/bayliens/adherent/organs/organs_external.dm +++ b/mods/species/bayliens/adherent/organs/organs_external.dm @@ -71,7 +71,6 @@ name = "first tendril" amputation_point = "midpoint" joint = "base" - icon_name = "l_leg" organ_tag = BP_L_LEG parent_organ = BP_CHEST max_damage =20 @@ -81,15 +80,12 @@ /obj/item/organ/external/tendril/two name = "second tendril" - icon_name = "r_leg" organ_tag = BP_R_LEG /obj/item/organ/external/tendril/three name = "third tendril" - icon_name = "l_foot" organ_tag = BP_L_FOOT /obj/item/organ/external/tendril/four name = "fourth tendril" - icon_name = "r_foot" organ_tag = BP_R_FOOT diff --git a/mods/species/bayliens/skrell/icons/body/body.dmi b/mods/species/bayliens/skrell/icons/body/body.dmi index 5d71019d7b144fb6a77bc1090cb1db1b91da787a..91b0e86f3b1b954d23c3b4ad3f136b9c06232393 100644 GIT binary patch delta 160 zcmV;R0AK&N3bzW7c7Kt(3d1lAMQ8gfOtP20)-ENXWJrF&m|C#}i4C%8e?Lh(bSlwy zFPwV@sW$ia(G8~QJN*LAl%lzr>*1)?n|#5wT+Uh{P{8snxwryrtk^o9E3G_n-bPxD z>}J^V=|@c>iY>b61u_xFc7h;~Nhr2sN<|o5}g-Q0(zqLzA2pO6y7=sntkXRs#=K4w6p;L)A zJ^1tnsW#8H>j%@kdi@3}3A1^a`{}IJl03&P+^$+hNFnk!6m|^TSdn!!S6cZ*Wna>2 zBsar8UwDYDUJFDMf+vJ(VBnM9Et5m`_sVu3K_L&Zo14-{1d_xBXFX@}pI7!_~k;Ps}mf~%hkI937W PYlbXY$T5Yp0|77uIAce6 delta 161 zcmV;S0AByI3bP83Z-0%Ey9&cF3`J+_D@?MNzJ@McNy|vT1+6ahGnj zwtL~|!a=>hjrVER!()OMat@UARiAfzQ14)i-^%F-%42Z8)N+AbOu;R79*yll*}%Ep zfLhqBSo7frIi`@BR3XmPr1%-p38;mr2r$E|fbu4_Eu&~GN)^W>n(?n@ug7`#e)R(o P&4x@0Rezs)R9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5; z&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3KBSC_b?$SBZ-=C9|j)q=}0& zttc@!6~s0~sLCNqRZ)CKVqOXnh7qMKy(m93j|e++QqzgBk|`KfMe%9*`6WacMwGJT ijMQSnsxnd&aR!C5f~%hkI93588ipqB+m9Zx{Ivt%rcMz6 delta 179 zcmV;k08Ia~39$)~Rezp(R9JLGWpiV4X>fFDZ*Bkpc$|%qy$ZuH41{OvDNM4L{;gd~ zLdnp)f-zXJ4T%M^XkWicJ9H}5b_bvCK-b!9e;Y>I-3NFe*G$D;?0L5b^UOigYEDNm z33E*HF;%?aDjRm5mj+D8T(=`I6Z-`>efUzdiei_135qZk7ATo=QFP826_px_-9#jc hFcl`mmHtu*{m)mlwjaCqsxK^!hDM|xFZ;3mwF3{rP`m&D diff --git a/mods/species/bayliens/tajaran/icons/eyes.dmi b/mods/species/bayliens/tajaran/icons/eyes.dmi index 1b29ac5de32a1969bd5e0afa5d32abcc089b8ddc..e7b1f1241a27ef98bdefffd42c9e4ab05716dac3 100644 GIT binary patch delta 158 zcmV;P0Ac@z1CRrdomJjRL_t(|obB4N4Z|Q50MR(3WD!J(d9r-hAPU5B z6~*7?oR2&6)B>6UXaP+Dw1B1nT0m2Pvj@i*ug~?WoCO!iPyrs3 zAOR7RU;z%3AOQpwW=Q}sB(>_!p96eNjQx`((`ikKX_5gj7~DR<8;yq%!oHZi)Bpeg M07*qoM6N<$f;WLdr~m)} delta 138 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 literal 8206 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 delta 142 zcmV;90CE4S391Q@f`14ZnkyKC72A+lAdBYuN!p=Pi8ej>^gyUK&$jCa)4Y291}X`& zd6@g@tkse{$1U8hT17}9@;4NA4BJ?dbu?F6`9x)3(rP3(!#-brY7!~3(Pb|v6EU(A w1VNcZksT3PP$puGRPazmaK}dm!j%81+O$LS`RWQMmxe}OQv!k}vjYLA15ma48vf?(L%+Ow)Jz1)M2G zb2Hb&QL8ukf@`>(wL+kPv*oT^2B*t(rRQk!#1COY7!~7=%N>ti5S}n wf}l*I*p4X`L79j>5%Ru5aQjCFP89#C+O$LS`RW20WQHcR^8$CJvjYL711^gyUK&$jCa)4Y291}X`& zd6@g@tkse{$1U8hT17}9@;4NA4BJ?dbu?F6`9x)3(rP3(!#-brY7!~3(Pb|v6EU(A w1VNcZksT3PP$puGRPazmaK}dm!j%81+O$LS`RWQMmxe}OQv!k}vjYL715IK-Qvd(} diff --git a/mods/species/bayliens/unathi/icons/body_female.dmi b/mods/species/bayliens/unathi/icons/body_female.dmi index fad7c93f17ad70a52f0b1d63c018787c2cc229c1..77620a6b94266267342889fbafdf4044fbb03a84 100644 GIT binary patch delta 182 zcmV;n07?JG3&#tPYJZ@5R9JLGWpiV4X>fFDZ*Bkpc$|&VI|{=v3`#Q$T kqpcWLqgc%`mQUvYvR3v}_xb7yyxoQ-CZv+Ivl0Qc1lQGA$^ZZW delta 181 zcmV;m080PI3&snOYJZ=4R9JLGWpiV4X>fFDZ*Bkpc$|&VJqp7x3_uTj2%a=@e>>V7&)u?EY254Won z9)k1y4VewYJ~keVZKSY)^06buOlE;&zWfj)Wh^R37*bJ@HYv0eRjg8^y-DTsV;v(M j!Bv#iDAF?`SCsu@t?H-l^VJRP@P69KdY&gfHQ diff --git a/mods/species/bayliens/unathi/icons/body_male.dmi b/mods/species/bayliens/unathi/icons/body_male.dmi index 582c1ccd5844b3a0f9a6d41db4358d5bea635489..75d2a831377954ade5c8e0cf2c11a539ead48d55 100644 GIT binary patch delta 182 zcmV;n07?J93&0DIYJZ@5R9JLGWpiV4X>fFDZ*Bkpc$|&VI|{=v3`#Q$T kqpcWLqgc%`mQUvYvR3v}_xb7yyxoQ-CZv+Ivl0QV1kK@CwEzGB delta 181 zcmV;m080PB3%?7HYJZ=4R9JLGWpiV4X>fFDZ*Bkpc$|&VJqp7x3_uTj2%a=@e>>V7&)u?EY254Won z9)k1y4VewYJ~keVZKSY)^06buOlE;&zWfj)Wh^R37*bJ@HYv0eRjg8^y-DTsV;v(M j!Bv#iDAF?`SCsu@t?H-l^VJRP@P69KIR#R5}L diff --git a/mods/species/bayliens/unathi/icons/deformed_body_female.dmi b/mods/species/bayliens/unathi/icons/deformed_body_female.dmi index 63f99147848397188cb88335ea5ece48fd9589af..ba4e40e8142479c00e29de7bddbef0990a9313e3 100644 GIT binary patch delta 182 zcmV;n07?Jg3*ifpbAOfFDZ*Bkpc$|&VI|{=v3fFDZ*Bkpc$|&VJqp7x3_uTj2%a=@e>>V7&)u?EY254Won z9)k1y4VewYJ~oapq(%xGC?88w%w!fg=F3kpQpTe4U~CbQHYv0eRjg8^y-DShv5t|B j;3~>$6zLg}E6V<{R`pZ&`RWD%Lxx84u%73$90A1y$yig2 diff --git a/mods/species/bayliens/unathi/icons/deformed_body_male.dmi b/mods/species/bayliens/unathi/icons/deformed_body_male.dmi index 687db5ff7a61976f29a566c97aa17099a1bd6862..a03dce76634bcbd2fe42890a5f61901d495a3ff8 100644 GIT binary patch delta 181 zcmV;m080PM3(O0UbAO+DR9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5; z&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3KBSC_b?$SBZ-=C9|j)q=}0& zttc@!6~s0~sLCNqRZ)CKVqOXnh7qMKy(m93j|e++QqzgBk|`KfMe%9*`6WacMwGJT jjMQSnsxnd&aR!C5f~%hkI93588ipqB+m9Zz8Ue8cW{6FN delta 180 zcmV;l089VO3(E_TbAO(CR9JLGWpiV4X>fFDZ*Bkpc$|%qy$ZuH41{OvDNM4L{;gd~ zLdnp)f-zXJ4T%M^XkWicJ9H}5b_bvCK-b!9e;Y>I-3NFe*G$D;?0L5b^UOigYEDNm z33E*HF;%?aDjRm5mj+D8T(=`I6Z-`>efUzdiei_135qZk7ATo=QFP826_px_-9#jc iFcl`mmHtu*{m)mlwjaCqsxK^!hDM|xFZ;6_0kH&^>QFEM diff --git a/mods/species/neoavians/icons/body.dmi b/mods/species/neoavians/icons/body.dmi index b83c9c64f8391b009fa92707009a73e020946e34..5e9915ed184a72b44d4515d6f9d9d519588337f9 100644 GIT binary patch delta 165 zcmV;W09yaB39$)~UICzyUlo5l3d1lA2H@E~g-Q0(*V?5dlnlugjHwmNpx7Xr_WDWM zpKk3rqk^>CEp?QO;_T+UJ;c!&8LQZ^a3vOzGmk-~aT zdyf<|n+5jz^g~aCl#9x7^r5Io8(xZvs}yN8p}aoVG13ICVpxqLJ;xMSJ{kXIt?H-l T^VJo(L53!^98r_A1_7!AQzTHX delta 164 zcmV;V09*gD39t!}UICwxUlo5n3d1lA1>o5}g-Q0(zqLzA2pO6y7=snt;8-Aw=K4w6 zp1XelbHQc-)8%I8xZi#mdg SS2yWYhDPbg^hUD>0jdLVd`d_F diff --git a/mods/species/neoavians/icons/body_add.dmi b/mods/species/neoavians/icons/body_add.dmi index 56c31a46a9af380cb31d670c31a4c7acea2fa3cb..bd52c9a0b8d7cff5da3ec8c88c252e23d562213b 100644 GIT binary patch delta 165 zcmV;W09yaL3A+i9UICzyUlo5l3d1lA2H@E~g-Q0(*V?5dlnlugjHwmNpx7Xr_WDWM zpKk3rqk^>CEp?QO;_T+UJ;c!&8LQZ^a3vOzGmk-~aT zdyf<|n+5jz^g~aCl#9x7^r5Io8(xZvs}yN8p}aoVG13ICVpxqLJ;xMSJ{kXIt?H-l T^VJo(L53!^98r_A1_87KUo5}g-Q0(zqLzA2pO6y7=snt;8-Aw=K4w6 zp1XelbHQc-)8%I8xZi#mdg SS2yWYhDPbg^hUD>0ki{sOiE?| diff --git a/mods/species/neoavians/icons/body_raptor.dmi b/mods/species/neoavians/icons/body_raptor.dmi index 5ec0239386c858488166e82c7c49ccf4f775a2bf..fd339fb8f3ba0b24f79c5f7d4c668dd308f6ceb7 100644 GIT binary patch delta 165 zcmV;W09yZ_37`p(UICzyUlo5l3d1lA2H@E~g-Q0(*V?5dlnlugjHwmNpx7Xr_WDWM zpKk3rqk^>CEp?QO;_T+UJ;c!&8LQZ^a3vOzGmk-~aT zdyf<|n+5jz^g~aCl#9x7^r5Io8(xZvs}yN8p}aoVG13ICVpxqLJ;xMSJ{kXIt?H-l T^VJo(L53!^98r_A1_7A^JvvZ( delta 164 zcmV;V09*f{37-j&UICwxUlo5n3d1lA1>o5}g-Q0(zqLzA2pO6y7=snt;8-Aw=K4w6 zp1XelbHQc-)8%I8xZi#mdg SS2yWYhDPbg^hUD>0ht3@v`Q5K diff --git a/mods/species/neoavians/icons/body_raptor_add.dmi b/mods/species/neoavians/icons/body_raptor_add.dmi index e1f3697bdb7d736fbbe203eadea5db0985c1fcde..5294c1e3e1c6423b785afb05c28bf410622e2e0c 100644 GIT binary patch delta 165 zcmV;W09ya4391Q@UICzyUlo5l3d1lA2H@E~g-Q0(*V?5dlnlugjHwmNpx7Xr_WDWM zpKk3rqk^>CEp?QO;_T+UJ;c!&8LQZ^a3vOzGmk-~aT zdyf<|n+5jz^g~aCl#9x7^r5Io8(xZvs}yN8p}aoVG13ICVpxqLJ;xMSJ{kXIt?H-l T^VJo(L53!^98r_A1_7f3N*+*| delta 164 zcmV;V09*g638@K?UICwxUlo5n3d1lA1>o5}g-Q0(zqLzA2pO6y7=snt;8-Aw=K4w6 zp1XelbHQc-)8%I8xZi#mdg SS2yWYhDPbg^hUD>0iy$Fgi132 diff --git a/mods/species/neoavians/icons/markings.dmi b/mods/species/neoavians/icons/markings.dmi index 9febe1a0ad7a8fc63804fa604fec84cd778ebf80..68489bb750f3dc8d8639ae170bf32e3c2aa62885 100644 GIT binary patch delta 903 zcmV;219<%O20001>1Oos70D0kh9+4p_9ymBS zCMG7pz`(4jz5@UN00DGTPE!Ct=GbNc004@SXia~Ki!&v&s2HS&i!-e#F*g;&HbhmV zo0yV9P+@syUV405YGO$S&>5tuCd&NOL?Vm@DZ*!(vVyCh3plUPOWMt`Nba6imoyD00A4EK12}5OE-rVn?mWWC+gSNe)JM z%+P;7z+fUl{)$ZfyJ}_8yOVQ@V}*qBKHQ-1-Mz2wwCLVD0D>U?Cu-$Wto%_b4A%L{ zX2W7M6aT~~BY(D!xxs#?-Df%!`=D%rHEh`6237Bj>lylGhT<(x#$1O|>L*6sF`gg@ zf*=UujX~!#`8C0Pu1j(9XU~7tl3424uw8$F;ciFG6y& zRwY(3TO|mBAPC~)QunbcDakI^SwVZrbbaBfy1xB0%9VC$FqWe}ldI?>2juTpc*cL& z`^~)Ib9`%txr}><;ax7};0RPFcvb^^P47EXW`%ZWV?!gxr#-o|8eb<4(kZA&ukofH zW2m@$v6V|HylDAoIB~|44%$+({$MwFi)wI`vbkN0t=$jV1FkoC{Oh5BtWK{o1_Qo! zFS&R{ptLM3yh_DWaSjVQpIWFv82+yLqjT#syNSn8Fted@%yB)2?=1j0eX+0hP zRHV!hzwuzkhct%*KhTZ=aMeUR$=X{QHVYpt7VQ`ydTIh)h}JZbAMp{W`ig&Dzj3Oy zOh@O_$4U*I)G42}1@iQIz@MIWW8#QUYg?lZN=|EAGpX2*Ac%M2LD!c;y&**8r(Y*4 zoImScvO355v=IJqy5zeMNziqEEwP?XuueM;=lI}_*pdLdz@S|R=L+f0eS&p&H05qb z>uF~tSfae1j(;k0W{BT-w&FWOx)XsP=sp0hn&?+qdrQM^;e(~39Rn<%nm`w#bzS5~ d5ClO~&Oh6smPxQQ@ihPd002ovPDHLkV1koxsQUl_ delta 1042 zcmV+t1nv9k2lNObiBL{Q4GJ0x0000DNk~Le0002M0002M1Oos70HE@5G?5`G9wsIx zI5;@Kz`($o zoevT6ZxQoVCeLe1K2RH59b0^F#6Vox8(SE5_vK#e?nxp>Ah>fldfd?9GAVkkIa7s! zJ(YZ8IejNCL=uVtMgy8%HYFjYd~-np*}4NW=zTDtYoe)Igp6CWA&)9S(SrNc^f!Ob zk01zwAPDkblB%lAHMVSOG4}w}#&qBj0W$^S&SNY(4Iy0naKg3shA;Q}@JQ072m}u< zqGymyQZE?%^!GL^dae6&g@HGR->5m0P%uci3SsQ0g~%k^ZYJD2jBa}{B(Vhpauu`s zdjJy1_6?aqAAQfnLTDNR9QT%I4yt8{V>O@Y^-5`AP9mW z2!iBP!wnm>QbxX4oFWU|&p=t6+d!Q5=^wA5ya~PnMFqFF(|ZRb8x@2Zd6%<54se#emgGsfJeVuvY2;Zg9Zg>Qf>SB14J&S+H83es& z!ow6Kq{p5`6b-a4lapJlR~8S;2)2F@Be+eCkd=z!fe1yB>gXeaAc%wq%Zf|2qzM!Y zO4BlJT_%$e)NV34gnD0ac-RL$ptso!tXB~lWU~txopkH=rx@x{AL^-Na}Ez~2lOZ# zw!JSY)X^Aft6QrO`vhp`K7oI_-WhS{5Gqq=^3nr3Y*mR@Oakc8f66>KDbSY9;S!s+ zG632-m=KP7AAF(SA_V?L>nj5oZ54GDoArq`=$6N5VZ3FJ(R5n985 z#Q9aC8I^llP^J0xYmFcXf*=Tj{A97#qt`>vgmjCubc+Ua-{Tw>!5~JG$G!&I9z@(Z zgzDU%rCW43pYe~{<1Oa@0|sqjz~|c>q2**=$VTZl^CJj?AjppS0p#wSBoTrU^#A|> M07*qoM6N<$f``k~JOBUy diff --git a/mods/species/serpentid/icons/body_green.dmi b/mods/species/serpentid/icons/body_green.dmi index d939879615d2edcae035a3baa0fe366c085be8de..97c96f522fc02ed2a3f340b8106597ee4a9d7a74 100644 GIT binary patch delta 153 zcmV;K0A~N(5!(@vSOKMxStfro@MwsZ`sE`?v#ft-cJ`ank*5 zgeP(iDeAL6?K)7e;0kTW@c@c2cq-NDAQxM3lMNfoYXiy!&eZ}nvt6<3{g+xq6dSV9 z3Bp7en};+{2zpK-3VIjxf>H^^W=^RH!bI4eF#o3r?ax=VdYJmpPTmLt^_}6-u6Uud H2LaUwja^DU delta 154 zcmV;L0A>H%5!?}wSOKPyStfr%hUOKF!HR82Y>?IV^&5BTRI2U7ecXY#R^NtknstAl z;E7aXPWq}ZhYr*$Iu84BK7k4tecYe2b3rCOjCvKv-?{8FokA`@(K zf-n(A<{`}!f}V0rg5DLqpj1MUS#oAUmo@MwsZ`sE`?v#ft-cJ`ank*5 zgeP(iDeAL6?K)7e;0kTW@c@c2cq-NDAQxM3lMNfoYXiy!&eZ}nvt6<3{g+xq6dSV9 z3Bp7en};+{2zpK-3VIjxf>H^^W=^RH!bI4eF#o3r?ax=VdYJmpPTmLt^_}6-u6Uud H3IPKMGLT5x delta 154 zcmV;L0A>G-5{(j&TLGq#Tqb`)hUOKF!HR82Y>?IV^&5BTRI2U7ecXY#R^NtknstAl z;E7aXPWq}ZhYr*$Iu84BK7k4tecYe2b3rCOjCvKv-?{8FokA`@(K zf-n(A<{`}!f}V0rg5DLqpj1MUS#oAUm@;>0tMID@Ev$*w6dP_Hl)?eu;7*tzZ5~VRV;{PK`IOA u1k{{T5gZ_qu}nq?_4OZwxvp}YeEdhXrk}dcSKk@Dh9;6A?iXRQK6ANX4eTZSz*^t7}zTDeGNAJS?jyTG1Lzf`c@I3l5OTNG1zl>+3U8!7AkmWBy0Ark}dcS63rXhDHgeYym2<{tE=9Mn10q diff --git a/mods/species/utility_frames/icons/markings.dmi b/mods/species/utility_frames/icons/markings.dmi index b824b5efc47414639d65a1b5f4cd225a1a6e5378..9867444ff91f1eb0134cca28008e61c936972c74 100644 GIT binary patch literal 857 zcmV-f1E&0mP)005u_0{{R3dEt5<0000RP)t-sz`(%& z|Np6}snOBVgM))xTU#+PF&-Wsz`(#wQ;9SH0004WQchCV=-0C=2@&@m3eFboCIIXOkt?g$Di3u=Wr&?}%6o5oUTD#xYQCxw9tk?nu! zeGe|psX4cusV}X5B1a0NIhw;}tJOjvE|qM#;RzMurnO1kU z4_x!^>taG4uThvL{I6Y@Js{_L2y>r*-JykC+grW`_~}a1boKjjFPzO@zjaJUnE(I+ zM@d9MRA_X9{-{R7xo$!uA6XVsQ72dR*m2yAD~5Tt*y~lrh67&nWN0(b_0=6VND56fNkbUfWsRQ@8=!@;lZjHY-=sq*LjypIf)rbyefMX^%LK)cn}GazcjLYC2oH4J=#yf~&m6 z8m)yYYebDf454nTj8%8#V|A78#`ioZ(1mRFg9`JlX!d{PhuLHH j^Ur=8EeL`jd^Udo$>cX(=V=-0C=30lFbf+Fc5^#?Nc;x*7$ezVjzZtyaFk7Z8xcuY!`ifLF35-dqWtQjVm4PG<$cHIhnQ;uwSI(gnDQq6AqBr5M3C(0a}+bVQkkn&GY;c zNmI3&x?mR0=c=rW&r7@k=O&_qdJ%>%5sDNj^P<5KK1i)(zk65!{OY`raq#ev7){SE_HNAR9smsvmCe zk;tbC%8)~z6k@o99#)?J@kk$Nd{>3#ANlV5Ex+(Rn?~bnH!_8kpkwfSMNd5`n6jg~ ztlUUjpCHfoQ_wI8%m)DY`8K8T#F9|&O46aX*paJwW6YY~&P++;BpcF%JS&0(wWYT+ zef+qj&s^}S3KC2#y`?7nT6VRh@#uGu-tpd1kT5-dsNitzhW$KL&u}a<4 z#PJ2UH@EJzHuG#KSDq2kKfjFKS!K!{JFg;>Y!)+jsjBa@pUfLeNITnIvFKEJ62xmZ3zZVSkdmTXiUI#Sx zdjJ3cE{_xDEvlbe^M-N$l{U=dx}7O+$PUcDO%Ag55kQYOT%~OMtcv=Spf6hLA2A0b zpJ}TV4IiWGvByd;0{qF+N^}W9ESb_>NtWJvv8$pg3c)3xG^2I}ePq18SnVz8V0bZ% zZf=U66-!!QtRCv?gJF6~Z>vXIU##}^^}$fVJC)`&adgs3sY6W+00000@Cvp;-`>&h zm2SiOga!0L5={A8w-@?~8KNn(fHHq!c?(GxG~Z!@$nQ%(BTQ=Bg#AnJz;-S8=_@4w z00000UU*@G)eZRjsO|4SbYvyuvvH#I!svQs&-RG>JKOfspZhz$18?zrjp(s?%y-}| zey!CzJHOs3d1lAMQ8gfOtP20)-ENXWJrF&m|C#}i4C%8e?Lh(bSlwy zFB}~SRGWMI=myjDoqhplO3~cR^>EbcO}^k-E@!O}C}8=PTwH-QR%{*5l~$fOZ$ny* z>}J^V=|@c>iY>b61u_xFc7h;~Nhr2sN<|!CzJJj@3d1lA1>o5}g-Q0(zqLzA2pO6y7=sntkXRs#=K4w6p;L)A zJ^1txs5Z~G>j%@kdi@3}3A1^a`{}IJl03&P+^$+hNFnk!6m|^TSdn!!S6cZ*Wna>2 zBsar8UwDYDUJFDMf+vJ(VBnM9Et5m`_sViDZ&`GGLyLlnhG1^=nqv_tdx>IxQN OhDP1nAUd;A0pA9fSxLhH diff --git a/mods/species/vox/icons/body/improvised_cyberlimbs.dmi b/mods/species/vox/icons/body/improvised_cyberlimbs.dmi index 5fde28f9b19bd40aee8af4e9fb0b998300f77902..697b248d4ee443f9ca0d53cbf8fc2433ce9d05aa 100644 GIT binary patch delta 159 zcmV;Q0AT;14xkQ@c7Kt*3d1lAglGFHOtP2$tzAk&$&kE)F|}d|5*uXGzJ8K+=v1QZ z4nExpt~U4f(G8~QJN*LAl%lzr>*1)?n|#65T+Uh{P{8svxwrzWtk^o9E3G_n-j1{y z+0C%&(~p`&6kBxB3&KPg+X;doOh%0<6+xv4LvZ`=2Tl}ssS_tc{##g^c4$7UE)b-K NCZDhD|FZ}I7zP`iO+I6h-f2U)NoRA|B=|ltN=$&<4^lUtir0I}LM7 z;Fo^_sm-(P`oT1>UcZ4#!fYPqemZNlB+qecZda`$q!9Vr6m|?-S&?-#S6cZ*WgpUN zBsareUwDYDUJF9;JcvJ(VBm`sg`ELbUG5!~_lfiUGm#S=&c|Eb!vL-YCS3Ke&T NM)&%^)w2iz7zSlyNAUmv diff --git a/mods/species/vox/icons/body/primalis_cyberlimbs.dmi b/mods/species/vox/icons/body/primalis_cyberlimbs.dmi index 4dd51b30efb51e494710466341a83e96b3b8dddb..9472d8aba8dbeaddbdef93ee93076ee054cae6b7 100644 GIT binary patch delta 159 zcmV;Q0AT;W4!;hNYJZWt3d1lAMQ8gfOtP20)-ENXWJrF&m|C#}i4C%8e?Lh(bSlwy zFB}~SRGWMI=myjDoqhplO3~cR^>EbcO}^k-E@!O}C}8=PTwH-QR%{*5l~$fOZ$ny* z>}J^V=|@c>iY>b61u_xFc7h;~Nhr2sN<|o5}g-Q0(zqLzA2pO6y7=sntkXRs#=K4w6p;L)A zJ^1txs5Z~G>j%@kdi@3}3A1^a`{}IJl03&P+^$+hNFnk!6m|^TSdn!!S6cZ*Wna>2 zBsar8UwDYDUJFDMf+vJ(VBnM9Et5m`_sViDZ&`GGLyLlnhG1^=nqv_tdx>IxQN NhDP1nAUd)ALIy0uNtFNq diff --git a/mods/species/vox/icons/body/servitor/body.dmi b/mods/species/vox/icons/body/servitor/body.dmi index 5f3c67d504e266ee088a485ad97e2cfda555b4db..8c4d0df41785f58ea98714d024220486d4be28c4 100644 GIT binary patch delta 188 zcmV;t07L(s5uOo{SbwH^R9JLGWpiV4X>fFDZ*Bkpc$|&V%?iRW3)0*Y*FV&%e(XN4e*+56kaY{O-U_n@0hb4^R#wXZ delta 187 zcmV;s07UfFDZ*Bkpc$|&VJqp7x3GL2YD6|pa| zQ&eJUt7-{VTVwB~K{0k>Fu%F?+pCNNOyfJw#M*kfUyL3aba1F+uy7!W8VE3vOtxI$te zmp_?k;Oro1(K#>`Wyl^s$t9*=*SIz_;}LMRo3z=Ww;P?2W1{SmGH!5Eym=BC-^cKb z=~z7b1|H$ig9@mQ$r(5uIC~N;tgk*{s&&w7#max_DI1p?u;-Kc`FPB8&e|4HlN*6+ zbb`KHbzrIZ4&M3}e{n--Ey8x~&Q(2a5QwkX3}$E(lC?5vXe!Hq@cc4OI6gBoNQ-Qb zEa&BJk8bo3u8iYR5ck&9=Phubsy05ti?@G>K1=Ls_%#$_@s7gvwS>S!eq0Up+ewX9 z6n~B36<^Yt=?mr2_AbRdo%Gmk%nUP-66#(xf9mfQ>_u|8kHx}3ca$b19?iyrIMldA z>`y&v;|Fuu@hVmsfqsXo=QRbzQBPm~1n)TgIPh`dWUR_KIZfyPNm^yhZ z0>QM*bjf2L7GClQKE59ElHZlG{Ltv5U+B?S|9VB!EQrf@q;9Ih8eSyNNv`f{v^o%6 zjSN?45puhb5%$I7nEC|l_VVI4_`l~D-TaQU_9Q9kioSjd#q}4&@+pK$;_B{w-C1QL z0p4CCsHo8F)z~ZJRxScQap*+`Zq!@jP39&2V@aRyTB} zu?ne;?HSBS#z@M;_S*Qe;yLZoW5NHf*#FMx&&g6b?>XSk6xfK0dODrfQp$tFOU{?| zH(M#c934VzY>wwCDLJx74Hn_f?B?_KFqkdo_z{sPslA!&_*5{0-Pd;`)fTb1C1-Z7 z`+LEknFdw~8T%2V6%`XlV0Etr4kATyYFh2-k(Q&LiU5zbFMctlZeI5)@gn8&M-Y!2i&Fg8Hmih7#oj= z!(jDG+@hjTC&wIyNmoM`i+ZEIv)ryV$KKB$g;*Z+uOhj{U~iXG=gsW9opq$Hvm z&TM_}bocAJ3-4970+!gc-KG;450dCiOaka~UBl0!YMQ#k%t(4+Wl@n$S$GjSEfbiP zc|WpNsD?W?x8A+5GIG2Yr7?D9a$Y!Slz9R`s^hHmp8@;-%JnZS|G2AOCFL`plduv+L7nm^5-0Iz>{jvEPBUjt zC_kpLp-O?-H z@0b(yNdt@c+Tg9=*6i*XReD;(T)==hC6+q#)o!j{_Tb9%lH@KU>I%ClQ+!=xLc~)lc}Pdd$Pc#RL>QZ+G@(J)Y-Kvo-0@~0RfZ@QO5HrXrPz8aoeGl z#>~sdJIdcz4!7ac(n%bPsHMQ6|Z6|J#77FquJ!SIGNFkWR28`;E7so0#p0>c#_SHAM>qEK_mwKq9&(qKePv~G zU8E^tbEWRhVJefAg)Otl_x_D*F-1LSg}YL{NbILC9Yga2I64fiF^t<<6bOexadP@- zw6ZdgV=2ITNZ1G4`3b@;UxF3T=z+GuSAavSYwL?9Xgbl3Qo8tO#C}wQ>Q674Bbbx@ zrKp<%H0M`?fWlZXuxVD7u;tIH^0cbwM~f;@==MGK<)*HPSeLR>Uoj}MaFoJ4?mAE841*vYdrGiVi;++KKq>E8 z{_sXjn_AfW@&^bZe<%ox5MUvss%X_=sQqQxl`jkI5-Yu5J@G)FY@xZ#vGN@wVq6Is zp|d*#u&#;oFJlVyMl`tVXm7Gs^gawmzOA1Ni0p$Y`bHq>r;RvGDjyjrnsdgeJyc9V8T`6i9%TriqOhTvOJ cywS&;W1u<3l)YP7z+WZE%-9k}HFAym4OxB*H~;_u literal 3423 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 LT!doJc*On-UB~we diff --git a/mods/species/vox/icons/body/soldier/body.dmi b/mods/species/vox/icons/body/soldier/body.dmi index 500789d05fa4cfcb824871b5d6545ae59621f95e..c77e6ab97ac7fb9042ceb94f5967eeb8c235d11d 100644 GIT binary patch delta 2291 zcmV5Tz237Yg760{{R3=mU4sks&vKrg~IZbVOxyV{&P5bZKvH004NLjnT~t z!Y~X6@N@eVWxI=CS1+<5JGfUU)n-j0YauO)Z||lDPtxAGFJARoZV z$DmH?xYlkUnbH%V4MH)>gAA{@IE!x*V)T(~$KCgcRHWrX|lfwj~000OE zNklW z+sPSc#tTUf5sW$9a5U|w;3|75D10e@THVWW9<+>B7%>%myF-NXkyCT{4X{Z&DRjy;C)xYvh&vF4BW zNpucrxLMZfA$0obwZ?S|!;V3LF+yn?=uQRA0 z{aiu;U(NURgbISb`{{abrqKzEC)w+a)-_+_x?6|uDskKh&QmABJVIT6q>cka$BF9j zX}*1P0eGceKibH`|{@wFt@XPvZ^7;UdK1qIH`*y2oD#-QR`J-CBh0mGy|U zMqu`l)=1@BxZEAjGI<<-Cw1jp$LOGo@(+88zlSNIGt3ExPHn=chd~76>2fiFG1H5Q zpMRuoSXVD<`ojZ?+qWi)nO>xuyodXU>BU-vbiYUO;{INoHq!h}REz7_25yAR19>@x zUm4r-B8@_?H`-SQ-CajtO89I!&*i16fJ87_@w<1%y5?ZW!|XtR_UVM%{W5d?MhOWb zO!XqS--t(@TKBSe=-vRzHSw;_-XC@NZME=*2z_zrPwa}fc1l2@K3py&zcp^uDB%;F zbdf|-f=ag4fQN3S$!^RwOo-;qnyiNn;{^@QUocWP{DCPbC@3f>C@3g=0OGu|T7K~Z zK=)&b(dG9~@nm{`&F`-Y>cSongIoKd5tJX)NcH3rH*t-Tdh-UnW+o^q6V?r%LvhyxH6%5S)mPouVQ`lnF-=d*br5di1pPT z{Z?M4QEWHS7c(j-C@3f>C@3f>DEtD5ge|-RB|?ddO_WuC)A$0MqNE;*w|FnBfc0XB zs~+Mbpkju5ftGRo-Zx+i60t|nCTcD2VBF*G^E}*XJoE>6$gi&<3^x)zi`vi=w2DiA z{p!Um3JMB;3ZDR}ww|d{MkYZpFfnA2ko)v7bBqnu_x!)cYKxWMWAXo zFYwNmWa(s9{-x~9plhD4H*D2-C2*mse9`w4$<@&Coxqg!`H<;&X9^<#l|-sDLD zw!Fok^BEbNz_zP`SRly-h2=RDPktt5JS6RiXT9lwVC{Trs~I_&sEP zHN3wm?^n~Pzv<%sUi3Ewel<1yP45o=rgtD_{-!uTDEOO-3raqWw!!>OVSbVMn{xTV zCjCvV5%V{N`9P4yo0 zCx!V%=5Kn)54JK!di{udc=WsJ77}8AQEbb=BH{{p?p{7DabubUAve^T%n>ABxc zmrrw^u(n_qu~;RY#4ybc(2EK4Cq3wYy*cYc=1&Ur;y(AgX%(-(i+=zX)WKBm5uN+NBzE?5(z`%d_)XL`^7Q&GE?=ORgF z3$~~GNy671UO)L}=W{}0-kYOdKJDQ3s5JDVbolE{KRJZcZ{KgxBc2_zpT~hY?a!%& z*Q56OMno3o^s_#8@7w+M9dz;GE|{OzlLo;&TTcovnruBP;hp0d{sjRS$3*|aMZEw3 N002ovPDHLkV1gI?lj8sY delta 2102 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 VFT+QuYVh|1IBMf)UGz5$^%tbQyPp66 From d933beca987b3e926563fe64cbdaaa83720bcaf2 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Thu, 19 Jan 2023 15:35:55 -0600 Subject: [PATCH 040/239] Fix runtime in throw_at_random --- code/_helpers/atom_movables.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/_helpers/atom_movables.dm b/code/_helpers/atom_movables.dm index 3d47bd768f1..87ed5bc08a1 100644 --- a/code/_helpers/atom_movables.dm +++ b/code/_helpers/atom_movables.dm @@ -28,12 +28,13 @@ return locate(final_x, final_y, T.z) /atom/movable/proc/throw_at_random(var/include_own_turf, var/maxrange, var/speed) - var/list/turfs = RANGE_TURFS(src, maxrange) + var/turf/own_turf = get_turf(src) + var/list/turfs = RANGE_TURFS(own_turf, maxrange) if(!maxrange) maxrange = 1 if(!include_own_turf) - turfs -= get_turf(src) + turfs -= own_turf src.throw_at(pick(turfs), maxrange, speed) /atom/movable/proc/do_simple_ranged_interaction(var/mob/user) From 4c763e39f1a31925b9e07a0d0f7affe0e0fd8653 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Thu, 19 Jan 2023 09:26:06 -0600 Subject: [PATCH 041/239] Add airlock tags for cycling to external airmix --- .../machinery/embedded_controller/airlock_controllers.dm | 4 ++++ code/game/machinery/embedded_controller/airlock_program.dm | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index c13901f9d71..346dfab73c3 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -13,6 +13,8 @@ var/tag_air_alarm var/list/dummy_terminals = list() // Internal use only; set id_tag on the dummy terminal to be added. var/cycle_to_external_air = 0 + var/tag_pump_out_external + var/tag_pump_out_internal /obj/machinery/embedded_controller/radio/airlock/modify_mapped_vars(map_hash) ..() @@ -23,6 +25,8 @@ ADJUST_TAG_VAR(tag_exterior_sensor, map_hash) ADJUST_TAG_VAR(tag_interior_sensor, map_hash) ADJUST_TAG_VAR(tag_air_alarm, map_hash) + ADJUST_TAG_VAR(tag_pump_out_external, map_hash) + ADJUST_TAG_VAR(tag_pump_out_internal, map_hash) /obj/machinery/embedded_controller/radio/airlock/Destroy() for(var/obj/machinery/dummy_airlock_controller/terminal in dummy_terminals) diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm index 5ebc5f34104..12d1a7aa7e4 100644 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ b/code/game/machinery/embedded_controller/airlock_program.dm @@ -48,11 +48,11 @@ /datum/computer/file/embedded_program/airlock/reset_id_tags(base_tag) . = ..() - if(cycle_to_external_air) - tag_pump_out_external = "[id_tag]_pump_out_external" - tag_pump_out_internal = "[id_tag]_pump_out_internal" if(istype(master, /obj/machinery/embedded_controller/radio/airlock)) //if our controller is an airlock controller than we can auto-init our tags var/obj/machinery/embedded_controller/radio/airlock/controller = master + if(cycle_to_external_air) + tag_pump_out_external = SET_AIRLOCK_TAG(controller.tag_pump_out_external, "[id_tag]_pump_out_external") + tag_pump_out_internal = SET_AIRLOCK_TAG(controller.tag_pump_out_internal, "[id_tag]_pump_out_internal") tag_exterior_door = SET_AIRLOCK_TAG(controller.tag_exterior_door, "[id_tag]_outer") tag_interior_door = SET_AIRLOCK_TAG(controller.tag_interior_door, "[id_tag]_inner") tag_airpump = SET_AIRLOCK_TAG(controller.tag_airpump, "[id_tag]_pump") From 88ced833042509626c541180c742693b20b07683 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Tue, 17 Jan 2023 04:07:01 -0600 Subject: [PATCH 042/239] Fix trailing space on ore chunk --- code/modules/materials/materials_ore.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/materials/materials_ore.dm b/code/modules/materials/materials_ore.dm index 6ed92e443d3..0e2aa74ae19 100644 --- a/code/modules/materials/materials_ore.dm +++ b/code/modules/materials/materials_ore.dm @@ -87,7 +87,7 @@ /obj/item/stack/material/ore/update_strings() . = ..() - SetName("[(material.ore_name ? material.ore_name : "[material.name] chunk")] [(amount > 1? "pile" : "")]") + SetName("[(material.ore_name ? material.ore_name : "[material.name] chunk")][(amount > 1? " pile" : "")]") desc = material.ore_desc ? material.ore_desc : "A lump of ore." /obj/item/stack/material/ore/get_recipes() From fb4c102a03c246cec23a4cb207949cb76f9a9411 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Fri, 20 Jan 2023 15:55:56 -0600 Subject: [PATCH 043/239] Apply suggestions from code review --- .../objects/structures/crates_lockers/closets/__closet.dm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets/__closet.dm b/code/game/objects/structures/crates_lockers/closets/__closet.dm index c7309603da7..7064ec85e06 100644 --- a/code/game/objects/structures/crates_lockers/closets/__closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/__closet.dm @@ -50,7 +50,7 @@ var/global/list/closets = list() /obj/structure/closet/LateInitialize(mapload, ...) var/list/will_contain = WillContain() if(will_contain) - create_objects_in_loc(opened && loc || src, will_contain) + create_objects_in_loc(opened ? loc : src, will_contain) if(!opened && mapload) // if closed and it's the map loading phase, relevant items at the crate's loc are put in the contents store_contents() @@ -419,9 +419,7 @@ var/global/list/closets = list() open() /obj/structure/closet/onDropInto(var/atom/movable/AM) - if(opened) - return loc - return null + return opened ? loc : null // If we use the /obj/structure/closet/proc/togglelock variant BYOND asks the user to select an input for id_card, which is then mostly irrelevant. /obj/structure/closet/proc/togglelock_verb() From 43147b10c047f64d1ee1ace4f4cce77befb56920 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Fri, 20 Jan 2023 23:12:58 -0600 Subject: [PATCH 044/239] Fix bald (not short) hair with BLOCK_HEAD_HAIR --- code/modules/mob/living/carbon/human/update_icons.dm | 8 -------- 1 file changed, 8 deletions(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 156402c1e87..ea4d975479b 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -448,14 +448,6 @@ var/global/list/damage_icon_parts = list() queue_icon_update() return - //masks and helmets can obscure our hair. - for(var/slot in global.airtight_slots) - var/obj/item/gear = get_equipped_item(slot) - if(gear && (gear.flags_inv & BLOCK_ALL_HAIR)) - if(update_icons) - queue_icon_update() - return - overlays_standing[HO_HAIR_LAYER] = head_organ.get_hair_icon() if(update_icons) queue_icon_update() From 073c7187d28b7b9d63805b7b2f92af0047e9282a Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Tue, 17 Jan 2023 04:01:58 -0600 Subject: [PATCH 045/239] Improve radiation-bombed exoplanet generation --- .../planet_themes/radiation_bombing.dm | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/code/modules/overmap/exoplanets/planet_themes/radiation_bombing.dm b/code/modules/overmap/exoplanets/planet_themes/radiation_bombing.dm index 88d2ffe614a..8b3f11b65b5 100644 --- a/code/modules/overmap/exoplanets/planet_themes/radiation_bombing.dm +++ b/code/modules/overmap/exoplanets/planet_themes/radiation_bombing.dm @@ -9,19 +9,20 @@ /datum/exoplanet_theme/radiation_bombing/get_sensor_data() return "Hotspots of radiation detected." -/datum/exoplanet_theme/radiation_bombing/after_map_generation(obj/effect/overmap/visitable/sector/exoplanet/E) +/datum/exoplanet_theme/radiation_bombing/after_map_generation(obj/effect/overmap/visitable/sector/exoplanet/our_exoplanet) var/radiation_power = rand(10, 37.5) - var/num_craters = round(min(0.5, rand()) * 0.02 * E.maxx * E.maxy) + var/num_craters = round(min(0.5, rand()) * 0.02 * our_exoplanet.maxx * our_exoplanet.maxy) + var/area_turfs = get_area_turfs(our_exoplanet.planetary_area, list(/proc/not_turf_contains_dense_objects)) for(var/i = 1 to num_craters) - var/turf/simulated/T = pick_area_turf(E.planetary_area, list(/proc/not_turf_contains_dense_objects)) - if(!T) // ran out of space somehow + var/turf/simulated/crater_center = pick_n_take(area_turfs) + if(!crater_center) // ran out of space somehow return - new/obj/structure/rubble/war(T) - var/datum/radiation_source/S = new(T, radiation_power, FALSE) - S.range = 4 - SSradiation.add_source(S) - T.set_light(2, 0.4, PIPE_COLOR_GREEN) - for(var/turf/exterior/crater in circlerangeturfs(T, 3)) + new/obj/structure/rubble/war(crater_center) + var/datum/radiation_source/source = new(crater_center, radiation_power, FALSE) + source.range = 4 + SSradiation.add_source(source) + crater_center.set_light(2, 0.4, PIPE_COLOR_GREEN) + for(var/turf/exterior/crater in circlerangeturfs(crater_center, 3)) if(prob(10)) new/obj/item/remains/xeno/charred(crater) crater.melt() From c91865684b4e3d372ba283246a011d1957efea5a Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Sun, 22 Jan 2023 00:45:22 +0000 Subject: [PATCH 046/239] Automatic changelog generation [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 4fcb19c5b66..906b3c891eb 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -131,12 +131,6 @@

PsyCommando updated:

  • Added some fairly bad wrapped package icons, and wrapped gifts icons.
- -

20 November 2022

-

PsyCommando updated:

-
    -
  • Fix disconnected pipes + blastdoors button on desperado/mercenary base.
  • -
From b6cb0a52b35048f91068ee5d83fb071ccdc4a365 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Mon, 16 Jan 2023 14:07:38 +1100 Subject: [PATCH 047/239] Wall icons are now generated/cached at runtime instead of entirely using overlays. Moved shine onto wall icon caching. Wall icon gen now caches much more aggressively and replicates a similar layering flow to the old code. Optimizing wall icon caching. --- code/game/turfs/exterior/exterior_wall.dm | 21 ++----- code/game/turfs/simulated/_wall_icon_cache.dm | 56 ++++++++++++++++++ code/game/turfs/simulated/wall_icon.dm | 38 +++--------- code/modules/mob/mob.dm | 1 + icons/turf/wall_texture.dmi | Bin 1635 -> 1727 bytes nebula.dme | 1 + 6 files changed, 71 insertions(+), 46 deletions(-) create mode 100644 code/game/turfs/simulated/_wall_icon_cache.dm diff --git a/code/game/turfs/exterior/exterior_wall.dm b/code/game/turfs/exterior/exterior_wall.dm index 2f03714a9cb..3e4e11d01d3 100644 --- a/code/game/turfs/exterior/exterior_wall.dm +++ b/code/game/turfs/exterior/exterior_wall.dm @@ -177,24 +177,11 @@ var/global/list/natural_walls = list() var/material_icon_base = material.icon_base_natural || 'icons/turf/walls/natural.dmi' var/base_color = paint_color ? paint_color : material.color + var/shine = (material?.reflectiveness > 0) ? clamp((material.reflectiveness * 0.01) * 255, 10, (0.6 * ReadHSV(RGBtoHSV(material.color))[3])) : 0 // patened formula based on color's Value (in HSV) - var/max_shine - var/shine - if(material?.reflectiveness > 0) - max_shine = 0.6 * ReadHSV(RGBtoHSV(material.color))[3] // patened formula based on color's Value (in HSV) - shine = clamp((material.reflectiveness * 0.01) * 255, 10, max_shine) - - var/image/I - for(var/i = 1 to 4) - var/apply_state = "[wall_connections[i]]" - I = image(material_icon_base, apply_state, dir = BITFLAG(i-1)) - I.color = base_color - add_overlay(I) - if(shine) - I = image(material_icon_base, "shine[wall_connections[i]]", dir = BITFLAG(i-1)) - I.appearance_flags |= RESET_ALPHA - I.alpha = shine - add_overlay(I) + icon = get_combined_wall_icon(wall_connections, null, material_icon_base, base_color, shine_value = shine) + icon_state = "" + color = null if(ore_overlay) add_overlay(ore_overlay) diff --git a/code/game/turfs/simulated/_wall_icon_cache.dm b/code/game/turfs/simulated/_wall_icon_cache.dm new file mode 100644 index 00000000000..909b44ddf82 --- /dev/null +++ b/code/game/turfs/simulated/_wall_icon_cache.dm @@ -0,0 +1,56 @@ +#define CACHE_BASE_MARKER 1 +#define CACHE_PAINT_MARKER 2 +#define CACHE_STRIPE_MARKER 3 +#define CACHE_EDGE_MARKER 4 +#define CACHE_SHINE_MARKER 5 + +var/global/list/cached_wall_icons = list() +/proc/_get_wall_subicon(var/material_icon_base, var/connections, var/color, var/state, var/alpha, var/cache_marker) + var/cache_key = jointext(list(cache_marker, material_icon_base, json_encode(connections), color), "-") + if(!global.cached_wall_icons[cache_key]) + var/icon/subicon = icon('icons/turf/wall_texture.dmi', "blank") + for(var/i = 1 to 4) + var/check_state = "[state][length(connections) >= i ? connections[i] : null]" + if(check_state_in_icon(check_state, material_icon_base)) + subicon.Blend(icon(material_icon_base, check_state, dir = BITFLAG(i-1)), ICON_OVERLAY) + if(color && color != COLOR_WHITE) + subicon.Blend(color, ICON_MULTIPLY) + if(!isnull(alpha)) + subicon += rgb(null, null, null, alpha) + global.cached_wall_icons[cache_key] = subicon + return global.cached_wall_icons[cache_key] + +/proc/get_combined_wall_icon(var/list/wall_connections, var/list/other_connections, var/material_icon_base, var/base_color, var/paint_color, var/stripe_color, var/edge_color, var/shine_value) + + var/cache_key = list(material_icon_base, json_encode(wall_connections), json_encode(other_connections)) + if(base_color) + cache_key += CACHE_BASE_MARKER + cache_key += base_color + if(paint_color) + cache_key += CACHE_PAINT_MARKER + cache_key += paint_color + if(stripe_color) + cache_key += CACHE_STRIPE_MARKER + cache_key += stripe_color + if(edge_color) + cache_key += CACHE_EDGE_MARKER + cache_key += edge_color + if(shine_value) + cache_key += CACHE_SHINE_MARKER + cache_key += shine_value + cache_key = jointext(cache_key, "-") + + if(!global.cached_wall_icons[cache_key]) + var/icon/wall_icon = icon(_get_wall_subicon(material_icon_base, wall_connections, base_color, cache_marker = CACHE_BASE_MARKER)) + if(paint_color) wall_icon.Blend(_get_wall_subicon(material_icon_base, wall_connections, paint_color, "paint", cache_marker = CACHE_PAINT_MARKER), ICON_OVERLAY) + if(stripe_color) wall_icon.Blend(_get_wall_subicon(material_icon_base, wall_connections, stripe_color, "stripes", cache_marker = CACHE_STRIPE_MARKER), ICON_OVERLAY) + if(edge_color) wall_icon.Blend(_get_wall_subicon(material_icon_base, other_connections, edge_color, "other", cache_marker = CACHE_EDGE_MARKER), ICON_OVERLAY) + if(shine_value) wall_icon.Blend(_get_wall_subicon(material_icon_base, other_connections, null, "shine", cache_marker = CACHE_SHINE_MARKER, alpha = shine_value), ICON_OVERLAY) + global.cached_wall_icons[cache_key] = wall_icon + return global.cached_wall_icons[cache_key] + +#undef CACHE_BASE_MARKER +#undef CACHE_PAINT_MARKER +#undef CACHE_STRIPE_MARKER +#undef CACHE_EDGE_MARKER +#undef CACHE_SHINE_MARKER \ No newline at end of file diff --git a/code/game/turfs/simulated/wall_icon.dm b/code/game/turfs/simulated/wall_icon.dm index 1a686e26afe..e16a4efca9f 100644 --- a/code/game/turfs/simulated/wall_icon.dm +++ b/code/game/turfs/simulated/wall_icon.dm @@ -123,28 +123,18 @@ other_connections = dirs_to_corner_states(other_dirs) var/material_icon_base = get_wall_icon() - var/image/I var/base_color = material.color if(!density) - I = image(material_icon_base, "fwall_open") - I.color = base_color - add_overlay(I) - return - - for(var/i = 1 to 4) - I = image(material_icon_base, "[wall_connections[i]]", dir = BITFLAG(i-1)) - I.color = base_color - add_overlay(I) - if(paint_color) - I = image(icon, "paint[wall_connections[i]]", dir = BITFLAG(i-1)) - I.color = paint_color - add_overlay(I) - if(stripe_color) - I = image(icon, "stripe[wall_connections[i]]", dir = BITFLAG(i-1)) - I.color = stripe_color - add_overlay(I) + icon = material_icon_base + icon_state = "fwall_open" + color = base_color + else + icon = get_combined_wall_icon(wall_connections, other_connections, material_icon_base, base_color, paint_color, stripe_color, (material.wall_flags & WALL_HAS_EDGES) && (stripe_color || base_color)) + icon_state = "" + color = null if(apply_reinf_overlay()) + var/image/I var/reinf_color = paint_color ? paint_color : reinf_material.color if(construction_stage != null && construction_stage < 6) I = image('icons/turf/walls/_construction_overlays.dmi', "[construction_stage]") @@ -154,18 +144,8 @@ if(reinf_material.use_reinf_state) I = image(reinf_material.icon_reinf, reinf_material.use_reinf_state) I.color = reinf_color - add_overlay(I) else - // Directional icon - for(var/i = 1 to 4) - I = image(reinf_material.icon_reinf, "[wall_connections[i]]", dir = BITFLAG(i-1)) - I.color = reinf_color - add_overlay(I) - - if(material.wall_flags & WALL_HAS_EDGES) - for(var/i = 1 to 4) - I = image(material_icon_base, "other[other_connections[i]]", dir = BITFLAG(i-1)) - I.color = stripe_color ? stripe_color : base_color + I = image(_get_wall_subicon(reinf_material.icon_reinf, wall_connections, reinf_color)) add_overlay(I) var/image/texture = material.get_wall_texture() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index c30496b0ebc..59135f826b3 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -57,6 +57,7 @@ QDEL_NULL_SCREEN(zone_sel) /mob/Initialize() + default_pixel_z = round(world.icon_size * 0.35) . = ..() if(ispath(skillset)) skillset = new skillset(src) diff --git a/icons/turf/wall_texture.dmi b/icons/turf/wall_texture.dmi index 265e997b93263d63a661abe5aace5d73f50a451c..8a8de81c25a9ffca28c5920929c15f07fd8d2048 100644 GIT binary patch delta 896 zcmV-`1AqME48IL5iBL{Q4GJ0x0000DNk~Le0000$0000W2m=5B0F^_Iwg3PE`cO<% zMZmzokt`$v|NpU1(E=6r2}tJv0004WQchC}3lS&4r1m2`J5NXm%mrh#x z43LpjKHw{}Or`{xvnY7hY-G=&<;+EH$decH8Kn8K6)+``W2?1(_!lfBUnlsexudY^ zi{vst0tCn*yo>r4gW@F=swAZ-ZID2jvgQQkC?5zFbOmu%f2>61DnV2=yrLS_YnT$~ zUNvjsG~l&e+tyJbs9TTv28p=`4IH{Ff(;urc8TD!CeoT(AZQjG0?E-rU9jdY2y5wM zcNm$_sR$|rpt7O_%m}BA_8kU#r?#sI?6#1Js($X-n}+{vvm<&~ zz)BwMlZE>a91L-n(-Mcet1{V;!$;t#6@p{xtPS8eoPd+3w9{wUaF(R!<@2is*`q$(Z(3UTeaJ@SUUOEw@Tif%9!nv3!qWgRd5`3EY5~ulbNhweN}>$Sj;CD`X?RFZhX-og6upJ6CS<i}P6+e#=|GQX06@`z6`s*GiRRg(XD^BB4Snd_kNyHhF~E#( z?L0S7G8hy#c!)Y3GL&IPkM!XqB(n^bzsZdhc4HKd(V~nov9XNP#v59|f9MG?Q6)GD zqAfTi+sVo?C44H=m>$RsW{NpW?wdV_Q0BS@KaVhv7?{rjF%~*vrSwJaqApg>B`g)W zjOD6$S1vZt@P0XCK4~bT&1RLVKuBVB4V7~UAu0*u}kyVVA$~+MQmcT zT($*$>o(~(xNqOF)9~)ne|DFIJ*drtz56oqA8oO@RJBm-7d~+CP^fcVgAVspYuc0} zN8y-4j;pttzzH}Br%r2U&a&|w-sc6rpmXt(+R8r0Vf`{(xhl#v*sAK)WQaTD8>f~d zP$AcESmSQWe|3x73I1?LAWK>9szsUx_nck2&jVMM58+WWfgj5vT|D7wpj}mEr!72t zPQnYTEAXZM>NRgf$tV04-o+AvYfuF7-mI9rAO5xDBcF6*l|H-s^M$Y9zW>k(=ckXC hV9}BizxW-g{Q-Pro%zl~kWv5u002ovPDHLkV1g?meQW># diff --git a/nebula.dme b/nebula.dme index 1e4ec8b35d5..200b0681c60 100644 --- a/nebula.dme +++ b/nebula.dme @@ -1363,6 +1363,7 @@ #include "code\game\turfs\flooring\flooring_shuttle.dm" #include "code\game\turfs\initialization\init.dm" #include "code\game\turfs\initialization\maintenance.dm" +#include "code\game\turfs\simulated\_wall_icon_cache.dm" #include "code\game\turfs\simulated\floor.dm" #include "code\game\turfs\simulated\floor_acts.dm" #include "code\game\turfs\simulated\floor_attackby.dm" From a7f2480637c128d4e95a19603c499ffa3c4ee244 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Tue, 17 Jan 2023 19:45:46 +1100 Subject: [PATCH 048/239] Removed redundant icon update from barren turfs. --- code/game/turfs/exterior/exterior_barren.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/game/turfs/exterior/exterior_barren.dm b/code/game/turfs/exterior/exterior_barren.dm index 5418b5331c6..56e21812f12 100644 --- a/code/game/turfs/exterior/exterior_barren.dm +++ b/code/game/turfs/exterior/exterior_barren.dm @@ -2,8 +2,9 @@ name = "ground" icon = 'icons/turf/exterior/barren.dmi' icon_edge_layer = EXT_EDGE_BARREN + var/decal_state -/turf/exterior/barren/on_update_icon() +/turf/exterior/barren/Initialize() . = ..() if(prob(20)) - add_overlay(image('icons/turf/flooring/decals.dmi', "asteroid[rand(0,9)]")) + decal_state = "asteroid[rand(0,9)]" From a2e0777d701bfaa17829f6e45e215718d9b3338b Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Tue, 17 Jan 2023 20:01:04 +1100 Subject: [PATCH 049/239] Cleaned up exterior turf icon update. --- code/game/turfs/exterior/exterior_barren.dm | 5 ++--- code/game/turfs/exterior/exterior_concrete.dm | 7 ++++--- code/game/turfs/exterior/exterior_seafloor.dm | 11 ++--------- code/game/turfs/exterior/exterior_wall.dm | 11 ++++++++++- code/modules/mob/mob.dm | 1 - 5 files changed, 18 insertions(+), 17 deletions(-) diff --git a/code/game/turfs/exterior/exterior_barren.dm b/code/game/turfs/exterior/exterior_barren.dm index 56e21812f12..795fa140df5 100644 --- a/code/game/turfs/exterior/exterior_barren.dm +++ b/code/game/turfs/exterior/exterior_barren.dm @@ -2,9 +2,8 @@ name = "ground" icon = 'icons/turf/exterior/barren.dmi' icon_edge_layer = EXT_EDGE_BARREN - var/decal_state /turf/exterior/barren/Initialize() - . = ..() if(prob(20)) - decal_state = "asteroid[rand(0,9)]" + LAZYADD(decals, image('icons/turf/flooring/decals.dmi', "asteroid[rand(0,9)]")) + . = ..() diff --git a/code/game/turfs/exterior/exterior_concrete.dm b/code/game/turfs/exterior/exterior_concrete.dm index 8f4eb268a5a..bd4879951e7 100644 --- a/code/game/turfs/exterior/exterior_concrete.dm +++ b/code/game/turfs/exterior/exterior_concrete.dm @@ -15,7 +15,7 @@ var/global/exterior_broken_states = icon_states('icons/turf/exterior/broken.dmi' desc = "A flat expanse of artificial stone-like artificial material." icon = 'icons/turf/exterior/concrete.dmi' diggable = FALSE - var/broken + var/broken var/burned /turf/exterior/concrete/flooded @@ -40,9 +40,9 @@ var/global/exterior_broken_states = icon_states('icons/turf/exterior/broken.dmi' name = "reinforced concrete" desc = "Stone-like artificial material. It has been reinforced with an unknown compound" -/turf/exterior/concrete/reinforced/on_update_icon() +/turf/exterior/concrete/reinforced/Initialize(ml) + LAZYDISTINCTADD(decals, "hexacrete") . = ..() - add_overlay("hexacrete") /turf/exterior/concrete/reinforced/damaged broken = TRUE @@ -50,3 +50,4 @@ var/global/exterior_broken_states = icon_states('icons/turf/exterior/broken.dmi' /turf/exterior/concrete/reinforced/road name = "asphalt" color = COLOR_GRAY40 + base_color = COLOR_GRAY40 diff --git a/code/game/turfs/exterior/exterior_seafloor.dm b/code/game/turfs/exterior/exterior_seafloor.dm index 07f84bb27aa..4ab69066acd 100644 --- a/code/game/turfs/exterior/exterior_seafloor.dm +++ b/code/game/turfs/exterior/exterior_seafloor.dm @@ -10,13 +10,6 @@ color = COLOR_LIQUID_WATER /turf/exterior/seafloor/Initialize() + if(prob(20)) + LAZYADD(decals, image("asteroid[rand(0,9)]", 'icons/turf/mining_decals.dmi')) . = ..() - color = null - if(isnull(detail_decal) && prob(20)) - detail_decal = "asteroid[rand(0,9)]" - update_icon() - -/turf/exterior/seafloor/on_update_icon() - . = ..() - if(detail_decal) - add_overlay(image(icon = 'icons/turf/mining_decals.dmi', icon_state = detail_decal)) diff --git a/code/game/turfs/exterior/exterior_wall.dm b/code/game/turfs/exterior/exterior_wall.dm index 3e4e11d01d3..59eb58b0b4e 100644 --- a/code/game/turfs/exterior/exterior_wall.dm +++ b/code/game/turfs/exterior/exterior_wall.dm @@ -19,6 +19,7 @@ var/global/list/natural_walls = list() var/decl/material/material var/decl/material/reinf_material var/floor_type = /turf/exterior/barren + var/static/list/exterior_wall_shine_cache = list() /turf/exterior/wall/examine(mob/user, distance, infix, suffix) . = ..() @@ -177,7 +178,15 @@ var/global/list/natural_walls = list() var/material_icon_base = material.icon_base_natural || 'icons/turf/walls/natural.dmi' var/base_color = paint_color ? paint_color : material.color - var/shine = (material?.reflectiveness > 0) ? clamp((material.reflectiveness * 0.01) * 255, 10, (0.6 * ReadHSV(RGBtoHSV(material.color))[3])) : 0 // patened formula based on color's Value (in HSV) + + var/shine = 0 + if(material?.reflectiveness > 0) + var/shine_cache_key = "[material.reflectiveness]-[material.color]" + shine = exterior_wall_shine_cache[shine_cache_key] + if(isnull(shine)) + // patented formula based on color's value (in HSV) + shine = clamp((material.reflectiveness * 0.01) * 255, 10, (0.6 * ReadHSV(RGBtoHSV(material.color))[3])) + exterior_wall_shine_cache[shine_cache_key] = shine icon = get_combined_wall_icon(wall_connections, null, material_icon_base, base_color, shine_value = shine) icon_state = "" diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 59135f826b3..c30496b0ebc 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -57,7 +57,6 @@ QDEL_NULL_SCREEN(zone_sel) /mob/Initialize() - default_pixel_z = round(world.icon_size * 0.35) . = ..() if(ispath(skillset)) skillset = new skillset(src) From b3d7cb5fe639af7597fcf8b4c260845a63d04164 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Sun, 22 Jan 2023 12:55:53 -0600 Subject: [PATCH 050/239] Fix \improper in UI titles --- code/_helpers/text.dm | 16 +++++++++------- code/datums/browser.dm | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index f8e903f1105..9c7761d2603 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -22,6 +22,12 @@ * Text sanitization */ +/** + * Strip out the special beyond characters for \proper and \improper + * from text that will be sent to the browser. + */ +#define strip_improper(input_text) replacetext(replacetext(input_text, "\proper", ""), "\improper", "") + //Used for preprocessing entered text //Added in an additional check to alert players if input is too long /proc/sanitize(input, max_length = MAX_MESSAGE_LEN, encode = TRUE, trim = TRUE, extra = TRUE, ascii_only = FALSE) @@ -35,6 +41,8 @@ return input = copytext_char(input, 1, max_length + 1) + input = strip_improper(input) + if(extra) input = replace_characters(input, list("\n"=" ","\t"=" ")) @@ -459,12 +467,6 @@ #define starts_with(string, substring) (copytext(string,1,1+length(substring)) == substring) -/** - * Strip out the special beyond characters for \proper and \improper - * from text that will be sent to the browser. - */ -#define strip_improper(input_text) replacetext(replacetext(input_text, "\proper", ""), "\improper", "") - /proc/pencode2html(t) t = replacetext(t, "\n", "
") t = replacetext(t, "\[center\]", "
") @@ -641,4 +643,4 @@ var/global/list/fullstop_alternatives = list(".", "!", "?") /proc/make_rainbow(var/msg) for(var/i = 1 to length(msg)) - . += "[copytext(msg, i, i+1)]" \ No newline at end of file + . += "[copytext(msg, i, i+1)]" diff --git a/code/datums/browser.dm b/code/datums/browser.dm index b05c176db78..d7a7977a0a2 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -49,7 +49,7 @@ add_stylesheet("common", common_stylesheet) /datum/browser/proc/set_title(ntitle) - title = replacetext(replacetext(ntitle,"\proper ",""),"\improper ","") + title = sanitize(ntitle) /datum/browser/proc/add_head_content(nhead_content) head_content = nhead_content From c1c6fcd4d1ab2b2c5e75d94b9aa25561b9d805d7 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Sun, 22 Jan 2023 12:56:09 -0600 Subject: [PATCH 051/239] Make close_uis faster during init --- code/controllers/subsystems/processing/nano.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/controllers/subsystems/processing/nano.dm b/code/controllers/subsystems/processing/nano.dm index 44b05e8326b..a7d531e8679 100644 --- a/code/controllers/subsystems/processing/nano.dm +++ b/code/controllers/subsystems/processing/nano.dm @@ -75,6 +75,9 @@ PROCESSING_SUBSYSTEM_DEF(nano) */ /datum/controller/subsystem/processing/nano/proc/close_uis(src_object) . = 0 + if (!length(open_uis)) + return + var/src_object_key = "\ref[src_object]" if (!open_uis[src_object_key]) return From 93090ac420ab194d30e54669cb3b2b5de18fc4cf Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Sun, 22 Jan 2023 14:59:50 -0600 Subject: [PATCH 052/239] Fix permafrost spawning in unsuitable environments --- code/modules/materials/geology/_strata.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/materials/geology/_strata.dm b/code/modules/materials/geology/_strata.dm index 001c48e2cc8..dd6a0adc2b6 100644 --- a/code/modules/materials/geology/_strata.dm +++ b/code/modules/materials/geology/_strata.dm @@ -28,6 +28,6 @@ else if(isnull(ores_rich) && islist(ores_sparse)) ores_rich = ores_sparse.Copy() - for(var/mat_type in (ores_sparse|ores_rich)) + for(var/mat_type in (base_materials|ores_sparse|ores_rich)) var/decl/material/mat = GET_DECL(mat_type) maximum_temperature = min((mat.melting_point-1), maximum_temperature) From b18c6c6591ec5335375e8111565fd994aa946ea4 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 23 Jan 2023 01:31:37 -0600 Subject: [PATCH 053/239] Fix permafrost spawning above 0C --- code/modules/materials/geology/strata_permafrost.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/materials/geology/strata_permafrost.dm b/code/modules/materials/geology/strata_permafrost.dm index 2a2b0ae8628..ee157faa20d 100644 --- a/code/modules/materials/geology/strata_permafrost.dm +++ b/code/modules/materials/geology/strata_permafrost.dm @@ -18,3 +18,4 @@ /decl/material/solid/ice/hydrate/krypton, /decl/material/solid/ice/hydrate/xenon, ) + maximum_temperature = T0C From 10b494b916501465157a7761846ddca7f65cc41c Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 23 Jan 2023 00:12:40 -0600 Subject: [PATCH 054/239] Fix sensors lacking a power source --- .../items/weapons/circuitboards/machinery/shipsensors.dm | 5 +++-- code/modules/overmap/ships/computers/sensors.dm | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/shipsensors.dm b/code/game/objects/items/weapons/circuitboards/machinery/shipsensors.dm index 04a418a9b3a..a3df680001e 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/shipsensors.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/shipsensors.dm @@ -10,5 +10,6 @@ /obj/item/stock_parts/subspace/transmitter = 1 ) additional_spawn_components = list( - /obj/item/stock_parts/shielding/heat = 1 - ) \ No newline at end of file + /obj/item/stock_parts/shielding/heat = 1, + /obj/item/stock_parts/power/terminal = 1 + ) diff --git a/code/modules/overmap/ships/computers/sensors.dm b/code/modules/overmap/ships/computers/sensors.dm index d36907dee8d..c76c5a82bc7 100644 --- a/code/modules/overmap/ships/computers/sensors.dm +++ b/code/modules/overmap/ships/computers/sensors.dm @@ -175,6 +175,7 @@ stat_immune = NOSCREEN | NOINPUT frame_type = /obj/machinery/constructable_frame base_type = /obj/machinery/shipsensors + stock_part_presets = list(/decl/stock_part_preset/terminal_connect) /obj/machinery/shipsensors/proc/in_vacuum() var/turf/T=get_turf(src) From c111b434265f6d896ff7b16f2bb3eabd6e56d5eb Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 23 Jan 2023 00:12:49 -0600 Subject: [PATCH 055/239] Fix sensors not being dense --- code/modules/overmap/ships/computers/sensors.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/overmap/ships/computers/sensors.dm b/code/modules/overmap/ships/computers/sensors.dm index c76c5a82bc7..2776eb8e1eb 100644 --- a/code/modules/overmap/ships/computers/sensors.dm +++ b/code/modules/overmap/ships/computers/sensors.dm @@ -163,7 +163,8 @@ desc = "Long range gravity scanner with various other sensors, used to detect irregularities in surrounding space. Can only run in vacuum to protect delicate quantum BS elements." icon = 'icons/obj/machines/ship_sensors.dmi' icon_state = "sensors" - anchored = 1 + anchored = TRUE + density = TRUE var/critical_heat = 50 // sparks and takes damage when active & above this heat var/heat_reduction = 1.5 // mitigates this much heat per tick var/heat = 0 From ff04162ce1a39f14ee80092c8af1d9302a1b5fb9 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 23 Jan 2023 00:14:51 -0600 Subject: [PATCH 056/239] Make ambience a lazylist --- code/game/area/areas.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 133593f641e..25b4f160fad 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -360,7 +360,7 @@ var/global/list/mob/living/forced_ambiance_list = new if(LAZYLEN(forced_ambience) && !(L in forced_ambiance_list)) forced_ambiance_list += L L.playsound_local(T,sound(pick(forced_ambience), repeat = 1, wait = 0, volume = 25, channel = sound_channels.lobby_channel)) - if(ambience.len && prob(5) && (world.time >= L.client.played + 3 MINUTES)) + if(LAZYLEN(ambience) && prob(5) && (world.time >= L.client.played + 3 MINUTES)) L.playsound_local(T, sound(pick(ambience), repeat = 0, wait = 0, volume = 15, channel = sound_channels.ambience_channel)) L.client.played = world.time From 240671fd5d9dbe029e01655e9fcb53d50093368f Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 23 Jan 2023 01:32:31 -0600 Subject: [PATCH 057/239] Use SECONDS macro for play_ambience cooldown --- code/modules/mob/living/carbon/human/life.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 96333185cba..3734cb28eeb 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -828,7 +828,7 @@ playsound_local(src,pick(global.scarySounds),50, 1, -1) var/area/A = get_area(src) - if(client && world.time >= client.played + 600) + if(client && world.time >= client.played + 60 SECONDS) A.play_ambience(src) if(stat == UNCONSCIOUS && world.time - l_move_time < 5 && prob(10)) to_chat(src,"You feel like you're [pick("moving","flying","floating","falling","hovering")].") From 9e10d6223010a6dd5f9adc1671a8f785363437f4 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 23 Jan 2023 00:16:01 -0600 Subject: [PATCH 058/239] Allow gas heaters to connect to fuel pipes Fixes a catastrophic overpressure leak on the Errant Pisces. --- code/modules/atmospherics/components/unary/heat_source.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/atmospherics/components/unary/heat_source.dm b/code/modules/atmospherics/components/unary/heat_source.dm index 4ccf0c95cce..20b6e32cf45 100644 --- a/code/modules/atmospherics/components/unary/heat_source.dm +++ b/code/modules/atmospherics/components/unary/heat_source.dm @@ -15,6 +15,7 @@ construct_state = /decl/machine_construction/default/panel_closed uncreated_component_parts = null stat_immune = 0 + connect_types = CONNECT_TYPE_REGULAR | CONNECT_TYPE_FUEL var/max_temperature = T20C + 680 var/internal_volume = 600 //L From ac0fd8ffc9c209194f9dcd8e267c31de354e512f Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 23 Jan 2023 00:16:51 -0600 Subject: [PATCH 059/239] Fix missing pipes and wires on the Errant Pisces --- maps/away/errant_pisces/errant_pisces.dmm | 84 +++++++++++++++++++---- 1 file changed, 72 insertions(+), 12 deletions(-) diff --git a/maps/away/errant_pisces/errant_pisces.dmm b/maps/away/errant_pisces/errant_pisces.dmm index c4fd39ce10a..6dc8faa97be 100644 --- a/maps/away/errant_pisces/errant_pisces.dmm +++ b/maps/away/errant_pisces/errant_pisces.dmm @@ -2062,6 +2062,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, /turf/simulated/floor/plating, /area/errant_pisces/solar_starboard) "fp" = ( @@ -2080,6 +2083,9 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plating, /area/errant_pisces/solar_starboard) "fq" = ( @@ -2091,6 +2097,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plating, /area/errant_pisces/solar_starboard) "fr" = ( @@ -2169,6 +2178,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plating, /area/errant_pisces/solar_port) "fC" = ( @@ -2576,7 +2588,9 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/errant_pisces/hallway) "gA" = ( @@ -2768,6 +2782,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, /turf/simulated/floor/wood, /area/errant_pisces/rooms) "hg" = ( @@ -2779,17 +2796,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/errant_pisces/rooms) "hh" = ( +/obj/effect/wallframe_spawn/reinforced, +/obj/machinery/door/firedoor, /obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/errant_pisces/hallway) +/turf/simulated/floor/plating, +/area/errant_pisces/bridge) "hi" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -2813,6 +2832,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/errant_pisces/dorms) "hk" = ( @@ -2822,6 +2844,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, /turf/simulated/floor/tiled, /area/errant_pisces/dorms) "hl" = ( @@ -2872,6 +2897,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, /area/errant_pisces/rooms) "hu" = ( @@ -4777,6 +4803,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/errant_pisces/general_storage) "nb" = ( @@ -4787,6 +4814,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/airlock/freezer, /obj/effect/decal/cleanable/blood, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/freezer, /area/errant_pisces/prod_storage) "nc" = ( @@ -5198,6 +5226,12 @@ /obj/structure/cable/green{ icon_state = "2-4" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, /turf/simulated/floor/plating, /area/errant_pisces/aux_power) "nN" = ( @@ -5206,6 +5240,12 @@ }, /obj/machinery/door/airlock, /obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plating, /area/errant_pisces/aux_power) "nO" = ( @@ -5215,8 +5255,12 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/errant_pisces/aft_hallway) "nP" = ( @@ -5564,6 +5608,9 @@ }, /obj/structure/cable/green, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "0-2" + }, /turf/simulated/floor/tiled, /area/errant_pisces/bridge) "oM" = ( @@ -5692,6 +5739,9 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/structure/cable/green{ + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/errant_pisces/bridge) "ph" = ( @@ -5789,6 +5839,9 @@ pixel_x = -25; rcon_setting = 3 }, +/obj/structure/cable/green{ + icon_state = "1-6" + }, /turf/simulated/floor/tiled, /area/errant_pisces/bridge) "py" = ( @@ -5847,6 +5900,9 @@ }, /obj/structure/table/steel, /obj/random/snack, +/obj/structure/cable/green{ + icon_state = "6-9" + }, /turf/simulated/floor/tiled, /area/errant_pisces/bridge) "pK" = ( @@ -5981,6 +6037,9 @@ /obj/machinery/computer/ship/sensors{ dir = 4 }, +/obj/structure/cable/green{ + icon_state = "2-9" + }, /turf/simulated/floor/tiled, /area/errant_pisces/bridge) "qb" = ( @@ -6118,6 +6177,7 @@ /area/errant_pisces/fishing_wing) "qx" = ( /obj/machinery/shipsensors, +/obj/structure/cable/green, /turf/simulated/floor/reinforced/airless, /area/errant_pisces/bridge) "qy" = ( @@ -26267,7 +26327,7 @@ gd gk gy fZ -hh +gd fZ fZ fZ @@ -26671,7 +26731,7 @@ gd gm gA fZ -hh +gd fZ fZ hM @@ -28920,7 +28980,7 @@ oS oS pK qa -po +hh qx pp qH From da6dd52b56c23d77ef3cbb31da5d193b44af1e14 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 23 Jan 2023 01:31:13 -0600 Subject: [PATCH 060/239] Add testing for away site pipe leaks --- code/modules/maps/_map_template.dm | 13 +-- code/modules/maps/helper_landmarks.dm | 8 +- code/unit_tests/map_tests.dm | 12 +- maps/away/bearcat/bearcat-2.dmm | 13 ++- maps/away/casino/casino.dmm | 14 ++- maps/away/derelict/derelict-station.dmm | 20 +++- maps/away/errant_pisces/errant_pisces.dmm | 10 +- .../lost_supply_base/lost_supply_base.dmm | 19 ++- maps/away/magshield/magshield.dmm | 110 +++++++++++++----- maps/away/mining/mining-signal.dmm | 3 + maps/away/slavers/slavers_base.dmm | 39 +++++-- maps/away/smugglers/smugglers.dmm | 1 + maps/away/unishi/unishi-3.dmm | 16 ++- .../away_sites_testing_define.dm | 4 +- .../away_sites/lar_maria/lar_maria-2.dmm | 40 ++++++- .../government/away_sites/icarus/icarus-1.dmm | 31 ++++- .../government/away_sites/icarus/icarus-2.dmm | 24 ++-- 17 files changed, 287 insertions(+), 90 deletions(-) diff --git a/code/modules/maps/_map_template.dm b/code/modules/maps/_map_template.dm index 9dc4446a614..ea93af62a0d 100644 --- a/code/modules/maps/_map_template.dm +++ b/code/modules/maps/_map_template.dm @@ -104,15 +104,14 @@ SSshuttle.block_queue = pre_init_state SSshuttle.clear_init_queue() // We will flush the queue unless there were other blockers, in which case they will do it. -/datum/map_template/proc/load_new_z(no_changeturf = TRUE) - - var/x = round((world.maxx - width)/2) - var/y = round((world.maxy - height)/2) +/datum/map_template/proc/load_new_z(no_changeturf = TRUE, centered=TRUE) + var/x = max(round((world.maxx - width)/2), 1) + var/y = max(round((world.maxy - height)/2), 1) + if(!centered) + x = 1 + y = 1 var/initial_z = world.maxz + 1 - if (x < 1) x = 1 - if (y < 1) y = 1 - var/list/bounds = list(1.#INF, 1.#INF, 1.#INF, -1.#INF, -1.#INF, -1.#INF) var/list/atoms_to_initialise = list() var/shuttle_state = pre_init_shuttles() diff --git a/code/modules/maps/helper_landmarks.dm b/code/modules/maps/helper_landmarks.dm index a42fddfb775..fd4ddb0f195 100644 --- a/code/modules/maps/helper_landmarks.dm +++ b/code/modules/maps/helper_landmarks.dm @@ -98,4 +98,10 @@ events_repository.unregister_global(/decl/observ/shuttle_added, src, .proc/check_shuttle) if(shuttle_datum) events_repository.unregister(/decl/observ/shuttle_moved, shuttle_datum, src, .proc/delete_everything) - . = ..() \ No newline at end of file + . = ..() + +/// Used to tell pipe leak unit tests that a leak is intentional. Placed over the pipe that leaks, not the tile missing a pipe. +/obj/abstract/landmark/allowed_leak +#ifndef UNIT_TEST + delete_me = TRUE +#endif diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm index a55d03c79f1..c1477660858 100644 --- a/code/unit_tests/map_tests.dm +++ b/code/unit_tests/map_tests.dm @@ -538,20 +538,20 @@ //======================================================================================= -/datum/unit_test/station_pipes_shall_not_leak - name = "MAP: Station pipes shall not leak" +/datum/unit_test/pipes_shall_not_leak + name = "MAP: Pipes shall not leak unless allowed" -/datum/unit_test/station_pipes_shall_not_leak/start_test() +/datum/unit_test/pipes_shall_not_leak/start_test() var/failures = 0 for(var/obj/machinery/atmospherics/pipe/P in SSmachines.machinery) - if(P.leaking && isStationLevel(P.z)) + if(P.leaking && isPlayerLevel(P.z) && !(locate(/obj/abstract/landmark/allowed_leak) in get_turf(P))) failures++ log_bad("Following pipe is leaking: [log_info_line(P)]") if(failures) - fail("[failures] station pipe\s leak.") + fail("[failures] pipe\s leaking without allowed leak landmark!") else - pass("No station pipes are leaking") + pass("No pipes are leaking.") return 1 //======================================================================================= diff --git a/maps/away/bearcat/bearcat-2.dmm b/maps/away/bearcat/bearcat-2.dmm index 40637183149..739657c85f4 100644 --- a/maps/away/bearcat/bearcat-2.dmm +++ b/maps/away/bearcat/bearcat-2.dmm @@ -3735,6 +3735,7 @@ }, /obj/effect/floor_decal/corner/blue, /obj/machinery/portable_atmospherics/canister/oxygen, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/airless, /area/ship/scrap/maintenance/atmos) "hi" = ( @@ -3749,6 +3750,7 @@ /obj/effect/floor_decal/corner/blue{ dir = 10 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/airless, /area/ship/scrap/maintenance/atmos) "hj" = ( @@ -3771,6 +3773,7 @@ dir = 1 }, /mob/living/simple_animal/hostile/carp, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/airless, /area/ship/scrap/maintenance/atmos) "hl" = ( @@ -4445,6 +4448,7 @@ dir = 4 }, /obj/machinery/portable_atmospherics/powered/pump/filled, +/obj/machinery/atmospherics/pipe/simple/visible/universal, /turf/simulated/floor/tiled/airless, /area/ship/scrap/maintenance/atmos) "iu" = ( @@ -4526,14 +4530,14 @@ /turf/simulated/floor/tiled/airless, /area/ship/scrap/maintenance/atmos) "iE" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/blue{ - dir = 4 - }, /obj/effect/floor_decal/corner/blue, /obj/effect/floor_decal/corner/yellow{ dir = 4 }, /obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/visible/blue{ + dir = 4 + }, /turf/simulated/floor/tiled/airless, /area/ship/scrap/maintenance/atmos) "iF" = ( @@ -4857,6 +4861,7 @@ "js" = ( /obj/machinery/atmospherics/valve/open, /obj/item/shard/borosilicate, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/ship/scrap/maintenance/engine/aft) "jt" = ( @@ -4969,6 +4974,7 @@ /area/ship/scrap/maintenance/engine/aft) "jH" = ( /obj/machinery/atmospherics/pipe/manifold/visible/fuel, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/ship/scrap/maintenance/engine/aft) "jI" = ( @@ -5020,6 +5026,7 @@ }, /obj/effect/floor_decal/industrial/warning, /mob/living/simple_animal/hostile/carp, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/ship/scrap/maintenance/engine/aft) "jQ" = ( diff --git a/maps/away/casino/casino.dmm b/maps/away/casino/casino.dmm index cf98413623f..3347559d787 100644 --- a/maps/away/casino/casino.dmm +++ b/maps/away/casino/casino.dmm @@ -1860,6 +1860,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/casino/casino_maintenance) "fq" = ( @@ -2814,6 +2817,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/casino/casino_crew_atmos) "ij" = ( @@ -3106,6 +3110,7 @@ /obj/machinery/atmospherics/omni/filter{ dir = 8 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating, /area/casino/casino_crew_atmos) "iY" = ( @@ -3116,6 +3121,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating, /area/casino/casino_crew_atmos) "iZ" = ( @@ -3173,6 +3179,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 9 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating, /area/casino/casino_crew_atmos) "ji" = ( @@ -5338,6 +5345,11 @@ }, /turf/simulated/floor/airless, /area/casino/casino_bow) +"TO" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/red, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/plating, +/area/casino/casino_crew_atmos) "Ub" = ( /obj/structure/window/basic{ dir = 4 @@ -9506,7 +9518,7 @@ gM gg ix iI -iW +TO iV jy jN diff --git a/maps/away/derelict/derelict-station.dmm b/maps/away/derelict/derelict-station.dmm index 9668178555d..4d0f32bf0c5 100644 --- a/maps/away/derelict/derelict-station.dmm +++ b/maps/away/derelict/derelict-station.dmm @@ -2382,6 +2382,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/constructionsite/atmospherics) "iv" = ( @@ -2717,6 +2718,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/constructionsite/atmospherics) "jr" = ( @@ -3420,6 +3422,11 @@ }, /turf/simulated/floor/tiled/dark, /area/constructionsite/teleporter) +"nn" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/tiled/dark/airless, +/area/constructionsite/atmospherics) "ob" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume/external_air{ id_tag = "constructionsite_vent" @@ -3454,6 +3461,11 @@ /obj/structure/wall_frame, /turf/simulated/floor/airless, /area/constructionsite/hallway/fore) +"Yw" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/airless, +/area/constructionsite/atmospherics) (1,1,1) = {" aa @@ -24565,9 +24577,9 @@ hr hr hr hr -hV -ie +nn ie +Yw hr hs hr @@ -25974,10 +25986,10 @@ hr hr hs hr +nn hV -hV -ie ie +Yw hs hr hs diff --git a/maps/away/errant_pisces/errant_pisces.dmm b/maps/away/errant_pisces/errant_pisces.dmm index 6dc8faa97be..e1ecd33f77a 100644 --- a/maps/away/errant_pisces/errant_pisces.dmm +++ b/maps/away/errant_pisces/errant_pisces.dmm @@ -800,12 +800,14 @@ /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 4 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating, /area/errant_pisces/atmos) "cw" = ( /obj/machinery/atmospherics/omni/mixer{ dir = 1 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating, /area/errant_pisces/atmos) "cx" = ( @@ -903,6 +905,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 6 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating, /area/errant_pisces/atmos) "cN" = ( @@ -6432,6 +6435,11 @@ }, /turf/simulated/floor/tiled/white, /area/errant_pisces/head_m) +"QS" = ( +/obj/machinery/atmospherics/pipe/simple/visible/blue, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/plating, +/area/errant_pisces/atmos) "Ti" = ( /obj/machinery/computer/modular{ dir = 4 @@ -25299,7 +25307,7 @@ aY bh bA bV -bV +QS cw cM cZ diff --git a/maps/away/lost_supply_base/lost_supply_base.dmm b/maps/away/lost_supply_base/lost_supply_base.dmm index 793ec245d7a..ef689993464 100644 --- a/maps/away/lost_supply_base/lost_supply_base.dmm +++ b/maps/away/lost_supply_base/lost_supply_base.dmm @@ -761,6 +761,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/lost_supply_base) "cf" = ( @@ -941,6 +942,7 @@ /area/lost_supply_base) "cG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/lost_supply_base) "cH" = ( @@ -1002,6 +1004,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/lost_supply_base) "cT" = ( @@ -1026,12 +1029,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/lost_supply_base) "cY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/lost_supply_base) "cZ" = ( @@ -1041,6 +1046,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/wall, /area/lost_supply_base) "da" = ( @@ -1849,6 +1855,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/airless{ icon_state = "steel_burned1" }, @@ -1897,6 +1904,7 @@ pixel_x = 5; pixel_y = -3 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/airless, /area/lost_supply_base) "fT" = ( @@ -2008,6 +2016,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/airless, /area/lost_supply_base) "gh" = ( @@ -2109,6 +2118,14 @@ icon_state = "steel_broken0" }, /area/lost_supply_base/supply) +"nL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/airless, +/area/lost_supply_base) "Jd" = ( /obj/machinery/computer/modular{ dir = 1 @@ -8474,7 +8491,7 @@ bg bB bN bU -bU +nL cr aG cS diff --git a/maps/away/magshield/magshield.dmm b/maps/away/magshield/magshield.dmm index d90190d2602..203c739a187 100644 --- a/maps/away/magshield/magshield.dmm +++ b/maps/away/magshield/magshield.dmm @@ -400,6 +400,7 @@ /obj/structure/cable/yellow{ icon_state = "2-8" }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/magshield/smes_storage) "bj" = ( @@ -1046,6 +1047,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/magshield/smes_storage) "cV" = ( @@ -1428,6 +1430,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/magshield/north) "ej" = ( @@ -1483,6 +1486,7 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/magshield/north) "eo" = ( @@ -2054,12 +2058,6 @@ }, /turf/simulated/floor/airless, /area/magshield/east) -"fV" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/red{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/magshield/east) "fW" = ( /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 4 @@ -2149,12 +2147,6 @@ }, /turf/simulated/floor/airless, /area/magshield/east) -"gl" = ( -/obj/machinery/atmospherics/pipe/simple/visible/red{ - dir = 9 - }, -/turf/simulated/floor/airless, -/area/magshield/east) "gm" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2444,6 +2436,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/magshield/east) "hh" = ( @@ -2730,6 +2723,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled, /area/magshield/west) "hZ" = ( @@ -2765,6 +2759,7 @@ /area/magshield/west) "ie" = ( /obj/machinery/seed_storage, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled, /area/magshield/east) "if" = ( @@ -3394,6 +3389,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/magshield/south) "kb" = ( @@ -3755,13 +3751,13 @@ /turf/simulated/floor/tiled, /area/magshield/south) "le" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/magshield/south) +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/airless, +/area/magshield/smes_storage) "lf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -3897,6 +3893,11 @@ /obj/effect/shuttle_landmark/nav_magshield/nav3, /turf/space, /area/space) +"qp" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/abstract/landmark/allowed_leak, +/turf/space, +/area/space) "uL" = ( /obj/effect/wallframe_spawn/reinforced, /turf/simulated/floor/tiled, @@ -3909,6 +3910,51 @@ }, /turf/simulated/floor/airless, /area/magshield/east) +"JW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/tiled, +/area/magshield/south) +"KZ" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 4 + }, +/obj/abstract/landmark/allowed_leak, +/turf/space, +/area/space) +"Oa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/tiled/dark, +/area/magshield/west) +"TY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/airless, +/area/magshield/north) +"Uw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/tiled, +/area/magshield/south) (1,1,1) = {" aa @@ -19371,7 +19417,7 @@ hM hM hM hM -it +Oa it it iK @@ -20144,7 +20190,7 @@ bc bc bO bc -bc +qp aa ao aa @@ -20346,10 +20392,10 @@ bc bc bc bc -bc +qp aa aa -bN +KZ ab de de @@ -20547,7 +20593,7 @@ bc bc bc bc -bc +qp aa aa aa @@ -21165,7 +21211,7 @@ dl dj dH dg -ej +TY dg dj de @@ -23574,7 +23620,7 @@ aD aU bi bg -aU +le aU aU bZ @@ -27058,7 +27104,7 @@ iq iq iq iq -le +kz iq ip ip @@ -27865,7 +27911,7 @@ iq iq iq iq -kx +JW ip jl jl @@ -28066,7 +28112,7 @@ jg ix jZ kt -ix +Uw ku kc jD @@ -28446,7 +28492,7 @@ fi fi fU fi -fU +fi fi fi gF @@ -28646,9 +28692,9 @@ fh fi fi fi -fV -ge -gl +fU +fi +fi fi fi fi diff --git a/maps/away/mining/mining-signal.dmm b/maps/away/mining/mining-signal.dmm index ec101d0ae48..de1ec66f91e 100644 --- a/maps/away/mining/mining-signal.dmm +++ b/maps/away/mining/mining-signal.dmm @@ -1426,6 +1426,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/green{ dir = 4 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/white/airless, /area/outpost/abandoned) "eR" = ( @@ -1516,6 +1517,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/red, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating{ icon_state = "dmg1" }, @@ -2439,6 +2441,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/item/ammo_casing/pistol/magnum, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/dark, /area/outpost/abandoned) "rb" = ( diff --git a/maps/away/slavers/slavers_base.dmm b/maps/away/slavers/slavers_base.dmm index 25da7e728a3..61083e29ea9 100644 --- a/maps/away/slavers/slavers_base.dmm +++ b/maps/away/slavers/slavers_base.dmm @@ -371,6 +371,9 @@ /obj/structure/cable/cyan{ icon_state = "2-8" }, +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, /turf/simulated/floor/tiled/airless, /area/slavers_base/cells) "bp" = ( @@ -457,9 +460,10 @@ /turf/simulated/floor/tiled/airless, /area/slavers_base/cells) "by" = ( -/obj/effect/wallframe_spawn/reinforced, -/turf/simulated/floor/tiled/airless, -/area/slavers_base/cells) +/obj/machinery/atmospherics/pipe/manifold/visible/black, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/airless/ceiling, +/area/slavers_base/powatm) "bz" = ( /obj/structure/closet/crate/freezer/rations, /obj/effect/decal/cleanable/dirt, @@ -727,11 +731,11 @@ "cc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood, -/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ - icon_state = "0-2" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/airless, /area/slavers_base/cells) "cd" = ( @@ -2102,12 +2106,14 @@ /obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 4 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless/ceiling, /area/slavers_base/powatm) "fN" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 10 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless/ceiling, /area/slavers_base/powatm) "fO" = ( @@ -2218,6 +2224,7 @@ /obj/machinery/atmospherics/omni/filter{ dir = 8 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless/ceiling, /area/slavers_base/powatm) "gf" = ( @@ -3884,6 +3891,18 @@ }, /turf/simulated/floor/tiled/white, /area/slavers_base/dorms) +"nm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/airless, +/area/slavers_base/demo) +"EJ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/black{ + dir = 4 + }, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/airless/ceiling, +/area/slavers_base/powatm) (1,1,1) = {" aa @@ -14907,7 +14926,7 @@ eF da da fL -gc +by da da da @@ -15513,7 +15532,7 @@ eH da da da -gd +EJ da da da @@ -20138,7 +20157,7 @@ aM aM aM bo -by +cx aM aM aM @@ -20975,7 +20994,7 @@ hr hH ie hd -iI +nm iZ jm jx diff --git a/maps/away/smugglers/smugglers.dmm b/maps/away/smugglers/smugglers.dmm index f5539d4c17e..e2c7e60eb45 100644 --- a/maps/away/smugglers/smugglers.dmm +++ b/maps/away/smugglers/smugglers.dmm @@ -83,6 +83,7 @@ icon_state = "door_closed"; name = "Internal Airlock" }, +/obj/machinery/atmospherics/pipe/simple/visible/black, /turf/simulated/floor, /area/smugglers/base) "ar" = ( diff --git a/maps/away/unishi/unishi-3.dmm b/maps/away/unishi/unishi-3.dmm index 5d2e981c0aa..5f6a5cf3a3d 100644 --- a/maps/away/unishi/unishi-3.dmm +++ b/maps/away/unishi/unishi-3.dmm @@ -872,9 +872,7 @@ /area/unishi/living) "cD" = ( /obj/structure/bed/chair/padded/black, -/obj/machinery/computer/modular/telescreen/preset/generic{ - dir = 2 - }, +/obj/machinery/computer/modular/telescreen/preset/generic, /turf/simulated/floor/tiled, /area/unishi/living) "cE" = ( @@ -1977,6 +1975,16 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/tiled, /area/unishi/living) +"RG" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/unishi/living) "Um" = ( /obj/machinery/light/small{ dir = 4 @@ -7549,7 +7557,7 @@ bf dW ea bf -bq +RG bf es be diff --git a/maps/away_sites_testing/away_sites_testing_define.dm b/maps/away_sites_testing/away_sites_testing_define.dm index 18f0b37ffc0..72163ba24c7 100644 --- a/maps/away_sites_testing/away_sites_testing_define.dm +++ b/maps/away_sites_testing/away_sites_testing_define.dm @@ -12,10 +12,10 @@ var/list/unsorted_sites = list_values(SSmapping.get_templates_by_category(MAP_TEMPLATE_CATEGORY_AWAYSITE)) var/list/sorted_sites = sortTim(unsorted_sites, /proc/cmp_sort_templates_tallest_to_shortest) for (var/datum/map_template/A in sorted_sites) - A.load_new_z() + A.load_new_z(centered = FALSE) testing("Spawning [A] in [english_list(GetConnectedZlevels(world.maxz))]") if(A.template_flags & TEMPLATE_FLAG_TEST_DUPLICATES) - A.load_new_z() + A.load_new_z(centered = FALSE) testing("Spawning [A] in [english_list(GetConnectedZlevels(world.maxz))]") /proc/cmp_sort_templates_tallest_to_shortest(var/datum/map_template/a, var/datum/map_template/b) diff --git a/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm b/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm index f13e010dddb..7e97ebf1f82 100644 --- a/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm +++ b/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm @@ -1108,10 +1108,12 @@ /obj/machinery/atmospherics/omni/filter{ dir = 4 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating, /area/lar_maria/atmos) "dr" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/cyan, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating, /area/lar_maria/atmos) "ds" = ( @@ -1177,10 +1179,12 @@ /area/lar_maria/atmos) "dD" = ( /obj/machinery/atmospherics/binary/oxyregenerator, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating, /area/lar_maria/atmos) "dE" = ( /obj/machinery/atmospherics/pipe/simple/visible/blue, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating, /area/lar_maria/atmos) "dF" = ( @@ -3090,6 +3094,13 @@ }, /turf/simulated/floor/plating, /area/lar_maria/solar_control) +"ok" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/plating, +/area/lar_maria/atmos) "pb" = ( /obj/machinery/atmospherics/binary/pump{ dir = 8 @@ -3183,12 +3194,31 @@ }, /turf/simulated/floor/tiled/white, /area/lar_maria/head_f) +"Ag" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/plating, +/area/lar_maria/atmos) "DG" = ( /obj/machinery/computer/modular{ dir = 1 }, /turf/simulated/floor/tiled, /area/lar_maria/office) +"FZ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/plating, +/area/lar_maria/atmos) +"YS" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 10 + }, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/plating, +/area/lar_maria/atmos) (1,1,1) = {" aa @@ -22470,7 +22500,7 @@ pb ci cA cR -cR +ok dB tb bx @@ -22671,7 +22701,7 @@ bx bM ci cn -cl +YS dn dB bM @@ -22874,7 +22904,7 @@ bN ci cn cn -cR +ok dC dO bx @@ -23480,7 +23510,7 @@ bQ ck bQ cU -cU +Ag bQ dR bG @@ -24085,7 +24115,7 @@ bx qb cl cB -cB +FZ dp dF ub diff --git a/mods/content/government/away_sites/icarus/icarus-1.dmm b/mods/content/government/away_sites/icarus/icarus-1.dmm index 7f26d3567d8..11bd7e8d30b 100644 --- a/mods/content/government/away_sites/icarus/icarus-1.dmm +++ b/mods/content/government/away_sites/icarus/icarus-1.dmm @@ -1149,6 +1149,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled, /area/icarus/open) "dX" = ( @@ -1996,6 +1997,7 @@ "gy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating, /area/icarus/vessel) "gz" = ( @@ -2096,6 +2098,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating, /area/icarus/open) "gR" = ( @@ -2383,6 +2386,9 @@ dir = 4; id_tag = "d1starboardnacelle" }, +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, /turf/simulated/floor/reinforced, /area/icarus/vessel) "hH" = ( @@ -2525,7 +2531,9 @@ /turf/unsimulated/beach/sand, /area/icarus/open) "id" = ( -/obj/machinery/atmospherics/unary/engine, +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, /turf/simulated/wall/r_wall, /area/icarus/open) "ie" = ( @@ -2661,6 +2669,19 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/white, /area/icarus/vessel) +"rK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/tiled, +/area/icarus/open) +"sK" = ( +/obj/machinery/atmospherics/pipe/simple/visible/fuel{ + dir = 4 + }, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/plating, +/area/icarus/open) (1,1,1) = {" aa @@ -22008,7 +22029,7 @@ en en ei et -hD +sK eA hX et @@ -22124,7 +22145,7 @@ dD dK dD dD -dD +rK ee ei ei @@ -22207,7 +22228,7 @@ aq gR hd eA -hD +sK et aq hD @@ -25760,7 +25781,7 @@ cf dL dY dD -dD +rK eA ei ei diff --git a/mods/content/government/away_sites/icarus/icarus-2.dmm b/mods/content/government/away_sites/icarus/icarus-2.dmm index c5f7ce09cff..30b7c9c2ba8 100644 --- a/mods/content/government/away_sites/icarus/icarus-2.dmm +++ b/mods/content/government/away_sites/icarus/icarus-2.dmm @@ -962,12 +962,12 @@ /turf/simulated/floor/tiled, /area/icarus/vessel) "df" = ( -/obj/machinery/door/airlock, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled, -/area/icarus/vessel) +/area/icarus/open) "dg" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -1271,6 +1271,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless{ icon_state = "dmg2" }, @@ -1343,6 +1344,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled, /area/icarus/vessel) "el" = ( @@ -1813,6 +1815,12 @@ /obj/structure/wall_frame, /turf/simulated/floor/plating, /area/icarus/vessel) +"MC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/tiled, +/area/icarus/open) "RQ" = ( /obj/machinery/computer/modular{ dir = 4 @@ -21288,7 +21296,7 @@ dw dU dw dw -dw +MC ac cR ac @@ -24921,7 +24929,7 @@ bY bY dN dw -dU +df dR cR cR @@ -26126,7 +26134,7 @@ ap cu cJ ap -df +bw ap ap ap From 260af1e0145b30206faa94da0468720b55e94bd4 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 23 Jan 2023 01:35:09 -0600 Subject: [PATCH 061/239] Remove redundant sector name from navpoint names --- code/modules/shuttles/landmarks.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/shuttles/landmarks.dm b/code/modules/shuttles/landmarks.dm index 4758c863575..294527638e9 100644 --- a/code/modules/shuttles/landmarks.dm +++ b/code/modules/shuttles/landmarks.dm @@ -127,10 +127,11 @@ var/global/list/shuttle_landmarks = list() /obj/effect/shuttle_landmark/automatic/sector_set(var/obj/effect/overmap/visitable/O) ..() - SetName("[O.name] - [initial(name)] ([x],[y])") + SetName("[initial(name)] ([x],[y])") //Subtype that calls explosion on init to clear space for shuttles /obj/effect/shuttle_landmark/automatic/clearing + name = "clearing" var/radius = 10 /obj/effect/shuttle_landmark/automatic/clearing/Initialize(var/ml, var/supplied_radius) From 0b3652a779c2aa8e7c4e138f4868fff33a53d4af Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 23 Jan 2023 02:37:58 -0600 Subject: [PATCH 062/239] Fix Donk-pocket recipe name overlap --- code/modules/food/recipes_microwave.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 11a950eb573..d39bfe72bf3 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -152,6 +152,7 @@ I said no! result = /obj/item/chems/food/pancakes /decl/recipe/donkpocket + display_name = "fresh Donk-pocket" items = list( /obj/item/chems/food/doughslice, /obj/item/chems/food/meatball @@ -167,14 +168,14 @@ I said no! warm_up(being_cooked) /decl/recipe/donkpocket/rawmeatball - display_name = "Raw Donk-Pocket" + display_name = "raw Donk-pocket" items = list( /obj/item/chems/food/doughslice, /obj/item/chems/food/rawmeatball ) /decl/recipe/donkpocket/warm - display_name = "Warm Donk-Pocket" + display_name = "warm Donk-pocket" reagents = list() //This is necessary since this is a child object of the above recipe and we don't want donk pockets to need flour items = list( /obj/item/chems/food/donkpocket From 0c09cec1c0521d7084a71aff86603ab21f10c7df Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Fri, 20 Jan 2023 23:13:37 -0600 Subject: [PATCH 063/239] Make replaced job items go in storage --- .../preference_setup/loadout/loadout.dm | 31 ++++++++++++------- code/modules/mob/inventory.dm | 6 ++-- .../mob/living/carbon/human/inventory.dm | 24 ++++++++------ 3 files changed, 36 insertions(+), 25 deletions(-) diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index de20fb7916e..c7a5b4e968d 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -417,28 +417,35 @@ var/global/list/gear_datums = list() if(metadata && !islist(metadata)) PRINT_STACK_TRACE("Loadout spawn_item() proc received non-null non-list metadata: '[json_encode(metadata)]'") -/decl/loadout_option/proc/spawn_on_mob(var/mob/living/carbon/human/H, var/metadata) - var/obj/item/item = spawn_and_validate_item(H, metadata) +/decl/loadout_option/proc/spawn_on_mob(mob/living/carbon/human/wearer, metadata) + var/obj/item/item = spawn_and_validate_item(wearer, metadata) if(!item) return - if(H.equip_to_slot_if_possible(item, slot, del_on_fail = 1, force = 1)) + var/obj/item/old_item = wearer.get_equipped_item(slot) + if(wearer.equip_to_slot_if_possible(item, slot, del_on_fail = TRUE, force = TRUE, delete_old_item = FALSE)) . = item + if(old_item && old_item.type != item.type) + wearer.u_equip(old_item) + place_in_storage_or_drop(wearer, old_item) -/decl/loadout_option/proc/spawn_in_storage_or_drop(var/mob/living/carbon/human/H, var/metadata) - var/obj/item/item = spawn_and_validate_item(H, metadata) +/decl/loadout_option/proc/spawn_in_storage_or_drop(mob/living/carbon/human/wearer, metadata) + var/obj/item/item = spawn_and_validate_item(wearer, metadata) if(!item) return - var/atom/placed_in = H.equip_to_storage(item) + place_in_storage_or_drop(wearer, item) + +/decl/loadout_option/proc/place_in_storage_or_drop(mob/living/carbon/human/wearer, obj/item/item) + var/atom/placed_in = wearer.equip_to_storage(item) if(placed_in) - to_chat(H, "Placing \the [item] in your [placed_in.name]!") - else if(H.equip_to_appropriate_slot(item)) - to_chat(H, "Placing \the [item] in your inventory!") - else if(H.put_in_hands(item)) - to_chat(H, "Placing \the [item] in your hands!") + to_chat(wearer, SPAN_NOTICE("Placing \the [item] in your [placed_in.name]!")) + else if(wearer.equip_to_appropriate_slot(item)) + to_chat(wearer, SPAN_NOTICE("Placing \the [item] in your inventory!")) + else if(wearer.put_in_hands(item)) + to_chat(wearer, SPAN_NOTICE("Placing \the [item] in your hands!")) else - to_chat(H, "Dropping \the [item] on the ground!") + to_chat(wearer, SPAN_DANGER("Dropping \the [item] on the ground!")) /decl/loadout_option/proc/spawn_and_validate_item(mob/living/carbon/human/H, metadata) PRIVATE_PROC(TRUE) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 36969dd90eb..0dbefff67cc 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -15,7 +15,7 @@ //set disable_warning to disable the 'you are unable to equip that' warning. //unset redraw_mob to prevent the mob from being redrawn at the end. //set force to replace items in the slot and ignore blocking overwear -/mob/proc/equip_to_slot_if_possible(obj/item/W, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1, force = 0) +/mob/proc/equip_to_slot_if_possible(obj/item/W, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1, force = FALSE, delete_old_item = TRUE) if(!istype(W) || !slot) return FALSE @@ -27,12 +27,12 @@ return FALSE if(canUnEquip(W)) - equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail. + equip_to_slot(W, slot, redraw_mob, delete_old_item = delete_old_item) //This proc should not ever fail. return TRUE //This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task. //In most cases you will want to use equip_to_slot_if_possible() -/mob/proc/equip_to_slot(obj/item/W, slot) +/mob/proc/equip_to_slot(obj/item/W, slot, delete_old_item = TRUE) SHOULD_CALL_PARENT(TRUE) return istype(W) && !isnull(slot) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 1096f2b6eb8..ddf99bc48df 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -162,7 +162,7 @@ This saves us from having to call add_fingerprint() any time something is put in // Post hands rewrite I plan to conver the rest of the inventory system to a string-based inventory slot system // so at that point the numerical flags will be removed and this proc (and the rest of the chain) can be rewritten. -/mob/living/carbon/human/equip_to_slot(obj/item/W, slot, redraw_mob = 1) +/mob/living/carbon/human/equip_to_slot(obj/item/W, slot, redraw_mob = TRUE, delete_old_item = TRUE) . = ..() if(!. || !has_organ_for_slot(slot)) @@ -185,7 +185,9 @@ This saves us from having to call add_fingerprint() any time something is put in if(W.action_button_name) update_action_buttons() if(old_item) - qdel(old_item) + u_equip(old_item) + if(delete_old_item) + qdel(old_item) return TRUE // End boilerplate. @@ -200,9 +202,8 @@ This saves us from having to call add_fingerprint() any time something is put in update_inv_back(redraw_mob) if(slot_wear_mask_str) _wear_mask = W - if(_wear_mask.flags_inv & BLOCK_ALL_HAIR) - update_hair(redraw_mob) //rebuild hair - update_inv_ears(0) + update_hair(redraw_mob) //rebuild hair + update_inv_ears(0) W.equipped(src, slot) update_inv_wear_mask(redraw_mob) if(slot_handcuffed_str) @@ -235,9 +236,9 @@ This saves us from having to call add_fingerprint() any time something is put in update_inv_gloves(redraw_mob) if(slot_head_str) _head = W - if(_head.flags_inv & (BLOCK_ALL_HAIR|HIDEMASK)) - update_hair(redraw_mob) //rebuild hair - update_inv_ears(0) + update_hair(redraw_mob) //rebuild hair + update_inv_ears(0) + if(_head.flags_inv & HIDEMASK) update_inv_wear_mask(0) if(istype(W,/obj/item/clothing/head/kitty)) W.update_icon(src) @@ -296,9 +297,12 @@ This saves us from having to call add_fingerprint() any time something is put in if(W.action_button_name) update_action_buttons() - // if we replaced an item, delete the old item. do this at the end to make the replacement seamless + // seamless replacement deletes the old item by default, but can be disabled for special handling + // like job items going into storage when replaced by loadout items if(old_item) - qdel(old_item) + u_equip(old_item) + if(delete_old_item) + qdel(old_item) return 1 From 08895ed1fbfadfeb4610096281c07bdc3d8cde82 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Sat, 21 Jan 2023 14:42:47 -0600 Subject: [PATCH 064/239] Delete job items if duplicated in loadout --- code/modules/client/preference_setup/loadout/loadout.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index c7a5b4e968d..3a8dc7625e3 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -425,9 +425,13 @@ var/global/list/gear_datums = list() var/obj/item/old_item = wearer.get_equipped_item(slot) if(wearer.equip_to_slot_if_possible(item, slot, del_on_fail = TRUE, force = TRUE, delete_old_item = FALSE)) . = item - if(old_item && old_item.type != item.type) - wearer.u_equip(old_item) + if(!old_item) + return + wearer.u_equip(old_item) + if(old_item.type != item.type) place_in_storage_or_drop(wearer, old_item) + else + qdel(old_item) /decl/loadout_option/proc/spawn_in_storage_or_drop(mob/living/carbon/human/wearer, metadata) var/obj/item/item = spawn_and_validate_item(wearer, metadata) From 8fb6088d0eda6cb8bbfc2024df8d0a8e4d7316e9 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 21 Jan 2023 08:56:03 -0500 Subject: [PATCH 065/239] Update Matrices, Fix Runtimes Update color matrix procs and in the process fixes a runtime when supermatter damage gets high. Also move animations to animations.dm --- code/_helpers/animations.dm | 33 +- code/_helpers/matrices.dm | 297 +++++++++++------- code/game/objects/items/cryobag.dm | 6 +- .../client/client_color_definitions.dm | 52 +-- .../under/accessories/accessory_toggleable.dm | 2 +- code/modules/events/ion_storm.dm | 2 +- .../simple_animal/hostile/retaliate/jelly.dm | 4 +- .../reagents/chems/random/random_effects.dm | 2 +- code/modules/supermatter/supermatter.dm | 2 +- 9 files changed, 259 insertions(+), 141 deletions(-) diff --git a/code/_helpers/animations.dm b/code/_helpers/animations.dm index c3ba7d48996..65932553d9a 100644 --- a/code/_helpers/animations.dm +++ b/code/_helpers/animations.dm @@ -67,4 +67,35 @@ // And animate the attack! animate(I, alpha = 175, transform = matrix() * 0.75, pixel_x = 0, pixel_y = 0, pixel_z = 0, time = 3) animate(time = 1) - animate(alpha = 0, time = 3, easing = CIRCULAR_EASING|EASE_OUT) \ No newline at end of file + animate(alpha = 0, time = 3, easing = CIRCULAR_EASING|EASE_OUT) + +/atom/proc/shake_animation(var/intensity = 8) + var/init_px = pixel_x + var/shake_dir = pick(-1, 1) + animate(src, transform=turn(matrix(), intensity*shake_dir), pixel_x=init_px + 2*shake_dir, time=1) + animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING) + +/atom/proc/SpinAnimation(speed = 10, loops = -1, clockwise = 1, segments = 3, parallel = TRUE) + if(!segments) + return + var/segment = 360/segments + if(!clockwise) + segment = -segment + var/list/matrices = list() + for(var/i in 1 to segments-1) + var/matrix/M = matrix(transform) + M.Turn(segment*i) + matrices += M + var/matrix/last = matrix(transform) + matrices += last + + speed /= segments + + if(parallel) + animate(src, transform = matrices[1], time = speed, loops , flags = ANIMATION_PARALLEL) + else + animate(src, transform = matrices[1], time = speed, loops) + for(var/i in 2 to segments) //2 because 1 is covered above + animate(transform = matrices[i], time = speed) + //doesn't have an object argument because this is "Stacking" with the animate call above + //3 billion% intentional \ No newline at end of file diff --git a/code/_helpers/matrices.dm b/code/_helpers/matrices.dm index c211ec41a1c..7eaf04da437 100644 --- a/code/_helpers/matrices.dm +++ b/code/_helpers/matrices.dm @@ -1,121 +1,208 @@ +// Luma coefficients suggested for HDTVs. If you change these, make sure they add up to 1. +#define LUMA_R 0.213 +#define LUMA_G 0.715 +#define LUMA_B 0.072 + +/// Datum which stores information about a matrix decomposed with decompose(). +/datum/decompose_matrix + var/scale_x = 1 + var/scale_y = 1 + var/rotation = 0 + var/shift_x = 0 + var/shift_y = 0 + + +/// Decomposes a matrix into scale, shift and rotation. +/// * If other operations were applied on the matrix, such as shearing, the result will not be precise. +/matrix/proc/decompose() + var/datum/decompose_matrix/decompose_matrix = new + . = decompose_matrix + var/flip_sign = (a*e - b*d < 0)? -1 : 1 // Det < 0 => only 1 axis is flipped - start doing some sign flipping + // If both axis are flipped, nothing bad happens and Det >= 0, it just treats it like a 180° rotation + // If only 1 axis is flipped, we need to flip one direction - in this case X, so we flip a, b and the x scaling + decompose_matrix.scale_x = sqrt(a * a + d * d) * flip_sign + decompose_matrix.scale_y = sqrt(b * b + e * e) + decompose_matrix.shift_x = c + decompose_matrix.shift_y = f + if(!decompose_matrix.scale_x || !decompose_matrix.scale_y) + return + // If only translated, scaled and rotated, a/xs == e/ys and -d/xs == b/xy + var/cossine = (a/decompose_matrix.scale_x + e/decompose_matrix.scale_y) / 2 + var/sine = (b/decompose_matrix.scale_y - d/decompose_matrix.scale_x) / 2 * flip_sign + decompose_matrix.rotation = arctan(cossine, sine) * flip_sign + + /matrix/proc/TurnTo(old_angle, new_angle) . = new_angle - old_angle Turn(.) //BYOND handles cases such as -270, 360, 540 etc. DOES NOT HANDLE 180 TURNS WELL, THEY TWEEN AND LOOK LIKE SHIT -/atom/proc/SpinAnimation(speed = 10, loops = -1) - var/matrix/m120 = matrix(transform) - m120.Turn(120) - var/matrix/m240 = matrix(transform) - m240.Turn(240) - var/matrix/m360 = matrix(transform) - speed /= 3 //Gives us 3 equal time segments for our three turns. - //Why not one turn? Because byond will see that the start and finish are the same place and do nothing - //Why not two turns? Because byond will do a flip instead of a turn - animate(src, transform = m120, time = speed, loops) - animate(transform = m240, time = speed) - animate(transform = m360, time = speed) - -/atom/proc/shake_animation(var/intensity = 8) - var/init_px = pixel_x - var/shake_dir = pick(-1, 1) - animate(src, transform=turn(matrix(), intensity*shake_dir), pixel_x=init_px + 2*shake_dir, time=1) - animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING) - -//The X pixel offset of this matrix +/// Shear the transform on either or both axes. +/// * x - X axis shearing +/// * y - Y axis shearing +/matrix/proc/Shear(x, y) + return Multiply(matrix(1, x, 0, y, 1, 0)) + + +/// Dumps the matrix data in format a-f +/matrix/proc/tolist() + . = list() + . += a + . += b + . += c + . += d + . += e + . += f + +/// Dumps the matrix data in a matrix-grid format +/// * a d 0 +/// * b e 0 +/// * c f 1 +/matrix/proc/togrid() + . = list() + . += a + . += d + . += 0 + . += b + . += e + . += 0 + . += c + . += f + . += 1 + +/// The X pixel offset of this matrix /matrix/proc/get_x_shift() . = c -//The Y pixel offset of this matrix +/// The Y pixel offset of this matrix /matrix/proc/get_y_shift() . = f -// Color matrices: - -//Luma coefficients suggested for HDTVs. If you change these, make sure they add up to 1. -#define LUMR 0.2126 -#define LUMG 0.7152 -#define LUMB 0.0722 - -//Still need color matrix addition, negation, and multiplication. - -//Returns an identity color matrix which does nothing -/proc/color_identity() - return list(1,0,0, 0,1,0, 0,0,1) -//Moves all colors angle degrees around the color wheel while maintaining intensity of the color and not affecting whites -//TODO: Need a version that only affects one color (ie shift red to blue but leave greens and blues alone) -/proc/color_rotation(angle) - if(angle == 0) - return color_identity() - angle = clamp(angle, -180, 180) - var/cos = cos(angle) +/// Returns the matrix identity +/// * 1 0 0 0 +/// * 0 1 0 0 +/// * 0 0 1 0 +/// * 0 0 0 0 +/proc/color_matrix_identity() + return list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0,0,0,0) + +/// Adds/subtracts overall lightness +/// * 0 is identity, 1 makes everything white, -1 makes everything black +/proc/color_matrix_lightness(power) + return list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, power,power,power,0) + +/// Changes distance hues have from grey while maintaining the overall lightness. Greys are unaffected. +/// * 1 is identity, 0 is greyscale, >1 oversaturates colors +/proc/color_matrix_saturation(value) + var/inv = 1 - value + var/R = round(LUMA_R * inv, 0.001) + var/G = round(LUMA_G * inv, 0.001) + var/B = round(LUMA_B * inv, 0.001) + + return list(R + value,R,R,0, G,G + value,G,0, B,B,B + value,0, 0,0,0,1, 0,0,0,0) + +/// Changes distance colors have from rgb(127,127,127) grey +/// * 1 is identity. 0 makes everything grey >1 blows out colors and greys +/proc/color_matrix_contrast(value) + var/add = (1 - value) / 2 + return list(value,0,0,0, 0,value,0,0, 0,0,value,0, 0,0,0,1, add,add,add,0) + +/// Moves all colors angle degrees around the color wheel while maintaining intensity of the color and not affecting greys +/// * 0 is identity, 120 moves reds to greens, 240 moves reds to blues +/proc/color_matrix_rotate_hue(angle) var/sin = sin(angle) - - var/constA = 0.143 - var/constB = 0.140 - var/constC = -0.283 + var/cos = cos(angle) + var/cos_inv_third = 0.333*(1-cos) + var/sqrt3_sin = sqrt(3)*sin return list( - LUMR + cos * (1-LUMR) + sin * -LUMR, LUMR + cos * -LUMR + sin * constA, LUMR + cos * -LUMR + sin * -(1-LUMR), - LUMG + cos * -LUMG + sin * -LUMG, LUMG + cos * (1-LUMG) + sin * constB, LUMG + cos * -LUMG + sin * LUMG, - LUMB + cos * -LUMB + sin * (1-LUMB), LUMB + cos * -LUMB + sin * constC, LUMB + cos * (1-LUMB) + sin * LUMB + round(cos+cos_inv_third, 0.001), round(cos_inv_third+sqrt3_sin, 0.001), round(cos_inv_third-sqrt3_sin, 0.001), 0, + round(cos_inv_third-sqrt3_sin, 0.001), round(cos+cos_inv_third, 0.001), round(cos_inv_third+sqrt3_sin, 0.001), 0, + round(cos_inv_third+sqrt3_sin, 0.001), round(cos_inv_third-sqrt3_sin, 0.001), round(cos+cos_inv_third, 0.001), 0, + 0,0,0,1, + 0,0,0,0 ) -//Makes everything brighter or darker without regard to existing color or brightness -/proc/color_brightness(power) - power = clamp(power, -255, 255) - power = power/255 - - return list(1,0,0, 0,1,0, 0,0,1, power,power,power) - -var/global/list/delta_index = list( - 0, 0.01, 0.02, 0.04, 0.05, 0.06, 0.07, 0.08, 0.1, 0.11, - 0.12, 0.14, 0.15, 0.16, 0.17, 0.18, 0.20, 0.21, 0.22, 0.24, - 0.25, 0.27, 0.28, 0.30, 0.32, 0.34, 0.36, 0.38, 0.40, 0.42, - 0.44, 0.46, 0.48, 0.5, 0.53, 0.56, 0.59, 0.62, 0.65, 0.68, - 0.71, 0.74, 0.77, 0.80, 0.83, 0.86, 0.89, 0.92, 0.95, 0.98, - 1.0, 1.06, 1.12, 1.18, 1.24, 1.30, 1.36, 1.42, 1.48, 1.54, - 1.60, 1.66, 1.72, 1.78, 1.84, 1.90, 1.96, 2.0, 2.12, 2.25, - 2.37, 2.50, 2.62, 2.75, 2.87, 3.0, 3.2, 3.4, 3.6, 3.8, - 4.0, 4.3, 4.7, 4.9, 5.0, 5.5, 6.0, 6.5, 6.8, 7.0, - 7.3, 7.5, 7.8, 8.0, 8.4, 8.7, 9.0, 9.4, 9.6, 9.8, - 10.0) - -//Exxagerates or removes brightness -/proc/color_contrast(value) - value = clamp(value, -100, 100) - if(value == 0) - return color_identity() - - var/x = 0 - if (value < 0) - x = 127 + value / 100 * 127; - else - x = value % 1 - if(x == 0) - x = delta_index[value] +/// Rotates around the red axis +/proc/color_matrix_rotate_x(angle) + var/sinval = round(sin(angle), 0.001); var/cosval = round(cos(angle), 0.001) + return list(1,0,0,0, 0,cosval,sinval,0, 0,-sinval,cosval,0, 0,0,0,1, 0,0,0,0) + +/// Rotates around the green axis +/proc/color_matrix_rotate_y(angle) + var/sinval = round(sin(angle), 0.001); var/cosval = round(cos(angle), 0.001) + return list(cosval,0,-sinval,0, 0,1,0,0, sinval,0,cosval,0, 0,0,0,1, 0,0,0,0) + +/// Rotates around the blue axis +/proc/color_matrix_rotate_z(angle) + var/sinval = round(sin(angle), 0.001); var/cosval = round(cos(angle), 0.001) + return list(cosval,sinval,0,0, -sinval,cosval,0,0, 0,0,1,0, 0,0,0,1, 0,0,0,0) + + +/// Returns a matrix addition of A with B +/proc/color_matrix_add(list/A, list/B) + if(!istype(A) || !istype(B)) + return color_matrix_identity() + if(A.len != 20 || B.len != 20) + return color_matrix_identity() + var/list/output = list() + output.len = 20 + for(var/value in 1 to 20) + output[value] = A[value] + B[value] + return output + +/// Returns a matrix multiplication of A with B +/proc/color_matrix_multiply(list/A, list/B) + if(!istype(A) || !istype(B)) + return color_matrix_identity() + if(A.len != 20 || B.len != 20) + return color_matrix_identity() + var/list/output = list() + output.len = 20 + var/x = 1 + var/y = 1 + var/offset = 0 + for(y in 1 to 5) + offset = (y-1)*4 + for(x in 1 to 4) + output[offset+x] = round(A[offset+1]*B[x] + A[offset+2]*B[x+4] + A[offset+3]*B[x+8] + A[offset+4]*B[x+12]+(y == 5?B[x+16]:0), 0.001) + return output + +/// Converts RGB shorthands into RGBA matrices complete of constants rows (ergo a 20 keys list in byond). +/proc/color_to_full_rgba_matrix(color) + if(istext(color)) + var/list/L = ReadRGB(color) + if(!L) + CRASH("Invalid/unsupported color format argument in color_to_full_rgba_matrix()") + return list(L[1]/255,0,0,0, 0,L[2]/255,0,0, 0,0,L[3]/255,0, 0,0,0,L.len>3?L[4]/255:1, 0,0,0,0) + else if(!islist(color)) //invalid format + return color_matrix_identity() + var/list/L = color + switch(L.len) + if(3 to 5) // row-by-row hexadecimals + . = list() + for(var/a in 1 to L.len) + var/list/rgb = ReadRGB(L[a]) + for(var/b in rgb) + . += b/255 + if(length(rgb) % 4) // RGB has no alpha instruction + . += a != 4 ? 0 : 1 + if(L.len < 4) //missing both alphas and constants rows + . += list(0,0,0,1, 0,0,0,0) + else if(L.len < 5) //missing constants row + . += list(0,0,0,0) + if(9 to 12) //RGB + . = list(L[1],L[2],L[3],0, L[4],L[5],L[6],0, L[7],L[8],L[9],0, 0,0,0,1) + for(var/b in 1 to 3) //missing constants row + . += L.len < 9+b ? 0 : L[9+b] + . += 0 + if(16 to 20) // RGBA + . = L.Copy() + if(L.len < 20) //missing constants row + for(var/b in 1 to 20-L.len) + . += 0 else - x = delta_index[value] * (1-x) + delta_index[value+1] * x//use linear interpolation for more granularity. - x = x * 127 + 127 - - var/mult = x / 127 - var/add = 0.5 * (127-x) / 255 - return list(mult,0,0, 0,mult,0, 0,0,mult, add,add,add) - -//Exxagerates or removes colors -/proc/color_saturation(value as num) - if(value == 0) - return color_identity() - value = clamp(value, -100, 100) - if(value > 0) - value *= 3 - var/x = 1 + value / 100 - var/inv = 1 - x - var/R = LUMR * inv - var/G = LUMG * inv - var/B = LUMB * inv - - return list(R + x,R,R, G,G + x,G, B,B,B + x) - -#undef LUMR -#undef LUMG -#undef LUMB \ No newline at end of file + CRASH("Invalid/unsupported color format argument in color_to_full_rgba_matrix()") + +#undef LUMA_R +#undef LUMA_G +#undef LUMA_B \ No newline at end of file diff --git a/code/game/objects/items/cryobag.dm b/code/game/objects/items/cryobag.dm index 9d7ed58d5aa..fd0650c3fd6 100644 --- a/code/game/objects/items/cryobag.dm +++ b/code/game/objects/items/cryobag.dm @@ -72,13 +72,13 @@ add_overlay(I) /obj/structure/closet/body_bag/cryobag/proc/get_saturation() - return -155 * (1 - stasis_power/initial(stasis_power)) + return stasis_power / initial(stasis_power) /obj/structure/closet/body_bag/cryobag/fold(var/user) var/obj/item/bodybag/cryobag/folded = ..() if(istype(folded)) folded.stasis_power = stasis_power - folded.color = color_saturation(get_saturation()) + folded.color = color_matrix_saturation(get_saturation()) /obj/structure/closet/body_bag/cryobag/Process() if(stasis_power < 2) @@ -90,7 +90,7 @@ if(degradation_time < 0) degradation_time = initial(degradation_time) stasis_power = round(0.75 * stasis_power) - animate(src, color = color_saturation(get_saturation()), time = 10) + animate(src, color = color_matrix_saturation(get_saturation()), time = 10) update_icon() if(H.stasis_sources[STASIS_CRYOBAG] != stasis_power) diff --git a/code/modules/client/client_color_definitions.dm b/code/modules/client/client_color_definitions.dm index 86648ee16fa..bb90e887dd7 100644 --- a/code/modules/client/client_color_definitions.dm +++ b/code/modules/client/client_color_definitions.dm @@ -4,8 +4,8 @@ /datum/client_color/deuteranopia priority = 100 client_color = list( - 0.47,0.38,0.15, - 0.54,0.31,0.15, + 0.47,0.38,0.15, + 0.54,0.31,0.15, 0,0.3,0.7 ) wire_colour_substitutions = list( @@ -13,15 +13,15 @@ "darkred" = "black", "purple" = "blue", "orange" = "yellow", - "brown" = "yellow", + "brown" = "yellow", "green" = "yellow" ) /datum/client_color/protanopia priority = 100 client_color = list( - 0.51,0.4,0.12, - 0.49,0.41,0.12, + 0.51,0.4,0.12, + 0.49,0.41,0.12, 0,0.2,0.76 ) wire_colour_substitutions = list( @@ -29,22 +29,22 @@ "darkred" = "black", "purple" = "blue", "orange" = "yellow", - "brown" = "yellow", + "brown" = "yellow", "green" = "yellow" ) /datum/client_color/tritanopia priority = 100 client_color = list( - 0.95,0.07,0, - 0,0.44,0.52, + 0.95,0.07,0, + 0,0.44,0.52, 0.05,0.49,0.48 ) wire_colour_substitutions = list( - "blue" = "green", + "blue" = "green", "orange" = "pink", - "brown" = "pink", - "gold" = "pink", + "brown" = "pink", + "gold" = "pink", "yellow" = "pink", "cyan" = "green", "navy" = "green", @@ -54,18 +54,18 @@ /datum/client_color/achromatopsia priority = 100 client_color = list( - 0.33,0.33,0.33, - 0.33,0.33,0.33, + 0.33,0.33,0.33, + 0.33,0.33,0.33, 0.33,0.33,0.33 ) wire_colour_substitutions = list( - "red" = "gray", - "blue" = "black", - "green" = "gray", - "darkred" = "black", + "red" = "gray", + "blue" = "black", + "green" = "gray", + "darkred" = "black", "orange" = "gray", - "brown" = "gray", - "gold" = "gray", + "brown" = "gray", + "gold" = "gray", "cyan" = "gray", "navy" = "gray", "purple" = "black", @@ -87,13 +87,13 @@ priority = INFINITY //This effect sort of exists on its own you /have/ to be seeing RED override = TRUE //Because multiplying this will inevitably fail wire_colour_substitutions = list( - "red" = "red", - "blue" = "red", - "green" = "red", - "darkred" = "red", + "red" = "red", + "blue" = "red", + "green" = "red", + "darkred" = "red", "orange" = "red", - "brown" = "red", - "gold" = "red", + "brown" = "red", + "gold" = "red", "cyan" = "red", "navy" = "red", "purple" = "red", @@ -103,4 +103,4 @@ ) /datum/client_color/oversaturated/New() - client_color = color_saturation(40) + client_color = color_matrix_saturation(1.4) diff --git a/code/modules/clothing/under/accessories/accessory_toggleable.dm b/code/modules/clothing/under/accessories/accessory_toggleable.dm index 1c7712c3b0a..0720696be1d 100644 --- a/code/modules/clothing/under/accessories/accessory_toggleable.dm +++ b/code/modules/clothing/under/accessories/accessory_toggleable.dm @@ -91,7 +91,7 @@ /obj/item/clothing/accessory/toggleable/hawaii/random/Initialize() . = ..() icon = pick('icons/clothing/accessories/clothing/hawaiian.dmi', 'icons/clothing/accessories/clothing/hawaiian_alt.dmi') - color = color_rotation(rand(-11,12)*15) + color = color_matrix_rotate_hue(rand(-11,12)*15) /obj/item/clothing/accessory/toggleable/zhongshan name = "zhongshan suit jacket" diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index c76ac682af5..e414cd6f8a8 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -8,7 +8,7 @@ /datum/event/ionstorm/get_skybox_image() if(!cloud_hueshift) - cloud_hueshift = color_rotation(rand(-3,3)*15) + cloud_hueshift = color_matrix_rotate_hue(rand(-3,3)*15) var/image/res = overlay_image('icons/skybox/ionbox.dmi', "ions", cloud_hueshift, RESET_COLOR) res.blend_mode = BLEND_ADD return res diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm index 6a4fd3d4302..02e12536523 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/jelly.dm @@ -21,7 +21,7 @@ /mob/living/simple_animal/hostile/retaliate/jelly/Initialize() . = ..() if(gets_random_color) - color = color_rotation(round(rand(0,360),20)) + color = color_matrix_rotate_hue(round(rand(0,360),20)) /mob/living/simple_animal/hostile/retaliate/jelly/alt icon = 'icons/mob/simple_animal/jelly_alt.dmi' @@ -46,7 +46,7 @@ if(W) W.force *= jelly_scale if(!megajelly_color) - megajelly_color = color_rotation(round(rand(0,360),20)) + megajelly_color = color_matrix_rotate_hue(round(rand(0,360),20)) color = megajelly_color /mob/living/simple_animal/hostile/retaliate/jelly/mega/death() diff --git a/code/modules/reagents/chems/random/random_effects.dm b/code/modules/reagents/chems/random/random_effects.dm index cec658a1c78..cb99074ef70 100644 --- a/code/modules/reagents/chems/random/random_effects.dm +++ b/code/modules/reagents/chems/random/random_effects.dm @@ -48,7 +48,7 @@ reagent.name = "[initial(reagent.name)]-[value]" /decl/random_chem_effect/general_properties/color/get_random_value() - return color_rotation(round(rand(0,360),20)) + return color_matrix_rotate_hue(round(rand(0,360),20)) /decl/random_chem_effect/general_properties/color/on_property_recompute(var/decl/material/liquid/random/reagent, var/value) reagent.color = value diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm index ba129fa4dc4..e3211095dc4 100644 --- a/code/modules/supermatter/supermatter.dm +++ b/code/modules/supermatter/supermatter.dm @@ -539,7 +539,7 @@ var/global/list/supermatter_delam_accent_sounds = list( if(!power) animate_filter("outline", list(size = 0)) - color = color_contrast(Interpolate(0, 50, clamp( (damage - emergency_point) / (explosion_point - emergency_point),0,1))) + color = color_matrix_contrast(Interpolate(1, 5, clamp( (damage - emergency_point) / (explosion_point - emergency_point), 0, 1))) if (damage >= emergency_point && !damage_animation) start_damage_animation() From 904d86323b625757985adbea1e42aab36bdbbccc Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Sun, 22 Jan 2023 15:04:39 -0600 Subject: [PATCH 066/239] Fix codex nexus header --- code/modules/codex/entries/codex.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/codex/entries/codex.dm b/code/modules/codex/entries/codex.dm index 4028038ddb1..e7f621bf40f 100644 --- a/code/modules/codex/entries/codex.dm +++ b/code/modules/codex/entries/codex.dm @@ -21,7 +21,7 @@ mechanics_text = "The place to start with The Codex
" /datum/codex_entry/nexus/get_codex_body(mob/presenting_to, include_header, include_footer) - . = list(get_codex_header(presenting_to)) + . = get_codex_header(presenting_to) . += "[mechanics_text]" . += "

Categories

" var/list/category_strings From d8d7f65a551b94238d3280f68c648b6614002b39 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 23 Jan 2023 17:46:43 -0600 Subject: [PATCH 067/239] Make async tests await subsystems properly --- code/unit_tests/proximity_tests.dm | 1 + code/unit_tests/unit_test.dm | 6 ++++++ code/unit_tests/~unit_test_subsystems.dm | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/code/unit_tests/proximity_tests.dm b/code/unit_tests/proximity_tests.dm index 51d4ea01d33..5e60114967c 100644 --- a/code/unit_tests/proximity_tests.dm +++ b/code/unit_tests/proximity_tests.dm @@ -10,6 +10,7 @@ name = "PROXIMITY: " + name /datum/unit_test/proximity/setup_test() + ..() proximity_listener = new(get_turf(locate(/obj/abstract/landmark/proximity_spawner))) wall = get_turf(locate(/obj/abstract/landmark/proximity_wall)) diff --git a/code/unit_tests/unit_test.dm b/code/unit_tests/unit_test.dm index ee059a2c56b..0318f7f0530 100644 --- a/code/unit_tests/unit_test.dm +++ b/code/unit_tests/unit_test.dm @@ -61,6 +61,7 @@ var/global/ascii_reset = "[ascii_esc]\[0m" var/static/safe_landmark var/static/space_landmark var/check_cleanup + var/list/times_fired_at_setup /datum/unit_test/proc/log_debug(var/message) log_unit_test("[ascii_yellow]--- DEBUG --- \[[name]\]: [message][ascii_reset]") @@ -85,6 +86,11 @@ var/global/ascii_reset = "[ascii_esc]\[0m" // Executed before the test runs - Primarily intended for shared setup (generally in templates) /datum/unit_test/proc/setup_test() + SHOULD_CALL_PARENT(TRUE) + if(async) + LAZYINITLIST(times_fired_at_setup) + for(var/datum/controller/subsystem/subsystem_to_await in subsystems_to_await()) + times_fired_at_setup[subsystem_to_await] = subsystem_to_await.times_fired return /datum/unit_test/proc/start_test() diff --git a/code/unit_tests/~unit_test_subsystems.dm b/code/unit_tests/~unit_test_subsystems.dm index f28204059c2..67863cbb07f 100644 --- a/code/unit_tests/~unit_test_subsystems.dm +++ b/code/unit_tests/~unit_test_subsystems.dm @@ -108,7 +108,7 @@ SUBSYSTEM_DEF(unit_tests) var/datum/unit_test/test = current_async[async.len] for(var/S in test.subsystems_to_await()) var/datum/controller/subsystem/subsystem = S - if(subsystem.times_fired < 1) + if(subsystem.times_fired <= test.times_fired_at_setup[subsystem]) return async.len-- if(check_unit_test(test, end_unit_tests)) From b86d091632b21316c3f00b344c379c439825a20c Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Tue, 24 Jan 2023 00:45:02 +0000 Subject: [PATCH 068/239] Automatic changelog generation [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 906b3c891eb..e4fc71bb31b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -125,12 +125,6 @@

PsyCommando updated:

  • Fixed /obj/item/chems being shattered in nullspace causing a runtime.
- -

22 November 2022

-

PsyCommando updated:

-
    -
  • Added some fairly bad wrapped package icons, and wrapped gifts icons.
  • -
From 816806c095069164f8bc4c5bad9a864d06bf8b8e Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 23 Jan 2023 23:59:06 -0600 Subject: [PATCH 069/239] Apply suggestions from code review --- code/game/atoms.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index c261e829bd4..558f27d0136 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -284,10 +284,10 @@ its easier to just keep the beam vertical. /atom/proc/explosion_act(var/severity) SHOULD_CALL_PARENT(TRUE) - if(!currently_exploding) + . = !currently_exploding && severity > 0 && severity <= 3 + if(.) currently_exploding = TRUE - . = (severity <= 3) - if(.) + if(severity < 3) for(var/atom/movable/AM in get_contained_external_atoms()) AM.explosion_act(severity + 1) try_detonate_reagents(severity) From 724300087589d67391d168664f07315cd8b985f0 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Tue, 24 Jan 2023 00:06:54 -0600 Subject: [PATCH 070/239] Mark or fix leaking pipes in exoplanet ruins --- .../exoplanet_ruins/crashed_pod/crashed_pod.dmm | 9 ++++++++- maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm | 4 ++++ .../exoplanet_ruins/playablecolony/colony.dmm | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm index b61dad4848b..f038b5a6abb 100644 --- a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm +++ b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm @@ -33,6 +33,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 6 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/wall/r_wall, /area/map_template/crashed_pod) "ag" = ( @@ -98,11 +99,13 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/techfloor/grid, /area/map_template/crashed_pod) "an" = ( /obj/machinery/atmospherics/omni/filter, /obj/effect/decal/cleanable/dirt, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/techfloor/grid, /area/map_template/crashed_pod) "ao" = ( @@ -112,6 +115,7 @@ /obj/effect/decal/cleanable/dirt, /obj/item/trash/tastybread, /obj/item/chems/drinks/cans/speer, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/techfloor/grid, /area/map_template/crashed_pod) "ap" = ( @@ -180,11 +184,13 @@ }, /obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/dirt, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/techfloor, /area/map_template/crashed_pod) "av" = ( /obj/machinery/atmospherics/omni/filter, /obj/effect/decal/cleanable/dirt, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/techfloor, /area/map_template/crashed_pod) "aw" = ( @@ -192,6 +198,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/techfloor/grid, /area/map_template/crashed_pod) "ax" = ( @@ -234,6 +241,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 5 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/wall, /area/map_template/crashed_pod) "aE" = ( @@ -452,7 +460,6 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/light{ dir = 1 }, diff --git a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm b/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm index e2c5d115b68..44c9a9bfe0f 100644 --- a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm +++ b/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm @@ -46,6 +46,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating, /area/map_template/oldpod) "ai" = ( @@ -62,6 +63,7 @@ /obj/machinery/atmospherics/portables_connector{ dir = 8 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/plating, /area/map_template/oldpod) "ak" = ( @@ -147,6 +149,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/monotile, /area/map_template/oldpod) "av" = ( @@ -155,6 +158,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/monotile, /area/map_template/oldpod) "aw" = ( diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm index 32cb98e13df..6e500158073 100644 --- a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm +++ b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm @@ -2405,6 +2405,7 @@ /area/map_template/colony/atmospherics) "fi" = ( /obj/machinery/atmospherics/pipe/simple/visible/black, +/obj/abstract/landmark/allowed_leak, /turf/exterior/concrete, /area/template_noop) "fj" = ( @@ -3662,6 +3663,7 @@ /obj/structure/railing/mapped{ dir = 8 }, +/obj/abstract/landmark/allowed_leak, /turf/exterior/concrete, /area/template_noop) "hr" = ( From 5251cdbc35c499a6026c2b50fdf8689fe107cdaa Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Tue, 24 Jan 2023 00:08:08 -0600 Subject: [PATCH 071/239] Unregister moved in material_processing/Destroy --- code/modules/mining/machinery/_material_processing.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mining/machinery/_material_processing.dm b/code/modules/mining/machinery/_material_processing.dm index 3b7f9baa901..0d20dfaf71b 100644 --- a/code/modules/mining/machinery/_material_processing.dm +++ b/code/modules/mining/machinery/_material_processing.dm @@ -90,6 +90,7 @@ /obj/machinery/material_processing/Destroy() input_turf = null output_turf = null + events_repository.unregister(/decl/observ/moved, src, src, .proc/on_moved) . = ..() /obj/machinery/material_processing/Initialize() From c293b5489474dcff947ddcb1f746745703ef74d0 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Fri, 20 Jan 2023 18:13:15 +1100 Subject: [PATCH 072/239] Removes TEMPLATE_FLAG_TEST_DUPLICATES from the mercenary base. --- maps/antag_spawn/mercenary/mercenary.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/maps/antag_spawn/mercenary/mercenary.dm b/maps/antag_spawn/mercenary/mercenary.dm index 84fbd71e180..fe4ea4684e7 100644 --- a/maps/antag_spawn/mercenary/mercenary.dm +++ b/maps/antag_spawn/mercenary/mercenary.dm @@ -3,7 +3,6 @@ id = "mercenary_spawn" suffixes = list("mercenary/mercenary_base.dmm") shuttles_to_initialise = list(/datum/shuttle/autodock/overmap/merc_shuttle) - template_flags = TEMPLATE_FLAG_TEST_DUPLICATES apc_test_exempt_areas = list( /area/map_template/merc_spawn = NO_SCRUBBER|NO_VENT ) From 42d2c3ead4c0bc8e59de1ce56ccdc4b5bba3db62 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Fri, 20 Jan 2023 15:58:39 +1100 Subject: [PATCH 073/239] Porting LemonInTheDark's scheduler optimizations. --- code/controllers/master.dm | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 49a05a04af1..0072bd2612a 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -259,7 +259,7 @@ var/global/datum/controller/master/Master = new SS.state = SS_IDLE if (SS.flags & SS_TICKER) tickersubsystems += SS - timer += world.tick_lag * rand(1, 5) + timer += world.tick_lag * rand(0,1) SS.next_fire = timer continue @@ -334,14 +334,16 @@ var/global/datum/controller/master/Master = new var/checking_runlevel = current_runlevel if(cached_runlevel != checking_runlevel) //resechedule subsystems + var/list/old_subsystems = current_runlevel_subsystems cached_runlevel = checking_runlevel current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel] - var/stagger = world.time - for(var/I in current_runlevel_subsystems) - var/datum/controller/subsystem/SS = I - if(SS.next_fire <= world.time) - stagger += world.tick_lag * rand(1, 5) - SS.next_fire = stagger + + //now we'll go through all the subsystems we want to offset and give them a next_fire + for(var/datum/controller/subsystem/SS as anything in current_runlevel_subsystems) + //we only want to offset it if it's new and also behind + if(SS.next_fire > world.time || (SS in old_subsystems)) + continue + SS.next_fire = world.time + world.tick_lag * rand(0, DS2TICKS(min(SS.wait, 2 SECONDS))) subsystems_to_check = current_runlevel_subsystems else From afffce2abae0e09eccc89b3218893c8873c65200 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Sun, 22 Jan 2023 21:07:30 -0600 Subject: [PATCH 074/239] Fix uneven row width in job menu --- code/modules/mob/new_player/new_player.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 27e88636b08..7bd6b17e012 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -312,7 +312,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player) added_job = TRUE if(!added_job) - dat += "No available positions." + dat += "No available positions." // END MAIN MAP JOBS // SUBMAP JOBS From a0ed7f209bd0a9e9cce5fe8802b7703e2f69448c Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 23 Jan 2023 23:46:07 -0600 Subject: [PATCH 075/239] Fix BUCKET_POS for ticklags with non-integer reciprocals --- code/controllers/subsystems/timer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/subsystems/timer.dm b/code/controllers/subsystems/timer.dm index 03d0ccd3ca1..298d4e28dd6 100644 --- a/code/controllers/subsystems/timer.dm +++ b/code/controllers/subsystems/timer.dm @@ -1,7 +1,7 @@ /// Controls how many buckets should be kept, each representing a tick. (1 minutes worth) #define BUCKET_LEN (world.fps*1*60) /// Helper for getting the correct bucket for a given timer -#define BUCKET_POS(timer) (((round((timer.timeToRun - timer.timer_subsystem.head_offset) / world.tick_lag)+1) % BUCKET_LEN)||BUCKET_LEN) +#define BUCKET_POS(timer) (((CEILING((timer.timeToRun - timer.timer_subsystem.head_offset) / world.tick_lag)+1) % BUCKET_LEN)||BUCKET_LEN) /// Gets the maximum time at which timers will be invoked from buckets, used for deferring to secondary queue #define TIMER_MAX(timer_ss) (timer_ss.head_offset + TICKS2DS(BUCKET_LEN + timer_ss.practical_offset - 1)) /// Max float with integer precision From 12fedcacd8ffe965987a0505911e235683dea88a Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Sat, 21 Jan 2023 22:03:52 -0600 Subject: [PATCH 076/239] Fix grab interaction showing up for anchored atoms --- code/game/atoms_movable.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 5a2c6375587..a220144a3b0 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -521,6 +521,9 @@ expected_target_type = /atom/movable interaction_flags = INTERACTION_NEEDS_PHYSICAL_INTERACTION | INTERACTION_NEEDS_TURF +/decl/interaction_handler/grab/is_possible(atom/movable/target, mob/user, obj/item/prop) + return ..() && !target.anchored + /decl/interaction_handler/grab/invoked(atom/target, mob/user, obj/item/prop) var/atom/movable/AM = target AM.try_make_grab(user, defer_hand = TRUE) From 9c061a9f634ad0b1754b30ebb12baad47cfbceea Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Mon, 23 Jan 2023 01:33:10 -0600 Subject: [PATCH 077/239] Pause subsystems during random_map auto-apply --- code/modules/random_map/random_map.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/random_map/random_map.dm b/code/modules/random_map/random_map.dm index d861b1eef6d..c0b3ce9fa9a 100644 --- a/code/modules/random_map/random_map.dm +++ b/code/modules/random_map/random_map.dm @@ -136,7 +136,9 @@ var/global/list/map_count = list() if(check_map_sanity()) cleanup() if(auto_apply) + Master.StartLoadingMap() apply_to_map() + Master.StopLoadingMap() return 1 return 0 From 79be31323c6cb5620f73c69edb225d60756fb48a Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Tue, 24 Jan 2023 13:01:07 -0600 Subject: [PATCH 078/239] Fix stacked pipes on the Unishi --- maps/away/unishi/unishi-3.dmm | 36 ++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/maps/away/unishi/unishi-3.dmm b/maps/away/unishi/unishi-3.dmm index 5f6a5cf3a3d..5a1a0d149d2 100644 --- a/maps/away/unishi/unishi-3.dmm +++ b/maps/away/unishi/unishi-3.dmm @@ -1272,11 +1272,11 @@ /area/unishi/living) "dE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/item/caution, /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/unishi/living) "dF" = ( @@ -1959,6 +1959,12 @@ /obj/random/clothing, /turf/simulated/floor/tiled, /area/unishi/living) +"yC" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/unishi/living) "zD" = ( /obj/structure/closet/secure_closet/personal/cabinet, /obj/random/cash, @@ -1968,6 +1974,14 @@ /obj/random/hat, /turf/simulated/floor/wood, /area/unishi/living) +"AF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/unishi/living) "AK" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -1980,8 +1994,8 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor/tiled, /area/unishi/living) @@ -6230,9 +6244,9 @@ aO aO aO aO -aO -aO -aO +aP +aP +aP aO aO aO @@ -6940,7 +6954,7 @@ bn ds bn dE -bn +AF dR dU dY @@ -7659,7 +7673,7 @@ aP aP aP aP -aP +yC aP aP aP @@ -7862,9 +7876,9 @@ aO aO aO aO -aO -aO -aO +aP +aP +aP aO aO aO From d967e4eb939a2ac67cc0b2386d3cc4b3afec07b3 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Sat, 21 Jan 2023 03:26:20 -0600 Subject: [PATCH 079/239] Fix data and arguments for on_leaving_metabolism Pass holder instead of my_atom and metabolism_class --- code/modules/materials/_materials.dm | 2 +- .../definitions/liquids/materials_liquid_toxins.dm | 4 ++-- code/modules/reagents/Chemistry-Metabolism.dm | 7 ++++--- code/modules/reagents/chems/chems_compounds.dm | 6 +++--- code/modules/reagents/chems/chems_drugs.dm | 4 ++-- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/code/modules/materials/_materials.dm b/code/modules/materials/_materials.dm index b1fb4c92d92..d1b9a430f31 100644 --- a/code/modules/materials/_materials.dm +++ b/code/modules/materials/_materials.dm @@ -523,7 +523,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) /decl/material/proc/get_wall_texture() return -/decl/material/proc/on_leaving_metabolism(var/atom/parent, var/metabolism_class) +/decl/material/proc/on_leaving_metabolism(datum/reagents/metabolism/holder) return #define ACID_MELT_DOSE 10 diff --git a/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm b/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm index 06399f18778..53db49eba28 100644 --- a/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm +++ b/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm @@ -149,8 +149,8 @@ M.timeofdeath = world.time M.add_chemical_effect(CE_NOPULSE, 1) -/decl/material/liquid/zombiepowder/on_leaving_metabolism(atom/parent, metabolism_class) - var/mob/M = parent +/decl/material/liquid/zombiepowder/on_leaving_metabolism(datum/reagents/metabolism/holder) + var/mob/M = holder?.my_atom if(istype(M)) M.status_flags &= ~FAKEDEATH . = ..() diff --git a/code/modules/reagents/Chemistry-Metabolism.dm b/code/modules/reagents/Chemistry-Metabolism.dm index 92a31f000a0..e1002809b1f 100644 --- a/code/modules/reagents/Chemistry-Metabolism.dm +++ b/code/modules/reagents/Chemistry-Metabolism.dm @@ -3,10 +3,11 @@ var/mob/living/parent /datum/reagents/metabolism/clear_reagent(var/reagent_type, var/defer_update = FALSE, var/force = FALSE) - . = ..() - if(.) + // Duplicated check so that reagent data is accessible in on_leaving_metabolism. + if(force || !!(REAGENT_VOLUME(src, reagent_type) || REAGENT_DATA(src, reagent_type))) var/decl/material/current = GET_DECL(reagent_type) - current.on_leaving_metabolism(parent, metabolism_class) + current.on_leaving_metabolism(src) + . = ..() /datum/reagents/metabolism/New(var/max = 100, mob/living/parent_mob, var/met_class) ..(max, parent_mob) diff --git a/code/modules/reagents/chems/chems_compounds.dm b/code/modules/reagents/chems/chems_compounds.dm index f744085c318..9b5d65415c0 100644 --- a/code/modules/reagents/chems/chems_compounds.dm +++ b/code/modules/reagents/chems/chems_compounds.dm @@ -28,9 +28,9 @@ var/mob/living/carbon/human/H = M H.update_eyes() -/decl/material/liquid/glowsap/on_leaving_metabolism(atom/parent, metabolism_class) - if(ishuman(parent)) - var/mob/living/carbon/human/H = parent +/decl/material/liquid/glowsap/on_leaving_metabolism(datum/reagents/metabolism/holder) + if(ishuman(holder?.my_atom)) + var/mob/living/carbon/human/H = holder.my_atom addtimer(CALLBACK(H, /mob/living/carbon/human/proc/update_eyes), 5 SECONDS) . = ..() diff --git a/code/modules/reagents/chems/chems_drugs.dm b/code/modules/reagents/chems/chems_drugs.dm index 68e9b46dee8..cd4cf0c8f3a 100644 --- a/code/modules/reagents/chems/chems_drugs.dm +++ b/code/modules/reagents/chems/chems_drugs.dm @@ -215,9 +215,9 @@ if(prob(5)) to_chat(M, SPAN_WARNING("[pick(dose_messages)]")) -/decl/material/liquid/glowsap/gleam/on_leaving_metabolism(var/atom/parent, var/metabolism_class) +/decl/material/liquid/glowsap/gleam/on_leaving_metabolism(datum/reagents/metabolism/holder) . = ..() - var/mob/M = parent + var/mob/M = holder?.my_atom if(istype(M)) M.remove_client_color(/datum/client_color/noir/thirdeye) From f03e83e39381a5e5f5564f164dcec393839cfe9a Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Wed, 25 Jan 2023 00:41:35 +0000 Subject: [PATCH 080/239] Automatic changelog generation [ci skip] --- html/changelog.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index e4fc71bb31b..4b294dbbe08 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -119,12 +119,6 @@

PsyCommando updated:

  • Fix mapped network machinery fields.
  • Fixed bad switch case in robot_component/take_damage() causing BURN and ELECTROCUTE damage to get ignored.
  • - -

    23 November 2022

    -

    PsyCommando updated:

    -
      -
    • Fixed /obj/item/chems being shattered in nullspace causing a runtime.
    • -
    From 41d920bbb03ec2c4010095d1b9629addb7df3796 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Wed, 25 Jan 2023 13:21:39 -0600 Subject: [PATCH 081/239] Mark variable_setter as non-spawnable --- code/modules/maps/helper_landmarks.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/maps/helper_landmarks.dm b/code/modules/maps/helper_landmarks.dm index 0063d359791..1c1cb5131c5 100644 --- a/code/modules/maps/helper_landmarks.dm +++ b/code/modules/maps/helper_landmarks.dm @@ -103,6 +103,7 @@ // Has a percent chance on spawn to set the specified variable on the specified type to the specified value. /obj/abstract/landmark/variable_setter + is_spawnable_type = FALSE var/type_to_find var/variable_to_set var/value_to_set From 39ddd22360c200c6d98ecda87b0020f5305e4fd2 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Wed, 25 Jan 2023 01:16:14 -0600 Subject: [PATCH 082/239] Move submap spawnpoints with shuttles --- code/__defines/flags.dm | 2 +- code/_helpers/turfs.dm | 10 +++------- code/modules/submaps/submap_landmark.dm | 1 + maps/away/liberia/liberia_jobs.dm | 1 - 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/code/__defines/flags.dm b/code/__defines/flags.dm index 2e2a738150d..950e4dc9af1 100644 --- a/code/__defines/flags.dm +++ b/code/__defines/flags.dm @@ -53,7 +53,7 @@ The latter will result in a linter warning and will not work correctly. // Movable-level flags (/atom/movable/movable_flags) #define MOVABLE_FLAG_PROXMOVE BITFLAG(0) // Does this object require proximity checking in Enter()? #define MOVABLE_FLAG_Z_INTERACT BITFLAG(1) // Should attackby and attack_hand be relayed through ladders and open spaces? -#define MOVABLE_FLAG_EFFECTMOVE BITFLAG(2) // Is this an effect that should move? +#define MOVABLE_FLAG_ALWAYS_SHUTTLEMOVE BITFLAG(2) // Is this an effect that should move? #define MOVABLE_FLAG_DEL_SHUTTLE BITFLAG(3) // Shuttle transistion will delete this. #define MOVABLE_FLAG_WHEELED BITFLAG(4) // Movable has reduced stamina cost/speed reduction when pulled. diff --git a/code/_helpers/turfs.dm b/code/_helpers/turfs.dm index e8f466e6179..385edc0c61f 100644 --- a/code/_helpers/turfs.dm +++ b/code/_helpers/turfs.dm @@ -133,7 +133,7 @@ var/supported = FALSE // Whether or not there's an object in the turf which can support other objects. if(is_background) new_turf = target - else + else new_turf = target.ChangeTurf(source.type, 1, 1) new_turf.transport_properties_from(source) new_turf.prev_type = target_type @@ -144,12 +144,8 @@ break for(var/obj/O in source) - if(O.simulated && (!is_background || supported || O.obj_flags & OBJ_FLAG_MOVES_UNSUPPORTED)) + if((O.movable_flags & MOVABLE_FLAG_ALWAYS_SHUTTLEMOVE) || (O.simulated && (!is_background || supported || (O.obj_flags & OBJ_FLAG_MOVES_UNSUPPORTED)))) O.forceMove(new_turf) - else if(istype(O,/obj/effect)) // This is used for non-game objects like spawnpoints, so ignore the background check. - var/obj/effect/E = O - if(E.movable_flags & MOVABLE_FLAG_EFFECTMOVE) - E.forceMove(new_turf) for(var/mob/M in source) if(is_background && !supported) @@ -160,5 +156,5 @@ if(is_background) return list(new_turf, source) - + return new_turf diff --git a/code/modules/submaps/submap_landmark.dm b/code/modules/submaps/submap_landmark.dm index cf33c19bd49..5c548e584c4 100644 --- a/code/modules/submaps/submap_landmark.dm +++ b/code/modules/submaps/submap_landmark.dm @@ -27,6 +27,7 @@ var/global/list/submap_spawnpoints_by_z = list() INITIALIZE_IMMEDIATE(/obj/abstract/submap_landmark/spawnpoint) /obj/abstract/submap_landmark/spawnpoint + movable_flags = MOVABLE_FLAG_ALWAYS_SHUTTLEMOVE icon_state = "x3" /obj/abstract/submap_landmark/spawnpoint/Initialize() diff --git a/maps/away/liberia/liberia_jobs.dm b/maps/away/liberia/liberia_jobs.dm index 7b0844ca79d..296b2fb57a3 100644 --- a/maps/away/liberia/liberia_jobs.dm +++ b/maps/away/liberia/liberia_jobs.dm @@ -36,7 +36,6 @@ // Spawn points. /obj/abstract/submap_landmark/spawnpoint/liberia name = "Merchant" - movable_flags = MOVABLE_FLAG_EFFECTMOVE /decl/hierarchy/outfit/job/merchant name = "Job - Merchant - Liberia" From 0f9975cffc5273f700e4b01258b15d40de643388 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Wed, 25 Jan 2023 08:30:32 -0600 Subject: [PATCH 083/239] Fix candystripe styling on crew manifest --- code/modules/mob/new_player/new_player.dm | 1 + code/modules/modular_computers/file_system/manifest.dm | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 7bd6b17e012..af123477e9d 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -415,6 +415,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player) dat += html_crew_manifest(OOC = 1) //show_browser(src, dat, "window=manifest;size=370x420;can_close=1") var/datum/browser/popup = new(src, "Crew Manifest", "Crew Manifest", 370, 420, src) + popup.add_stylesheet("nano_shared", 'nano/css/shared.css') popup.set_content(dat) popup.open() diff --git a/code/modules/modular_computers/file_system/manifest.dm b/code/modules/modular_computers/file_system/manifest.dm index 5c8e320192d..f746579b140 100644 --- a/code/modules/modular_computers/file_system/manifest.dm +++ b/code/modules/modular_computers/file_system/manifest.dm @@ -11,11 +11,10 @@ var/dat = {" From 011e4f490e66c752cd785d6aaea6d8cdaea36068 Mon Sep 17 00:00:00 2001 From: PsyCommando Date: Wed, 25 Jan 2023 03:53:03 -0500 Subject: [PATCH 084/239] VV handler for direction_offset Automatically updates directional_offset when the var's json is modified in VV --- .../admin/view_variables/vv_set_handlers.dm | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/code/modules/admin/view_variables/vv_set_handlers.dm b/code/modules/admin/view_variables/vv_set_handlers.dm index 8aeff484bae..7c81beb725b 100644 --- a/code/modules/admin/view_variables/vv_set_handlers.dm +++ b/code/modules/admin/view_variables/vv_set_handlers.dm @@ -181,3 +181,17 @@ var/new_scale_y = variable == "icon_scale_y" ? var_value : A.icon_scale_y A.set_scale(new_scale_x, new_scale_y) + + +/decl/vv_set_handler/directional_offset_hander + handled_type = /obj + handled_vars = list("directional_offset") + +/decl/vv_set_handler/directional_offset_hander/handle_set_var(var/obj/O, variable, var_value, client) + if(!istext(var_value) && !isnull(var_value)) + to_chat(client, SPAN_WARNING("You can only enter a JSON string, or nothing in this field!")) + return + + //Set the offset and force update + O.directional_offset = var_value + O.update_directional_offset(TRUE) From d014eb9ae0b5b146df0f3152692232c1e5cad896 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Tue, 24 Jan 2023 17:41:27 -0600 Subject: [PATCH 085/239] Mark leaks in expeditionary ship ruin as allowed --- .../ruins/ec_old_crash/ec_old_crash.dmm | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm b/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm index e9f433ed1b5..32eb5ee9437 100644 --- a/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm +++ b/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm @@ -79,6 +79,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/map_template/ecship/cockpit) "ao" = ( @@ -310,6 +311,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/map_template/ecship/cryo) "aT" = ( @@ -405,6 +407,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/airless, /area/map_template/ecship/cryo) "bf" = ( @@ -479,6 +482,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/white/lowpressure, /area/map_template/ecship/cryo) "bm" = ( @@ -509,6 +513,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/airless, /area/map_template/ecship/crew) "bp" = ( @@ -788,6 +793,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor, /area/map_template/ecship/crew) "bQ" = ( @@ -970,6 +976,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor, /area/map_template/ecship/science) "ci" = ( @@ -1222,6 +1229,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/abstract/landmark/allowed_leak, /turf/simulated/floor/tiled/lowpressure, /area/map_template/ecship/engineering) "cJ" = ( @@ -1352,14 +1360,14 @@ dir = 8; icon_state = "tube1" }, -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 4 - }, /obj/effect/floor_decal/corner/yellow{ dir = 9 }, /obj/structure/emergency_dispenser/west, /obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8 + }, /turf/simulated/floor, /area/map_template/ecship/engineering) "cZ" = ( @@ -1914,6 +1922,7 @@ /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/abstract/landmark/clear, +/obj/abstract/landmark/allowed_leak, /turf/template_noop, /area/template_noop) "mD" = ( @@ -1962,6 +1971,15 @@ /obj/abstract/landmark/clear, /turf/template_noop, /area/template_noop) +"XP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/abstract/landmark/allowed_leak, +/turf/simulated/floor/tiled/airless, +/area/map_template/ecship/crew) "YW" = ( /obj/structure/catwalk, /obj/abstract/landmark/scorcher, @@ -2742,7 +2760,7 @@ aO bf by bB -bf +XP cu cC cI From 077eb4179137ed95c2a39e63ae32d9fd8c0fbd01 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Tue, 24 Jan 2023 17:43:21 -0600 Subject: [PATCH 086/239] Remove isPlayerLevel check from pipe leak test --- code/unit_tests/map_tests.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm index c1477660858..a55ad69593f 100644 --- a/code/unit_tests/map_tests.dm +++ b/code/unit_tests/map_tests.dm @@ -544,7 +544,7 @@ /datum/unit_test/pipes_shall_not_leak/start_test() var/failures = 0 for(var/obj/machinery/atmospherics/pipe/P in SSmachines.machinery) - if(P.leaking && isPlayerLevel(P.z) && !(locate(/obj/abstract/landmark/allowed_leak) in get_turf(P))) + if(P.leaking && !(locate(/obj/abstract/landmark/allowed_leak) in get_turf(P))) failures++ log_bad("Following pipe is leaking: [log_info_line(P)]") From 278107edebbcb3d53c1ae0a3056a996bcb0200b0 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Tue, 24 Jan 2023 22:14:52 -0600 Subject: [PATCH 087/239] Fix pipe leak in ninja base --- maps/antag_spawn/ninja/ninja_base.dmm | 29 +++------------------------ 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/maps/antag_spawn/ninja/ninja_base.dmm b/maps/antag_spawn/ninja/ninja_base.dmm index 5cfebb4754c..5ad112b8ff8 100644 --- a/maps/antag_spawn/ninja/ninja_base.dmm +++ b/maps/antag_spawn/ninja/ninja_base.dmm @@ -92,13 +92,6 @@ icon_state = "white" }, /area/map_template/ninja_dojo/dojo) -"ap" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) "aq" = ( /obj/structure/table/glass, /turf/unsimulated/floor{ @@ -129,22 +122,6 @@ icon_state = "white" }, /area/map_template/ninja_dojo/dojo) -"au" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) -"av" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/unsimulated/floor{ - icon_state = "white" - }, -/area/map_template/ninja_dojo/dojo) "aw" = ( /obj/structure/table/glass, /obj/item/storage/box/beakers, @@ -1922,7 +1899,7 @@ ad ad aj ao -au +ao ao aK aT @@ -1964,8 +1941,8 @@ ad ad ad aj -ap -av +ao +ao ao aL aG From f7cc424c42065f023d28789e4fb05c8601514262 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Tue, 24 Jan 2023 22:53:05 -0600 Subject: [PATCH 088/239] Fix leaking pipe in ERT base --- maps/antag_spawn/ert/ert_base.dmm | 34 +++++++------------------------ 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/maps/antag_spawn/ert/ert_base.dmm b/maps/antag_spawn/ert/ert_base.dmm index 610deb5bc54..75d2ed24e47 100644 --- a/maps/antag_spawn/ert/ert_base.dmm +++ b/maps/antag_spawn/ert/ert_base.dmm @@ -2968,11 +2968,9 @@ /obj/machinery/light{ dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"gn" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/obj/machinery/sleeper/standard{ + dir = 8 + }, /turf/simulated/floor/tiled/white, /area/map_template/rescue_base/start) "go" = ( @@ -3011,18 +3009,6 @@ "gw" = ( /turf/simulated/floor/tiled/white, /area/map_template/rescue_base/start) -"gx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) -"gy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) "gz" = ( /obj/machinery/door/airlock/centcom{ name = "Cell" @@ -3070,12 +3056,6 @@ }, /turf/simulated/floor/tiled/white, /area/map_template/rescue_base/start) -"gF" = ( -/obj/machinery/sleeper/standard{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/map_template/rescue_base/start) "gG" = ( /obj/machinery/recharger/wallcharger{ pixel_x = -25 @@ -5452,7 +5432,7 @@ eQ eQ eU gm -gx +gw gw gw gR @@ -5516,8 +5496,8 @@ eQ eQ eQ eU -gn -gy +gw +gw gw gw gw @@ -5583,7 +5563,7 @@ eQ eU go gw -gF +gw gO gS ha From dd2bb935e5ec7c288daf144f768e62543b16f344 Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Wed, 25 Jan 2023 11:49:16 -0600 Subject: [PATCH 089/239] Fix missing scrubber in established colony map --- .../exoplanet_ruins/playablecolony/colony.dmm | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm index 6e500158073..d6b27e9f581 100644 --- a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm +++ b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm @@ -394,15 +394,15 @@ /turf/exterior/concrete, /area/template_noop) "bf" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, /obj/structure/cable{ icon_state = "2-4" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, /turf/simulated/floor/tiled/techfloor, /area/map_template/colony/command) "bg" = ( @@ -441,15 +441,13 @@ /turf/simulated/floor/tiled/techfloor, /area/map_template/colony) "bk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/tiled/techfloor, /area/map_template/colony/command) "bl" = ( @@ -7855,6 +7853,19 @@ /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/tiled/techfloor/grid, /area/map_template/colony/hydroponics) +"CM" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/blue{ + dir = 10 + }, +/obj/effect/floor_decal/techfloor/hole/right{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techfloor, +/area/map_template/colony/command) "Dj" = ( /obj/machinery/portable_atmospherics/hydroponics, /obj/machinery/light{ @@ -9139,7 +9150,7 @@ os (28,1,1) = {" ad aD -aV +CM bk bC ac From fc66f42e63a962e660a85393e156636136a3f8da Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Fri, 27 Jan 2023 00:44:26 +0000 Subject: [PATCH 090/239] Automatic changelog generation [ci skip] --- html/changelog.html | 7 ------- 1 file changed, 7 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 4b294dbbe08..5599b47eccd 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -112,13 +112,6 @@

    PsyCommando updated:

  • Added simple directional icons for airlock controller buttons and sensors.
  • Allowed connecting fuel pipes to TEG circulators.
  • - -

    25 November 2022

    -

    PsyCommando updated:

    -
      -
    • Fix mapped network machinery fields.
    • -
    • Fixed bad switch case in robot_component/take_damage() causing BURN and ELECTROCUTE damage to get ignored.
    • -
    NamePositionActivity
    From b0f6a8c5750c5c6efa337cf03190442d2d2f2213 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Sun, 22 Jan 2023 22:04:42 +1100 Subject: [PATCH 091/239] Fixes the flood overlay being invisible. --- code/game/objects/effects/fluids.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/effects/fluids.dm b/code/game/objects/effects/fluids.dm index 7a61d705e33..0519fecf696 100644 --- a/code/game/objects/effects/fluids.dm +++ b/code/game/objects/effects/fluids.dm @@ -125,7 +125,8 @@ var/global/obj/abstract/flood/flood_object = new color = COLOR_LIQUID_WATER icon = 'icons/effects/liquids.dmi' icon_state = "ocean" - alpha = FLUID_MAX_ALPHA + alpha = 140 + invisibility = 0 /obj/effect/fluid/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) . = ..() From 8fa075a009a2f98b83b37d639ed42f515550cdd0 Mon Sep 17 00:00:00 2001 From: comma Date: Sat, 28 Jan 2023 21:27:14 +0300 Subject: [PATCH 092/239] Makes casings use drop_sound instead of their own system Casings used to have fall_sounds, merged them into drop_sound handling Also drop_sounds now handle lists (picking non list items is fine I tried) --- code/game/objects/item.dm | 2 +- code/modules/projectiles/ammunition.dm | 5 +++-- code/modules/projectiles/ammunition/bullets.dm | 2 +- code/modules/projectiles/guns/projectile.dm | 8 ++++---- code/modules/projectiles/guns/projectile/shotgun.dm | 4 ++-- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/code/game/objects/item.dm b/code/game/objects/item.dm index 7bc1e480e84..8550c6ad4b4 100644 --- a/code/game/objects/item.dm +++ b/code/game/objects/item.dm @@ -102,7 +102,7 @@ /obj/item/proc/dropped_sound_callback() if(!ismob(loc) && drop_sound) - playsound(src, drop_sound, 25, 0) + playsound(src, pick(drop_sound), 25, 0) /obj/item/proc/get_origin_tech() return origin_tech diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 10d89670349..a31570d3922 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -18,7 +18,7 @@ var/spent_icon = "pistolcasing-spent" var/bullet_color = COLOR_COPPER var/marking_color - var/fall_sounds = list('sound/weapons/guns/casingfall1.ogg','sound/weapons/guns/casingfall2.ogg','sound/weapons/guns/casingfall3.ogg') + drop_sound = list('sound/weapons/guns/casingfall1.ogg','sound/weapons/guns/casingfall2.ogg','sound/weapons/guns/casingfall3.ogg') /obj/item/ammo_casing/Initialize() if(ispath(projectile_type)) @@ -53,7 +53,7 @@ return if(!MOVING_DELIBERATELY(L) && prob(10)) - playsound(src, pick(fall_sounds), 50, 1) + playsound(src, pick(drop_sound), 50, 1) var/turf/turf_current = get_turf(src) var/turf/turf_destiinaton = get_step(turf_current, AM.dir) if(turf_destiinaton.Adjacent(turf_current)) @@ -182,6 +182,7 @@ if(!user.unEquip(C, src)) return stored_ammo.Add(C) + playsound(user, 'sound/weapons/guns/interaction/bullet_insert.ogg', 50, 1) update_icon() else ..() diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index 2bab8ab38ee..8f727a8132a 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -71,7 +71,7 @@ caliber = CALIBER_SHOTGUN projectile_type = /obj/item/projectile/bullet/shotgun material = /decl/material/solid/metal/steel - fall_sounds = list('sound/weapons/guns/shotgun_fall.ogg') + drop_sound = 'sound/weapons/guns/shotgun_fall.ogg' /obj/item/ammo_casing/shotgun/pellet name = "shotgun shell" diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 129075a5519..3850191eb03 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -105,8 +105,8 @@ if(EJECT_CASINGS) //eject casing onto ground. chambered.dropInto(loc) chambered.throw_at(get_ranged_target_turf(get_turf(src),turn(loc.dir,270),1), rand(0,1), 5) - if(LAZYLEN(chambered.fall_sounds)) - playsound(loc, pick(chambered.fall_sounds), 50, 1) + if(chambered.drop_sound) + playsound(loc, pick(chambered.drop_sound), 50, 1) if(CYCLE_CASINGS) //cycle the casing back to the end. if(ammo_magazine) ammo_magazine.stored_ammo += chambered @@ -194,8 +194,8 @@ var/turf/T = get_turf(user) if(T) for(var/obj/item/ammo_casing/C in loaded) - if(LAZYLEN(C.fall_sounds)) - playsound(loc, pick(C.fall_sounds), 50, 1) + if(LAZYLEN(C.drop_sound)) + playsound(loc, pick(C.drop_sound), 50, 1) C.forceMove(T) count++ loaded.Cut() diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index cb7c0fe1ac1..06af682f326 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -39,8 +39,8 @@ if(chambered)//We have a shell in the chamber chambered.dropInto(loc)//Eject casing - if(LAZYLEN(chambered.fall_sounds)) - playsound(loc, pick(chambered.fall_sounds), 50, 1) + if(chambered.drop_sound) + playsound(loc, pick(chambered.drop_sound), 50, 1) chambered = null if(loaded.len) From e3581a493b04a42c2f2874752f10d31169d8d247 Mon Sep 17 00:00:00 2001 From: comma Date: Sun, 29 Jan 2023 02:37:50 +0300 Subject: [PATCH 093/239] Fixes drinks and flavorpods name generation Tea cups and flavor pods just needed a presentation flag. Drinks in general needed their base name set before reagents are added, because reagent update find it unset and name them null --- code/modules/reagents/reagent_containers/drinks.dm | 3 ++- code/modules/reagents/reagent_containers/pill.dm | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/drinks.dm b/code/modules/reagents/reagent_containers/drinks.dm index 55c99433e90..a1b24257e0a 100644 --- a/code/modules/reagents/reagent_containers/drinks.dm +++ b/code/modules/reagents/reagent_containers/drinks.dm @@ -17,9 +17,9 @@ var/base_icon = null // Base icon name for fill states /obj/item/chems/drinks/Initialize() - . = ..() if(!base_name) base_name = name + . = ..() /obj/item/chems/drinks/dragged_onto(var/mob/user) attack_self(user) @@ -296,6 +296,7 @@ base_name = "cup" base_icon = "cup" volume = 30 + presentation_flags = PRESENTATION_FLAG_NAME /obj/item/chems/drinks/tea/black name = "cup of black tea" diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 0069b7fca41..c40956de50f 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -267,6 +267,7 @@ name = "master flavorpod item" desc = "A cellulose pod containing some kind of flavoring." icon_state = "pill4" + presentation_flags = PRESENTATION_FLAG_NAME /obj/item/chems/pill/pod/cream name = "creamer pod" From dec900c31fdd0bced1e0a41598710fcf4bf19512 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Sun, 29 Jan 2023 00:47:04 +0000 Subject: [PATCH 094/239] Automatic changelog generation [ci skip] --- html/changelog.html | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 5599b47eccd..6d7718016d1 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -87,31 +87,6 @@

    PsyCommando updated:

  • Mapped ladders no longer change the turf they're on to the map default's open turf if they're on a lattice and any open turf types already during init. This could cause exterior/unsimulated open turfs to replace a simulated open turf and cause serious atmos issues.
  • Fixed some wall-mounted machines acting as fully constructed, when a circuitboard was installed and no wiring installed.
  • - -

    27 November 2022

    -

    PsyCommando updated:

    -
      -
    • Fixed bad icons on /obj/machinery/partyalarm.
    • -
    • Fixed bad icons on /obj/machinery/dummy_airlock_controller.
    • -
    • Fixed bad icons on /obj/machinery/button/holosign.
    • -
    • Fixed bad icons on /obj/item/personal_shield.
    • -
    • Fixed bad icons on /obj/item/shield/energy.
    • -
    • Fixed bad icons on /turf/simulated/floor/tiled/stone.
    • -
    • Fixed bad icons on /obj/item/bone/skull.
    • -
    • Fixed bad icons on /obj/item/bee_smoker.
    • -
    • Fixed bad icons on /obj/item/shovel/spade.
    • -
    • Fixed bad icons on /obj/structure/crystal.
    • -
    • Fixed bad icons on /obj/item/storage/belt/archaeology.
    • -
    • Fixed /obj/abstract/map_data not showing up in mapping tool.
    • -
    • Fixed /obj/item/underwear not showing up in mapping tool.
    • -
    • Fixed /obj/abstract not showing up in mapping tool.
    • -
    • Fixed easily missed bad icon_state name on /obj/item/crowbar/brace_jack.
    • -
    • Fixed easily missed bad icon_state name on /turf/simulated/floor/tiled/monofloor.
    • -
    • Fixed some metallic materials causing runtimes from not having wall icon states defined properly.
    • -
    • Made a bunch of /obj/structure/closet/crate show a more accurate icon in the map editor instead of the default blank locker icon.
    • -
    • Added simple directional icons for airlock controller buttons and sensors.
    • -
    • Allowed connecting fuel pipes to TEG circulators.
    • -
    From 5a856d52c51c21fe2427b4da3af3bff058501a82 Mon Sep 17 00:00:00 2001 From: comma Date: Sun, 29 Jan 2023 13:51:46 +0300 Subject: [PATCH 095/239] Can see scrubber mode in examine Needs basic atmo skill level --- code/modules/atmospherics/components/unary/vent_scrubber.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/atmospherics/components/unary/vent_scrubber.dm b/code/modules/atmospherics/components/unary/vent_scrubber.dm index 0d728ecc980..9e210474b83 100644 --- a/code/modules/atmospherics/components/unary/vent_scrubber.dm +++ b/code/modules/atmospherics/components/unary/vent_scrubber.dm @@ -249,6 +249,8 @@ to_chat(user, "You are too far away to read the gauge.") if(welded) to_chat(user, "It seems welded shut.") + if(!(stat & NOPOWER) && use_power && user.skill_check(SKILL_ATMOS,SKILL_BASIC)) + to_chat(user, "It's running in [scrubbing] mode.") /obj/machinery/atmospherics/unary/vent_scrubber/refresh() ..() From 9f94719ad6d4fe4e1c12d0f903c8d0e51f15c3e0 Mon Sep 17 00:00:00 2001 From: quardbreak <44920739+quardbreak@users.noreply.github.com> Date: Mon, 30 Jan 2023 00:10:30 +0300 Subject: [PATCH 096/239] THIS HOT [Radiocarbon Spectrometer] will make your [CI] BUSTED --- .../fabrication/designs/imprinter/designs_misc_circuits.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm b/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm index e11723ad803..58541dd651d 100644 --- a/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm +++ b/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm @@ -443,6 +443,9 @@ /datum/fabricator_recipe/imprinter/circuit/merchant_pad path = /obj/item/stock_parts/circuitboard/merchant_pad +/datum/fabricator_recipe/imprinter/circuit/radiocarbon_spectrometer + path = /obj/item/stock_parts/circuitboard/radiocarbon_spectrometer + /datum/fabricator_recipe/imprinter/circuit/jukebox path = /obj/item/stock_parts/circuitboard/jukebox From c88d5364aaf4704078b51c8ad551e5cd6f564397 Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 31 Jan 2023 00:04:16 -0500 Subject: [PATCH 097/239] Small fixes/code modernization Updates to SPAN_X() Fix cryopod panels being offset wrong Replace static usage of \The with The --- code/game/machinery/cryopod.dm | 28 +++++++------- code/game/machinery/oxygen_pump.dm | 38 +++++++++---------- code/game/objects/structures/transit_tubes.dm | 10 ++--- code/modules/augment/passive/nanoaura.dm | 2 +- 4 files changed, 39 insertions(+), 39 deletions(-) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index bb4e20d6cfd..55e7d889dc8 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -16,7 +16,7 @@ density = 0 interact_offline = 1 obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED - directional_offset = "{'NORTH':{'y':-24}, 'SOUTH':{'y':32}, 'EAST':{'x':-24}, 'WEST':{'x':-24}}" + directional_offset = "{'NORTH':{'y':-24}, 'SOUTH':{'y':32}, 'EAST':{'x':24}, 'WEST':{'x':-24}}" //Used for logging people entering cryosleep and important items they are carrying. var/list/frozen_crew = list() @@ -85,7 +85,7 @@ if(!allow_items) return if(frozen_items.len == 0) - to_chat(user, "There is nothing to recover from storage.") + to_chat(user, SPAN_NOTICE("There is nothing to recover from storage.")) return TOPIC_HANDLED var/obj/item/I = input(user, "Please choose which object to retrieve.","Object recovery",null) as null|anything in frozen_items @@ -93,10 +93,10 @@ return TOPIC_HANDLED if(!(I in frozen_items)) - to_chat(user, "\The [I] is no longer in storage.") + to_chat(user, SPAN_NOTICE("\The [I] is no longer in storage.")) return TOPIC_HANDLED - visible_message("The console beeps happily as it disgorges \the [I].", range = 3) + visible_message(SPAN_NOTICE("The console beeps happily as it disgorges \the [I]."), range = 3) I.dropInto(loc) frozen_items -= I @@ -106,10 +106,10 @@ if(!allow_items) return TOPIC_HANDLED if(frozen_items.len == 0) - to_chat(user, "There is nothing to recover from storage.") + to_chat(user, SPAN_NOTICE("There is nothing to recover from storage.")) return TOPIC_HANDLED - visible_message("The console beeps happily as it disgorges the desired objects.", range = 3) + visible_message(SPAN_NOTICE("The console beeps happily as it disgorges the desired objects."), range = 3) for(var/obj/item/I in frozen_items) I.dropInto(loc) @@ -435,7 +435,7 @@ if(istype(G, /obj/item/grab)) var/obj/item/grab/grab = G if(occupant) - to_chat(user, "\The [src] is in use.") + to_chat(user, SPAN_NOTICE("\The [src] is in use.")) return if(!ismob(grab.affecting)) @@ -492,7 +492,7 @@ return if(src.occupant) - to_chat(usr, "\The [src] is in use.") + to_chat(usr, SPAN_NOTICE("\The [src] is in use.")) return set_occupant(usr) @@ -527,8 +527,8 @@ if(occupant.client) if(!silent) - to_chat(occupant, "[on_enter_occupant_message]") - to_chat(occupant, "If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.") + to_chat(occupant, SPAN_NOTICE("[on_enter_occupant_message]")) + to_chat(occupant, SPAN_NOTICE("If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.")) occupant.client.perspective = EYE_PERSPECTIVE occupant.client.eye = src occupant.forceMove(src) @@ -556,13 +556,13 @@ /obj/structure/broken_cryo/attack_hand(mob/user) ..() if (closed) - to_chat(user, "You tug at the glass but can't open it with your hands alone.") + to_chat(user, SPAN_NOTICE("You tug at the glass but can't open it with your hands alone.")) else - to_chat(user, "The glass is already open.") + to_chat(user, SPAN_NOTICE("The glass is already open.")) /obj/structure/broken_cryo/attackby(obj/item/W, mob/user) if (busy) - to_chat(user, "Someone else is attempting to open this.") + to_chat(user, SPAN_NOTICE("Someone else is attempting to open this.")) return if (closed) if (IS_CROWBAR(W)) @@ -578,7 +578,7 @@ var/obj/dead = new remains_type(loc) dead.set_dir(dir) //skeleton is oriented as cryo else - to_chat(user, "The glass cover is already open.") + to_chat(user, SPAN_NOTICE("The glass cover is already open.")) /obj/machinery/cryopod/proc/on_mob_spawn() playsound(src, 'sound/machines/ding.ogg', 30, 1) \ No newline at end of file diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm index 82d7fd2d4a0..f093c4dbc7e 100644 --- a/code/game/machinery/oxygen_pump.dm +++ b/code/game/machinery/oxygen_pump.dm @@ -34,7 +34,7 @@ qdel(tank) if(breather) breather.drop_from_inventory(contained) - src.visible_message("The mask rapidly retracts just before /the [src] is destroyed!") + src.visible_message(SPAN_NOTICE("The mask rapidly retracts just before /the [src] is destroyed!")) qdel(contained) contained = null breather = null @@ -52,7 +52,7 @@ /obj/machinery/oxygen_pump/physical_attack_hand(mob/user) if((stat & MAINT) && tank) - user.visible_message("\The [user] removes \the [tank] from \the [src].", "You remove \the [tank] from \the [src].") + user.visible_message(SPAN_NOTICE("\The [user] removes \the [tank] from \the [src]."), SPAN_NOTICE("You remove \the [tank] from \the [src].")) user.put_in_hands(tank) src.add_fingerprint(user) tank.add_fingerprint(user) @@ -85,9 +85,9 @@ tank.forceMove(src) breather.drop_from_inventory(contained, src) if(user) - visible_message("\The [user] detaches \the [contained] and it rapidly retracts back into \the [src]!") + visible_message(SPAN_NOTICE("\The [user] detaches \the [contained] and it rapidly retracts back into \the [src]!")) else - visible_message("\The [contained] rapidly retracts back into \the [src]!") + visible_message(SPAN_NOTICE("\The [contained] rapidly retracts back into \the [src]!")) if(breather.internals) breather.internals.icon_state = "internal0" breather = null @@ -98,44 +98,44 @@ user = target // Check target validity if(!GET_EXTERNAL_ORGAN(target, BP_HEAD)) - to_chat(user, "\The [target] doesn't have a head.") + to_chat(user, SPAN_WARNING("\The [target] doesn't have a head.")) return if(!target.check_has_mouth()) - to_chat(user, "\The [target] doesn't have a mouth.") + to_chat(user, SPAN_WARNING("\The [target] doesn't have a mouth.")) return var/obj/item/mask = target.get_equipped_item(slot_wear_mask_str) if(mask && target != breather) - to_chat(user, "\The [target] is already wearing a mask.") + to_chat(user, SPAN_WARNING("\The [target] is already wearing a mask.")) return var/obj/item/head = target.get_equipped_item(slot_head_str) if(head && (head.body_parts_covered & SLOT_FACE)) - to_chat(user, "Remove their [head] first.") + to_chat(user, SPAN_WARNING("Remove their [head] first.")) return if(!tank) - to_chat(user, "There is no tank in \the [src].") + to_chat(user, SPAN_WARNING("There is no tank in \the [src].")) return if(stat & MAINT) - to_chat(user, "Please close \the maintenance hatch first.") + to_chat(user, SPAN_WARNING("Please close the maintenance hatch first.")) return if(!Adjacent(target)) - to_chat(user, "Please stay close to \the [src].") + to_chat(user, SPAN_WARNING("Please stay close to \the [src].")) return //when there is a breather: if(breather && target != breather) - to_chat(user, "\The pump is already in use.") + to_chat(user, SPAN_WARNING("The pump is already in use.")) return //Checking if breather is still valid mask = target.get_equipped_item(slot_wear_mask_str) if(target == breather && (!mask || mask != contained)) - to_chat(user, "\The [target] is not using the supplied mask.") + to_chat(user, SPAN_WARNING("\The [target] is not using the supplied mask.")) return return 1 /obj/machinery/oxygen_pump/attackby(obj/item/W, mob/user) if(IS_SCREWDRIVER(W)) stat ^= MAINT - user.visible_message("\The [user] [stat & MAINT ? "opens" : "closes"] \the [src].", "You [stat & MAINT ? "open" : "close"] \the [src].") + user.visible_message(SPAN_NOTICE("\The [user] [stat & MAINT ? "opens" : "closes"] \the [src]."), SPAN_NOTICE("You [stat & MAINT ? "open" : "close"] \the [src].")) if(stat & MAINT) icon_state = icon_state_open if(!stat) @@ -143,22 +143,22 @@ //TO-DO: Open icon if(istype(W, /obj/item/tank) && (stat & MAINT)) if(tank) - to_chat(user, "\The [src] already has a tank installed!") + to_chat(user, SPAN_WARNING("\The [src] already has a tank installed!")) else if(!user.unEquip(W, src)) return tank = W - user.visible_message("\The [user] installs \the [tank] into \the [src].", "You install \the [tank] into \the [src].") + user.visible_message(SPAN_NOTICE("\The [user] installs \the [tank] into \the [src]."), SPAN_NOTICE("You install \the [tank] into \the [src].")) src.add_fingerprint(user) if(istype(W, /obj/item/tank) && !stat) - to_chat(user, "Please open the maintenance hatch first.") + to_chat(user, SPAN_WARNING("Please open the maintenance hatch first.")) /obj/machinery/oxygen_pump/examine(mob/user) . = ..() if(tank) to_chat(user, "The meter shows [round(tank.air_contents.return_pressure())].") else - to_chat(user, "It is missing a tank!") + to_chat(user, SPAN_WARNING("It is missing a tank!")) /obj/machinery/oxygen_pump/Process() @@ -180,7 +180,7 @@ /obj/machinery/oxygen_pump/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] if(!tank) - to_chat(usr, "It is missing a tank!") + to_chat(usr, SPAN_WARNING("It is missing a tank!")) data["tankPressure"] = 0 data["releasePressure"] = 0 data["defaultReleasePressure"] = 0 diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm index 3e3dd61a511..51bedbcb6c1 100644 --- a/code/game/objects/structures/transit_tubes.dm +++ b/code/game/objects/structures/transit_tubes.dm @@ -74,17 +74,17 @@ /obj/structure/transit_tube/Bumped(mob/AM) var/obj/structure/transit_tube/T = locate() in AM.loc if(T) - to_chat(AM, "The tube's support pylons block your way.") + to_chat(AM, SPAN_WARNING("The tube's support pylons block your way.")) return ..() else AM.dropInto(loc) - to_chat(AM, "You slip under the tube.") + to_chat(AM, SPAN_INFO("You slip under the tube.")) /obj/structure/transit_tube/station/Bumped(mob/AM) if(!pod_moving && icon_state == "open" && istype(AM, /mob)) for(var/obj/structure/transit_tube_pod/pod in loc) if(pod.contents.len) - to_chat(AM, "The pod is already occupied.") + to_chat(AM, SPAN_NOTICE("The pod is already occupied.")) return else if(!pod.moving && (pod.dir in directions())) AM.forceMove(pod) @@ -545,7 +545,7 @@ if("SOUTHWEST", "SW") return 10 else - return 0 + return 0 @@ -570,4 +570,4 @@ if(10) return "SW" else - return + return diff --git a/code/modules/augment/passive/nanoaura.dm b/code/modules/augment/passive/nanoaura.dm index 713805bff2d..662be61f8eb 100644 --- a/code/modules/augment/passive/nanoaura.dm +++ b/code/modules/augment/passive/nanoaura.dm @@ -78,6 +78,6 @@ /obj/aura/nanoaura/Destroy() - to_chat(user, SPAN_WARNING("\The nanites dissolve!")) + to_chat(user, SPAN_WARNING("The nanites dissolve!")) unit = null return ..() From 91bfac5c80137704c4e08a6939534f7c499ccbb9 Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Tue, 31 Jan 2023 18:13:10 +1100 Subject: [PATCH 098/239] Automatic changelog generation for PR #2940 [ci skip] --- html/changelogs/AutoChangeLog-pr-2940.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2940.yml diff --git a/html/changelogs/AutoChangeLog-pr-2940.yml b/html/changelogs/AutoChangeLog-pr-2940.yml new file mode 100644 index 00000000000..35349ab47dd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2940.yml @@ -0,0 +1,4 @@ +author: quardbreak +delete-after: true +changes: + - bugfix: Fixed missing circuit recipe for radiocarbon spectrometer. From 1c17d5b814c4efc0e0a3c6dd7f54318678c7ca0f Mon Sep 17 00:00:00 2001 From: NebulaSS13Bot Date: Wed, 1 Feb 2023 00:48:51 +0000 Subject: [PATCH 099/239] Automatic changelog generation [ci skip] --- html/changelog.html | 13 ++++++------- html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-2940.yml | 4 ---- 3 files changed, 9 insertions(+), 11 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2940.yml diff --git a/html/changelog.html b/html/changelog.html index 6d7718016d1..f35b31035df 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,12 @@ -->
    +

    01 February 2023

    +

    quardbreak updated:

    +
      +
    • Fixed missing circuit recipe for radiocarbon spectrometer.
    • +
    +

    18 January 2023

    NataKilar updated:

      @@ -80,13 +86,6 @@

      PsyCommando updated:

    • Fixed airlock machinery generally falling out of sync with eachother.
    • Added new icons for airlock sensor and airlock access button. They have overlays and directions now.
    - -

    30 November 2022

    -

    PsyCommando updated:

    -
      -
    • Mapped ladders no longer change the turf they're on to the map default's open turf if they're on a lattice and any open turf types already during init. This could cause exterior/unsimulated open turfs to replace a simulated open turf and cause serious atmos issues.
    • -
    • Fixed some wall-mounted machines acting as fully constructed, when a circuitboard was installed and no wiring installed.
    • -
    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index f9f60d933b1..5646c4c1168 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -14443,3 +14443,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2023-01-18: NataKilar: - bugfix: Items no longer appear heavily damaged regardless of their health +2023-02-01: + quardbreak: + - bugfix: Fixed missing circuit recipe for radiocarbon spectrometer. diff --git a/html/changelogs/AutoChangeLog-pr-2940.yml b/html/changelogs/AutoChangeLog-pr-2940.yml deleted file mode 100644 index 35349ab47dd..00000000000 --- a/html/changelogs/AutoChangeLog-pr-2940.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: quardbreak -delete-after: true -changes: - - bugfix: Fixed missing circuit recipe for radiocarbon spectrometer. From 2d5726bf0508fc6a6df5761f1aa06af206a585ab Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Sun, 29 Jan 2023 22:30:50 +1100 Subject: [PATCH 100/239] Removed detrimental overlay code in typing indicator. --- code/controllers/subsystems/typing.dm | 29 ++++++++++++++------------- code/modules/mob/mob_defines.dm | 2 +- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/code/controllers/subsystems/typing.dm b/code/controllers/subsystems/typing.dm index a844669f5a1..c6ac9dce6a1 100644 --- a/code/controllers/subsystems/typing.dm +++ b/code/controllers/subsystems/typing.dm @@ -129,7 +129,7 @@ SUBSYSTEM_DEF(typing) return if(display) if(!target.typing_indicator) - target.typing_indicator = new(target) + target.typing_indicator = new(null, target) target.is_typing = TRUE target.typing_indicator.show_typing_indicator() else if(target.typing_indicator) @@ -143,26 +143,30 @@ I IS TYPIN'!' Updated 09/10/2022 to include chatbar using Spookerton's SStyping system from Polaris. */ -/atom/movable/overlay/typing_indicator - expected_master_type = /atom/movable - follow_proc = /atom/movable/proc/move_to_turf_or_null +/atom/movable/typing_indicator icon = 'icons/mob/talk.dmi' icon_state = "typing" mouse_opacity = 0 vis_flags = VIS_INHERIT_ID - follow_proc = null // Sits in vis_contents instead. + var/atom/movable/master -/atom/movable/overlay/typing_indicator/Destroy() - if(ismovable(master)) - var/atom/movable/AM = master - remove_vis_contents(AM, src) +/atom/movable/typing_indicator/Initialize(ml, _master) + . = ..() + master = _master + if(!ismovable(master)) + PRINT_STACK_TRACE("Typing indicator initialized with [isnull(master) ? "null" : master] as master.") + return INITIALIZE_HINT_QDEL + +/atom/movable/typing_indicator/Destroy() + if(master) + remove_vis_contents(master, src) if(ismob(master)) var/mob/owner = master if(owner.typing_indicator == src) owner.typing_indicator = null return ..() -/atom/movable/overlay/typing_indicator/proc/hide_typing_indicator() +/atom/movable/typing_indicator/proc/hide_typing_indicator() set waitfor = FALSE if(ismob(master)) var/mob/owner = master @@ -175,7 +179,7 @@ Updated 09/10/2022 to include chatbar using Spookerton's SStyping system from Po var/atom/movable/owner = master remove_vis_contents(owner, src) -/atom/movable/overlay/typing_indicator/proc/show_typing_indicator() +/atom/movable/typing_indicator/proc/show_typing_indicator() // Make it visible after being hidden. set_invisibility(0) @@ -199,6 +203,3 @@ Updated 09/10/2022 to include chatbar using Spookerton's SStyping system from Po transform = M alpha = 0 animate(src, transform = 0, alpha = 255, time = 0.2 SECONDS, easing = EASE_IN) - -/atom/movable/overlay/typing_indicator/SetInitLoc() - forceMove(null) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index a1f08e45bad..4dbcbc9f397 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -177,6 +177,6 @@ var/holder_type /// If this mob is or was piloted by a player with typing indicators enabled, an instance of one. - var/atom/movable/overlay/typing_indicator/typing_indicator + var/atom/movable/typing_indicator/typing_indicator /// Whether this mob is currently typing, if piloted by a player. var/is_typing \ No newline at end of file From 3faecf0c10ba079881c26c5c845a2e505aa550e3 Mon Sep 17 00:00:00 2001 From: quardbreak <44920739+quardbreak@users.noreply.github.com> Date: Wed, 1 Feb 2023 23:35:16 +0300 Subject: [PATCH 101/239] corporate content modpack: adds missing loadout and lockers include --- mods/content/corporate/_corporate.dme | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mods/content/corporate/_corporate.dme b/mods/content/corporate/_corporate.dme index dc0fc83ae5f..2ab5787a2c8 100644 --- a/mods/content/corporate/_corporate.dme +++ b/mods/content/corporate/_corporate.dme @@ -26,6 +26,7 @@ #include "clothing\under\uniforms.dm" #include "datum\ai_icons.dm" #include "datum\ai_laws.dm" +#include "datum\loadout.dm" #include "datum\robolimbs.dm" #include "datum\antagonists\commando.dm" #include "datum\antagonists\deathsquad.dm" @@ -38,5 +39,6 @@ #include "items\medals.dm" #include "items\wristcomp.dm" #include "machines\machines.dm" +#include "structures\lockers.dm" // END_INCLUDE #endif From 623ed59a32605954db39b88adcbf79798589e770 Mon Sep 17 00:00:00 2001 From: quardbreak <44920739+quardbreak@users.noreply.github.com> Date: Wed, 1 Feb 2023 23:46:51 +0300 Subject: [PATCH 102/239] no namename, no whitered --- mods/content/corporate/datum/loadout.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/content/corporate/datum/loadout.dm b/mods/content/corporate/datum/loadout.dm index 00d68c950c2..5d33e0adf7f 100644 --- a/mods/content/corporate/datum/loadout.dm +++ b/mods/content/corporate/datum/loadout.dm @@ -15,7 +15,7 @@ /decl/loadout_option/accessory/armband_nt name = "corporate armband" - path = /obj/item/clothing/accessory/armband/whitered + path = /obj/item/clothing/accessory/armband/whitegreen /decl/loadout_option/suit/labcoat_corp name = "labcoat, corporate colors" @@ -23,7 +23,7 @@ flags = GEAR_HAS_TYPE_SELECTION /decl/loadout_option/uniform/corporate - namename = "corporate uniform selection" + name = "corporate uniform selection" path = /obj/item/clothing/under /decl/loadout_option/uniform/corporate/get_gear_tweak_options() From 669ea155d965d4e2649949e8563fd39da04624e5 Mon Sep 17 00:00:00 2001 From: quardbreak <44920739+quardbreak@users.noreply.github.com> Date: Thu, 2 Feb 2023 16:35:40 +0300 Subject: [PATCH 103/239] random loot: removes artifact from spawn chance --- code/game/objects/random/subtypes/misc.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/random/subtypes/misc.dm b/code/game/objects/random/subtypes/misc.dm index d3f51fc1845..f654fd0fae6 100644 --- a/code/game/objects/random/subtypes/misc.dm +++ b/code/game/objects/random/subtypes/misc.dm @@ -350,7 +350,6 @@ /obj/item/storage/firstaid/surgery = 4, /obj/item/cell/infinite = 1, /obj/random/archaeological_find = 2, - /obj/structure/artifact = 1, /obj/item/multitool/hacktool = 2, /obj/item/surgicaldrill = 7, /obj/item/sutures = 7, From b71940056f14fea1bec277d9d8448228f86c18d6 Mon Sep 17 00:00:00 2001 From: comma Date: Sat, 4 Feb 2023 22:00:33 +0300 Subject: [PATCH 104/239] Fixes network stock parts not getting holder machine methods Base proc only looked for methods in immediate loc, added override for stock party subtype that looks deeper --- .../networking/device_types/stock_part.dm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/code/modules/modular_computers/networking/device_types/stock_part.dm b/code/modules/modular_computers/networking/device_types/stock_part.dm index 189560b6556..c0093d547c6 100644 --- a/code/modules/modular_computers/networking/device_types/stock_part.dm +++ b/code/modules/modular_computers/networking/device_types/stock_part.dm @@ -18,4 +18,14 @@ var/atom/A = holder var/obj/machinery/M = A.loc if(istype(M)) - return M \ No newline at end of file + return M + +/datum/extension/network_device/stock_part/get_holder_methods() + var/obj/machinery/M = get_command_target() + if(istype(M)) + return M.public_methods?.Copy() + +/datum/extension/network_device/stock_part/get_holder_variables() + var/obj/machinery/M = get_command_target() + if(istype(M)) + return M.public_variables?.Copy() \ No newline at end of file From 0a79f007e6beb807581fc5987d5704122400dc20 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Thu, 20 Oct 2022 14:43:44 +1100 Subject: [PATCH 105/239] Porting CrimsonShrike's port of VG's holomaps to Bay. --- code/__defines/holomap.dm | 37 ++ code/__defines/misc.dm | 4 + code/__defines/subsystems.dm | 1 + code/__defines/turfs.dm | 1 + code/_onclick/hud/global_hud.dm | 11 + code/controllers/subsystems/holomap.dm | 112 +++++ code/game/area/area_abstract.dm | 4 + code/game/area/area_space.dm | 2 +- code/game/area/areas.dm | 1 + .../circuitboards/machinery/holomap.dm | 11 + code/game/turfs/exterior/_exterior.dm | 2 +- code/game/turfs/exterior/exterior_wall.dm | 1 + code/game/turfs/flooring/flooring_premade.dm | 4 +- code/game/turfs/simulated/floor.dm | 1 + code/game/turfs/simulated/walls.dm | 1 + code/game/turfs/unsimulated/beach.dm | 2 +- code/game/turfs/unsimulated/floor.dm | 1 + code/game/turfs/unsimulated/walls.dm | 1 + .../imprinter/designs_misc_circuits.dm | 5 +- code/modules/holomap/holomap.dm | 417 ++++++++++++++++++ code/modules/mining/mine_turfs.dm | 3 +- code/modules/overmap/exoplanets/_exoplanet.dm | 2 +- code/modules/turbolift/turbolift_areas.dm | 1 + icons/480x480.dmi | Bin 2074 -> 46289 bytes icons/effects/64x64.dmi | Bin 0 -> 4090 bytes icons/misc/holomap_markers.dmi | Bin 0 -> 9371 bytes icons/obj/machines/stationmap.dmi | Bin 0 -> 3988 bytes maps/example/example_areas.dm | 3 + maps/exodus/exodus_areas.dm | 20 +- maps/ministation/ministation_areas.dm | 12 + maps/nexus/nexus_areas.dm | 4 + maps/tradeship/tradeship_areas.dm | 30 +- nebula.dme | 4 + test/check-paths.sh | 2 +- 34 files changed, 687 insertions(+), 13 deletions(-) create mode 100644 code/__defines/holomap.dm create mode 100644 code/controllers/subsystems/holomap.dm create mode 100644 code/game/objects/items/weapons/circuitboards/machinery/holomap.dm create mode 100644 code/modules/holomap/holomap.dm create mode 100644 icons/effects/64x64.dmi create mode 100644 icons/misc/holomap_markers.dmi create mode 100644 icons/obj/machines/stationmap.dmi diff --git a/code/__defines/holomap.dm b/code/__defines/holomap.dm new file mode 100644 index 00000000000..76517fb8f11 --- /dev/null +++ b/code/__defines/holomap.dm @@ -0,0 +1,37 @@ +// +// Constants and standard colors for the holomap +// + +#define HOLOMAP_ICON 'icons/480x480.dmi' // Icon file to start with when drawing holomaps (to get a 480x480 canvas). +#define HOLOMAP_ICON_SIZE 480 // Pixel width & height of the holomap icon. Used for auto-centering etc. +#define HOLOMAP_MARGIN 100 // minimum marging on sides when combining maps +#define UI_HOLOMAP "CENTER-7, CENTER-7" // Screen location of the holomap "hud" + +// Holomap colors +#define COLOR_HOLOMAP_OBSTACLE "#ffffffdd" // Color of walls and barriers +#define COLOR_HOLOMAP_PATH "#66666699" // Color of floors +#define COLOR_HOLOMAP_HOLOFIER "#79ff79" // Whole map is multiplied by this to give it a green holoish look + +#define HOLOMAP_AREACOLOR_BASE "#ffffffff" +#define HOLOMAP_AREACOLOR_COMMAND "#386d8099" +#define HOLOMAP_AREACOLOR_SECURITY "#ae121299" +#define HOLOMAP_AREACOLOR_MEDICAL "#ffffffa5" +#define HOLOMAP_AREACOLOR_SCIENCE "#f45dff99" +#define HOLOMAP_AREACOLOR_EXPLORATION "#a154a699" +#define HOLOMAP_AREACOLOR_ENGINEERING "#f1c23199" +#define HOLOMAP_AREACOLOR_CARGO "#e06f0099" +#define HOLOMAP_AREACOLOR_HALLWAYS "#ffffff66" +#define HOLOMAP_AREACOLOR_AIRLOCK "#0000ffcc" +#define HOLOMAP_AREACOLOR_ESCAPE "#ff0000cc" +#define HOLOMAP_AREACOLOR_CREW "#5bc1c199" +#define HOLOMAP_AREACOLOR_MAINTENANCE "#9c895066" +// If someone can come up with a non-conflicting color for the lifts, please update this. +#define HOLOMAP_AREACOLOR_LIFTS null + +// Handy defines to lookup the pixel offsets for holomap +// Currently set to 0, left here in case of need for per map offsets +#define HOLOMAP_PIXEL_OFFSET_X (0) +#define HOLOMAP_PIXEL_OFFSET_Y (0) + +#define HOLOMAP_LEGEND_X 96 +#define HOLOMAP_LEGEND_Y 156 \ No newline at end of file diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index bac4ed8b814..f19c82b693e 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -3,6 +3,9 @@ #define TURF_FLAG_NOJAUNT BITFLAG(0) // This is used in literally one place, turf.dm, to block ethereal jaunt. #define TURF_FLAG_NORUINS BITFLAG(1) // Used by the ruin generator to skip placing loaded ruins on this turf. #define TURF_FLAG_BACKGROUND BITFLAG(2) // Used by shuttle movement to determine if it should be ignored by turf translation. +#define TURF_IS_HOLOMAP_OBSTACLE BITFLAG(3) +#define TURF_IS_HOLOMAP_PATH BITFLAG(4) +#define TURF_IS_HOLOMAP_ROCK BITFLAG(5) #define TRANSITIONEDGE 7 // Distance from edge to move to another z-level. #define RUIN_MAP_EDGE_PAD 15 @@ -86,6 +89,7 @@ #define AREA_FLAG_PRISON BITFLAG(9) // Area is a prison for the purposes of brigging objectives. #define AREA_FLAG_HOLY BITFLAG(10) // Area is holy for the purposes of marking turfs as cult-resistant. #define AREA_FLAG_SECURITY BITFLAG(11) // Area is security for the purposes of newscaster init. +#define AREA_FLAG_HIDE_FROM_HOLOMAP BITFLAG(12) // if we shouldn't be drawn on station holomaps //Map template flags #define TEMPLATE_FLAG_ALLOW_DUPLICATES BITFLAG(0) // Lets multiple copies of the template to be spawned diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index 66233d9a88d..d6d14de4cc4 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -52,6 +52,7 @@ #define SS_INIT_LIGHTING -6 #define SS_INIT_WEATHER -7 #define SS_INIT_ZCOPY -8 +#define SS_INIT_HOLOMAP -9 #define SS_INIT_XENOARCH -10 #define SS_INIT_TICKER -20 #define SS_INIT_UNIT_TESTS -100 diff --git a/code/__defines/turfs.dm b/code/__defines/turfs.dm index a710b7d0e2b..450199ca4e5 100644 --- a/code/__defines/turfs.dm +++ b/code/__defines/turfs.dm @@ -19,6 +19,7 @@ #define SMOOTH_BLACKLIST 3 //Smooth with all but a blacklist of subtypes #define RANGE_TURFS(CENTER, RADIUS) block(locate(max(CENTER.x-(RADIUS), 1), max(CENTER.y-(RADIUS),1), CENTER.z), locate(min(CENTER.x+(RADIUS), world.maxx), min(CENTER.y+(RADIUS), world.maxy), CENTER.z)) +#define BLOCK_TURFS(X1, Y1, X2, Y2, Z) block(locate(X1, Y1, Z), locate(X2, Y2, Z)) #define EXT_LAYER_CONSTANT 0.001 #define EXT_EDGE_OCEAN (10 * EXT_LAYER_CONSTANT) diff --git a/code/_onclick/hud/global_hud.dm b/code/_onclick/hud/global_hud.dm index a1d067535f5..70e7aa2f7df 100644 --- a/code/_onclick/hud/global_hud.dm +++ b/code/_onclick/hud/global_hud.dm @@ -14,6 +14,7 @@ var/global/datum/global_hud/hud var/obj/screen/thermal var/obj/screen/meson var/obj/screen/science + var/obj/screen/holomap // makes custom colored overlay, can also generate scanline /datum/global_hud/proc/setup_overlay(icon_state, color) @@ -36,3 +37,13 @@ var/global/datum/global_hud/hud thermal = setup_overlay("scanline", "#ff0000") meson = setup_overlay("scanline", "#9fd800") science = setup_overlay("scanline", "#d600d6") + + //Holomap screen object is invisible and work + //By setting it as n images location, without icon changes + //Make it part of global hud since it's inmutable + holomap = new /obj/screen() + holomap.name = "holomap" + holomap.icon = null + holomap.layer = HUD_BASE_LAYER + holomap.screen_loc = UI_HOLOMAP + holomap.mouse_opacity = 0 \ No newline at end of file diff --git a/code/controllers/subsystems/holomap.dm b/code/controllers/subsystems/holomap.dm new file mode 100644 index 00000000000..dd544596c29 --- /dev/null +++ b/code/controllers/subsystems/holomap.dm @@ -0,0 +1,112 @@ +// Minimap generation system adapted from vorestation, adapted from /vg/. +// Seems to be much simpler/saner than /vg/'s implementation. + +//The structure holding a given map +/datum/holomapdata + var/icon/holomap_base + var/list/icon/holomap_areas = list() + var/icon/holomap_combined + var/icon/holomap_areas_combined + var/icon/holomap_small + +SUBSYSTEM_DEF(minimap) + name = "Holomap" + flags = SS_NO_FIRE + init_order = SS_INIT_HOLOMAP + + var/list/datum/holomapdata/holomaps = list() + var/list/station_holomaps = list() + +/datum/controller/subsystem/minimap/Initialize() + holomaps.len = world.maxz + for (var/z = 1 to world.maxz) + generateHolomap(z) + + //Update machinery if it has not been + for(var/obj/machinery/holomap/M in station_holomaps) + M.update_map_data() + + ..() + +/datum/controller/subsystem/minimap/proc/generateHolomap(zlevel) + var/datum/holomapdata/data = new() + data.holomap_base = generateBaseHolomap(zlevel) + data.holomap_areas = generateHolomapAreaOverlays(zlevel) + + var/icon/combinedareas = icon(HOLOMAP_ICON, "blank") + + for(var/area/A in data.holomap_areas) + var/icon/single = data.holomap_areas[A] + if(A.holomap_color) + single.Blend(A.holomap_color, ICON_MULTIPLY) + combinedareas.Blend(single, ICON_OVERLAY) + + data.holomap_areas_combined = combinedareas + + var/icon/map_base = icon(data.holomap_base) + + // Generate the full sized map by blending the base and areas onto the backdrop + var/icon/big_map = icon(HOLOMAP_ICON, "stationmap") + big_map.Blend(map_base, ICON_OVERLAY) + big_map.Blend(combinedareas, ICON_OVERLAY) + data.holomap_combined = big_map + + // Generate the "small" map + var/icon/small_map = icon(HOLOMAP_ICON, "blank") + //Make it green. + small_map.Blend(map_base, ICON_OVERLAY) + small_map.Blend(COLOR_HOLOMAP_HOLOFIER, ICON_MULTIPLY) + small_map.Blend(combinedareas, ICON_OVERLAY) + small_map.Scale(WORLD_ICON_SIZE, WORLD_ICON_SIZE) + + // And rotate it in every direction of course! + var/icon/actual_small_map = icon(small_map) + actual_small_map.Insert(new_icon = small_map, dir = SOUTH) + actual_small_map.Insert(new_icon = turn(small_map, 90), dir = WEST) + actual_small_map.Insert(new_icon = turn(small_map, 180), dir = NORTH) + actual_small_map.Insert(new_icon = turn(small_map, 270), dir = EAST) + data.holomap_small = actual_small_map + + holomaps[zlevel] = data + +// Generates the "base" holomap for one z-level, showing only the physical structure of walls and paths. +/datum/controller/subsystem/minimap/proc/generateBaseHolomap(zlevel = 1) + // Save these values now to avoid a bazillion array lookups + var/offset_x = HOLOMAP_PIXEL_OFFSET_X + var/offset_y = HOLOMAP_PIXEL_OFFSET_Y + + // Sanity checks - Better to generate a helpful error message now than have DrawBox() runtime + var/icon/canvas = icon(HOLOMAP_ICON, "blank") + if(world.maxx + offset_x > canvas.Width()) + CRASH("Minimap for z=[zlevel] : world.maxx ([world.maxx]) + holomap_offset_x ([offset_x]) must be <= [canvas.Width()]") + if(world.maxy + offset_y > canvas.Height()) + CRASH("Minimap for z=[zlevel] : world.maxy ([world.maxy]) + holomap_offset_y ([offset_y]) must be <= [canvas.Height()]") + + for(var/turf/tile as anything in BLOCK_TURFS(1,1,world.maxx,world.maxy,zlevel)) + var/area/A = get_area(tile) + if ((A && (A.area_flags & AREA_FLAG_HIDE_FROM_HOLOMAP)) || (tile.turf_flags & TURF_IS_HOLOMAP_ROCK)) + continue + if((tile.turf_flags & TURF_IS_HOLOMAP_OBSTACLE) || (locate(/obj/structure/grille) in tile)) + canvas.DrawBox(COLOR_HOLOMAP_OBSTACLE, tile.x + offset_x, tile.y + offset_y) + else if((tile.turf_flags & TURF_IS_HOLOMAP_PATH) || (locate(/obj/structure/catwalk) in tile)) + canvas.DrawBox(COLOR_HOLOMAP_PATH, tile.x + offset_x, tile.y + offset_y) + CHECK_TICK + return canvas + +// Generate overlays based on areas +/datum/controller/subsystem/minimap/proc/generateHolomapAreaOverlays(zlevel) + var/list/icon/areas = list() + + var/offset_x = HOLOMAP_PIXEL_OFFSET_X + var/offset_y = HOLOMAP_PIXEL_OFFSET_Y + + for(var/x = 1 to world.maxx) + for(var/y = 1 to world.maxy) + var/turf/tile = locate(x, y, zlevel) + if(tile && tile.loc) + var/area/areaToPaint = tile.loc + if(areaToPaint.holomap_color) + if(!areas[areaToPaint]) + areas[areaToPaint] = icon(HOLOMAP_ICON, "blank") + areas[areaToPaint].DrawBox(HOLOMAP_AREACOLOR_BASE, x + offset_x, y + offset_y) //We draw white because we want a generic version to use later. However if there is no colour we ignore it + return areas \ No newline at end of file diff --git a/code/game/area/area_abstract.dm b/code/game/area/area_abstract.dm index c0ee630d75c..a7cad4fbd60 100644 --- a/code/game/area/area_abstract.dm +++ b/code/game/area/area_abstract.dm @@ -1,5 +1,6 @@ /area/hallway name = "hallway" + holomap_color = HOLOMAP_AREACOLOR_HALLWAYS /area/maintenance area_flags = AREA_FLAG_RAD_SHIELDED @@ -7,13 +8,16 @@ turf_initializer = /decl/turf_initializer/maintenance forced_ambience = list('sound/ambience/maintambience.ogg') req_access = list(access_maint_tunnels) + holomap_color = HOLOMAP_AREACOLOR_HALLWAYS /area/shuttle requires_power = 0 sound_env = SMALL_ENCLOSED base_turf = /turf/space area_flags = AREA_FLAG_SHUTTLE | AREA_FLAG_RAD_SHIELDED + holomap_color = HOLOMAP_AREACOLOR_CREW /area/ship name = "\improper Generic Ship" ambience = list('sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg') + holomap_color = HOLOMAP_AREACOLOR_CREW diff --git a/code/game/area/area_space.dm b/code/game/area/area_space.dm index 0ec6cb45f9d..c4bc55dbe31 100644 --- a/code/game/area/area_space.dm +++ b/code/game/area/area_space.dm @@ -10,7 +10,7 @@ var/global/area/space_area power_equip = 0 power_environ = 0 has_gravity = 0 - area_flags = AREA_FLAG_EXTERNAL | AREA_FLAG_IS_NOT_PERSISTENT | AREA_FLAG_IS_BACKGROUND + area_flags = AREA_FLAG_EXTERNAL | AREA_FLAG_IS_NOT_PERSISTENT | AREA_FLAG_IS_BACKGROUND | AREA_FLAG_HIDE_FROM_HOLOMAP ambience = list('sound/ambience/ambispace1.ogg','sound/ambience/ambispace2.ogg','sound/ambience/ambispace3.ogg','sound/ambience/ambispace4.ogg','sound/ambience/ambispace5.ogg') is_outside = OUTSIDE_YES diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 25b4f160fad..bb86b91f607 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -12,6 +12,7 @@ var/global/list/areas = list() mouse_opacity = 0 var/proper_name /// Automatically set by SetName and Initialize; cached result of strip_improper(name). + var/holomap_color // Color of this area on the holomap. Must be a hex color (as string) or null. var/fire var/party diff --git a/code/game/objects/items/weapons/circuitboards/machinery/holomap.dm b/code/game/objects/items/weapons/circuitboards/machinery/holomap.dm new file mode 100644 index 00000000000..8365797b46c --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machinery/holomap.dm @@ -0,0 +1,11 @@ +/obj/item/stock_parts/circuitboard/holomap + name = "circuitboard (holomap)" + board_type = "machine" + build_path = /obj/machinery/holomap + origin_tech = "{'engineering':1}" + req_components = list() + additional_spawn_components = list( + /obj/item/stock_parts/console_screen = 1, + /obj/item/stock_parts/keyboard = 1, + /obj/item/stock_parts/power/apc/buildable = 1 + ) diff --git a/code/game/turfs/exterior/_exterior.dm b/code/game/turfs/exterior/_exterior.dm index 5ceffedd623..24f624ffdf6 100644 --- a/code/game/turfs/exterior/_exterior.dm +++ b/code/game/turfs/exterior/_exterior.dm @@ -5,7 +5,7 @@ icon_state = "0" layer = PLATING_LAYER open_turf_type = /turf/exterior/open - turf_flags = TURF_FLAG_BACKGROUND + turf_flags = TURF_FLAG_BACKGROUND | TURF_IS_HOLOMAP_PATH var/base_color var/diggable = 1 var/dirt_color = "#7c5e42" diff --git a/code/game/turfs/exterior/exterior_wall.dm b/code/game/turfs/exterior/exterior_wall.dm index 59eb58b0b4e..9b51f45f062 100644 --- a/code/game/turfs/exterior/exterior_wall.dm +++ b/code/game/turfs/exterior/exterior_wall.dm @@ -12,6 +12,7 @@ var/global/list/natural_walls = list() opacity = TRUE density = TRUE blocks_air = TRUE + turf_flags = TURF_FLAG_BACKGROUND | TURF_IS_HOLOMAP_OBSTACLE var/strata var/paint_color diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm index fd0fc9a541e..4250d6f3bb3 100644 --- a/code/game/turfs/flooring/flooring_premade.dm +++ b/code/game/turfs/flooring/flooring_premade.dm @@ -342,12 +342,12 @@ name = "coastline" icon = 'icons/misc/beach2.dmi' icon_state = "sandwater" - turf_flags = TURF_IS_WET + turf_flags = TURF_IS_WET | TURF_IS_HOLOMAP_PATH /turf/simulated/floor/beach/water name = "water" icon_state = "water" - turf_flags = TURF_IS_WET + turf_flags = TURF_IS_WET | TURF_IS_HOLOMAP_PATH /turf/simulated/floor/beach/water/is_flooded(lying_mob, absolute) . = absolute ? ..() : lying_mob diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index dff990701e4..a2b6ac8f336 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -6,6 +6,7 @@ thermal_conductivity = 0.040 heat_capacity = 10000 explosion_resistance = 1 + turf_flags = TURF_IS_HOLOMAP_PATH // Damage to flooring. var/broken diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 269e75d0965..3a598173670 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -28,6 +28,7 @@ var/global/list/wall_fullblend_objects = list( explosion_resistance = 10 color = COLOR_GRAY40 atom_flags = ATOM_FLAG_CAN_BE_PAINTED + turf_flags = TURF_IS_HOLOMAP_OBSTACLE var/damage = 0 var/can_open = 0 diff --git a/code/game/turfs/unsimulated/beach.dm b/code/game/turfs/unsimulated/beach.dm index f9eabf8a09d..58ec57d520b 100644 --- a/code/game/turfs/unsimulated/beach.dm +++ b/code/game/turfs/unsimulated/beach.dm @@ -14,7 +14,7 @@ /turf/unsimulated/beach/water name = "Water" icon_state = "water" - turf_flags = TURF_IS_WET + turf_flags = TURF_IS_WET | TURF_IS_HOLOMAP_PATH /turf/unsimulated/beach/water/Initialize(var/ml) . = ..() diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm index 489990be804..24402cba184 100644 --- a/code/game/turfs/unsimulated/floor.dm +++ b/code/game/turfs/unsimulated/floor.dm @@ -2,6 +2,7 @@ name = "floor" icon = 'icons/turf/floors.dmi' icon_state = "Floor3" + turf_flags = TURF_IS_HOLOMAP_PATH /turf/unsimulated/floor/infinity //non-doomsday version for transit and wizden name = "\proper infinity" diff --git a/code/game/turfs/unsimulated/walls.dm b/code/game/turfs/unsimulated/walls.dm index 776ad29e082..35ae20c3970 100644 --- a/code/game/turfs/unsimulated/walls.dm +++ b/code/game/turfs/unsimulated/walls.dm @@ -4,6 +4,7 @@ icon_state = "riveted" opacity = 1 density = 1 + turf_flags = TURF_IS_HOLOMAP_OBSTACLE /turf/unsimulated/wall/fakeglass name = "window" diff --git a/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm b/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm index 58541dd651d..f45503fd492 100644 --- a/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm +++ b/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm @@ -489,4 +489,7 @@ path = /obj/item/stock_parts/circuitboard/fax_machine /datum/fabricator_recipe/imprinter/circuit/photocopier - path = /obj/item/stock_parts/circuitboard/photocopier \ No newline at end of file + path = /obj/item/stock_parts/circuitboard/photocopier + +/datum/fabricator_recipe/imprinter/circuit/holomap + path = /obj/item/stock_parts/circuitboard/holomap diff --git a/code/modules/holomap/holomap.dm b/code/modules/holomap/holomap.dm new file mode 100644 index 00000000000..1b2968516a2 --- /dev/null +++ b/code/modules/holomap/holomap.dm @@ -0,0 +1,417 @@ +/obj/machinery/holomap + name = "holomap" + desc = "A screen that projects a map of the surrounding structure." + icon = 'icons/obj/machines/stationmap.dmi' + icon_state = "station_map" + anchored = TRUE + density = FALSE + use_power = POWER_USE_IDLE + idle_power_usage = 10 + active_power_usage = 500 + light_color = "#64c864" + uncreated_component_parts = null + construct_state = /decl/machine_construction/default/panel_closed + base_type = /obj/machinery/holomap + layer = ABOVE_WINDOW_LAYER // Above windows. + directional_offset = "{'NORTH':{'y':-32}, 'SOUTH':{'y':32}, 'EAST':{'x':-32}, 'WEST':{'x':32}}" + + var/light_power_on = 1 + var/light_range_on = 2 + var/mob/watching_mob + var/image/small_station_map + var/image/floor_markings + var/image/panel + /// z-level on which the station map was initialized. + var/original_zLevel = 1 + /// set to FALSE when you initialize the station map on a zLevel that has its own icon formatted for use by station holomaps. + var/bogus = TRUE + var/datum/station_holomap/holomap_datum + +/obj/machinery/holomap/Destroy() + SSminimap.station_holomaps -= src + stopWatching() + QDEL_NULL(holomap_datum) + return ..() + +/obj/machinery/holomap/Initialize() + holomap_datum = new() + original_zLevel = loc.z + bogus = FALSE + . = ..() + SSminimap.station_holomaps += src + if(SSminimap.initialized) + update_map_data() + floor_markings = image('icons/obj/machines/stationmap.dmi', "decal_station_map") + floor_markings.dir = src.dir + update_icon() + +/obj/machinery/holomap/proc/update_map_data() + if(!SSminimap.holomaps[original_zLevel]) + bogus = TRUE + holomap_datum.initialize_holomap_bogus() + update_icon() + return + + holomap_datum.initialize_holomap(get_turf(src), reinit = TRUE) + + small_station_map = image(icon = SSminimap.holomaps[original_zLevel].holomap_small) + small_station_map.plane = ABOVE_LIGHTING_PLANE + small_station_map.layer = ABOVE_LIGHTING_LAYER + small_station_map.pixel_x = 10 + small_station_map.pixel_y = 10 + + update_icon() + +/obj/machinery/holomap/attack_hand(var/mob/user) + if(watching_mob && (watching_mob != user)) + to_chat(user, SPAN_WARNING("Someone else is currently watching the holomap.")) + return + if(user.loc != loc) + to_chat(user, SPAN_WARNING("You need to stand in front of \the [src].")) + return + startWatching(user) + +// Let people bump up against it to watch +/obj/machinery/holomap/Bumped(var/atom/movable/AM) + if(!watching_mob && isliving(AM) && AM.loc == loc) + startWatching(AM) + +// In order to actually get Bumped() we need to block movement. We're (visually) on a wall, so people +// couldn't really walk into us anyway. But in reality we are on the turf in front of the wall, so bumping +// against where we seem is actually trying to *exit* our real loc +/obj/machinery/holomap/CheckExit(atom/movable/mover as mob|obj, turf/target as turf) + if(get_dir(target, loc) == dir) // Opposite of "normal" since we are visually in the next turf over + return FALSE + else + return TRUE + +/obj/machinery/holomap/proc/startWatching(var/mob/user) + if(!isliving(user) || !anchored || !operable() || !user.client) + return FALSE + + var/datum/global_hud/global_hud = get_global_hud() + holomap_datum.station_map.loc = global_hud.holomap // Put the image on the holomap hud + holomap_datum.station_map.alpha = 0 // Set to transparent so we can fade in + animate(holomap_datum.station_map, alpha = 255, time = 5, easing = LINEAR_EASING) + flick("station_map_activate", src) + user.client.screen |= global_hud.holomap + user.client.images |= holomap_datum.station_map + + watching_mob = user + events_repository.register(/decl/observ/moved, watching_mob, src, /obj/machinery/holomap/proc/checkPosition) + events_repository.register(/decl/observ/destroyed, watching_mob, src, /obj/machinery/holomap/proc/stopWatching) + update_use_power(POWER_USE_ACTIVE) + + if(bogus) + to_chat(user, SPAN_WARNING("The holomap failed to initialize. This area of space cannot be mapped.")) + else + to_chat(user, SPAN_NOTICE("A hologram of your current location appears before your eyes.")) + + START_PROCESSING_MACHINE(src, MACHINERY_PROCESS_SELF) + +/obj/machinery/holomap/Process() + if(!operable()) + stopWatching() + return PROCESS_KILL + +/obj/machinery/holomap/proc/checkPosition() + if(!watching_mob || (watching_mob.loc != loc) || (dir != watching_mob.dir)) + stopWatching() + +/obj/machinery/holomap/proc/stopWatching() + if(watching_mob) + if(watching_mob.client) + animate(holomap_datum.station_map, alpha = 0, time = 5, easing = LINEAR_EASING) + var/mob/M = watching_mob + addtimer(CALLBACK(src, .proc/clear_image, M, holomap_datum.station_map), 5, TIMER_CLIENT_TIME)//we give it time to fade out + events_repository.unregister(/decl/observ/moved, watching_mob, src) + events_repository.unregister(/decl/observ/destroyed, watching_mob, src) + watching_mob = null + update_use_power(POWER_USE_IDLE) + if(holomap_datum) + holomap_datum.legend_deselect() + +/obj/machinery/holomap/proc/clear_image(mob/M, image/I) + if (M.client) + M.client.images -= I + +/obj/machinery/holomap/on_update_icon() + . = ..() + cut_overlays() + if(stat & BROKEN) + icon_state = "station_mapb" + set_light(0) + else if((stat & NOPOWER) || !anchored) + icon_state = "station_map0" + set_light(0) + else + icon_state = "station_map" + set_light(0.8, 0.1, 2, 2, "#1dbe17") + // Put the little "map" overlay down where it looks nice + if(small_station_map) + add_overlay(small_station_map) + if(floor_markings) + floor_markings.dir = src.dir + floor_markings.pixel_x = -src.pixel_x + floor_markings.pixel_y = -src.pixel_y + add_overlay(floor_markings) + if(panel_open) + add_overlay("station_map-panel") + +/obj/machinery/holomap/explosion_act(severity) + . = ..() + if(!QDELETED(src)) + switch(severity) + if(1) + qdel(src) + if(2) + if(prob(50)) + qdel(src) + else + set_broken() + if(3) + if(prob(25)) + set_broken() + +/obj/screen/levelselect + icon = 'icons/misc/mark.dmi' + layer = HUD_ITEM_LAYER + var/active = TRUE + var/datum/station_holomap/owner = null + +/obj/screen/levelselect/Initialize(mapload, datum/station_holomap/_owner) + . = ..() + owner = _owner + +/obj/screen/levelselect/Click() + return (!usr.incapacitated() && !isghost(usr)) +/obj/screen/levelselect/up + icon_state = "fup" + +/obj/screen/levelselect/up/Click() + if(..()) + if(owner) + owner.set_level(owner.displayed_level - 1) + +/obj/screen/levelselect/down + icon_state = "fdn" + +/obj/screen/levelselect/down/Click() + if(..()) + if(owner) + owner.set_level(owner.displayed_level + 1) + +/obj/screen/legend + icon = null + maptext_height = 128 + maptext_width = 128 + layer = HUD_ITEM_LAYER + pixel_x = HOLOMAP_LEGEND_X + appearance_flags = PIXEL_SCALE | RESET_COLOR + var/saved_color + var/datum/station_holomap/owner = null + var/has_areas = FALSE + +/obj/screen/legend/cursor + icon = 'icons/misc/holomap_markers.dmi' + icon_state = "you" + maptext_x = 11 + pixel_x = HOLOMAP_LEGEND_X - 3 + has_areas = TRUE + +/obj/screen/legend/Initialize(mapload, map_color, text) + . = ..() + saved_color = map_color + maptext = "[text]" + alpha = 255 + +/obj/screen/legend/Click(location, control, params) + if(!usr.incapacitated() && !isghost(usr)) + if(istype(owner)) + owner.legend_select(src) + +/obj/screen/legend/proc/Setup(z_level) + has_areas = FALSE + //Get the areas for this z level and mark if we're empty + overlays.Cut() + for(var/area/A in SSminimap.holomaps[z_level].holomap_areas) + if(A.holomap_color == saved_color) + var/image/area = image(SSminimap.holomaps[z_level].holomap_areas[A]) + area.pixel_x = ((HOLOMAP_ICON_SIZE / 2) - world.maxx / 2) - pixel_x + area.pixel_y = ((HOLOMAP_ICON_SIZE / 2) - world.maxy / 2) - pixel_y + overlays += area + has_areas = TRUE + +//What happens when we are clicked on / when another is clicked on +/obj/screen/legend/proc/Select() + //Start blinking + animate(src, alpha = 0, time = 2, loop = -1, easing = JUMP_EASING | EASE_IN | EASE_OUT) + animate(alpha = 254, time = 2, loop = -1, easing = JUMP_EASING | EASE_IN | EASE_OUT) + +/obj/screen/legend/proc/Deselect() + //Stop blinking + animate(src, flags = ANIMATION_END_NOW) + +//Cursor doesnt do anything specific. +/obj/screen/legend/cursor/Setup() + +/obj/screen/legend/cursor/Select() + +/obj/screen/legend/cursor/Deselect() + +// Simple datum to keep track of a running holomap. Each machine capable of displaying the holomap will have one. +/datum/station_holomap + var/image/station_map + var/image/cursor + var/list/obj/screen/legend/legend + var/list/obj/screen/maptexts + var/list/obj/screen/levelselect/lbuttons + var/list/image/levels + var/list/z_levels + var/z = -1 + var/displayed_level = 1 //Index of level to display + +/datum/station_holomap/Destroy(force) + QDEL_NULL(station_map) + QDEL_NULL(cursor) + QDEL_NULL_LIST(legend) + QDEL_NULL_LIST(levels) + QDEL_NULL_LIST(lbuttons) + QDEL_NULL_LIST(maptexts) + QDEL_NULL_LIST(z_levels) + . = ..() + +/datum/station_holomap/proc/initialize_holomap(turf/T, isAI = null, mob/user = null, reinit = FALSE) + z = T.z + if(!station_map || reinit) + station_map = image(SSminimap.holomaps[z].holomap_combined) + if(!cursor || reinit) + cursor = image('icons/misc/holomap_markers.dmi', "you") + cursor.layer = HUD_ABOVE_ITEM_LAYER + + if(!LAZYLEN(legend) || reinit) + QDEL_NULL_LIST(legend) + legend = list( + new /obj/screen/legend(null, HOLOMAP_AREACOLOR_COMMAND, "■ Command"), + new /obj/screen/legend(null, HOLOMAP_AREACOLOR_SECURITY, "■ Security"), + new /obj/screen/legend(null, HOLOMAP_AREACOLOR_MEDICAL, "■ Medical"), + new /obj/screen/legend(null, HOLOMAP_AREACOLOR_SCIENCE, "■ Research"), + new /obj/screen/legend(null, HOLOMAP_AREACOLOR_EXPLORATION, "■ Exploration"), + new /obj/screen/legend(null, HOLOMAP_AREACOLOR_ENGINEERING, "■ Engineering"), + new /obj/screen/legend(null, HOLOMAP_AREACOLOR_CARGO, "■ Supply"), + new /obj/screen/legend(null, HOLOMAP_AREACOLOR_AIRLOCK, "■ Airlock"), + new /obj/screen/legend(null, HOLOMAP_AREACOLOR_ESCAPE, "■ Escape"), + new /obj/screen/legend(null, HOLOMAP_AREACOLOR_CREW, "■ Crew"), + new /obj/screen/legend/cursor(null, HOLOMAP_AREACOLOR_BASE, "You are here") + ) + if(reinit) + QDEL_NULL_LIST(maptexts) + QDEL_NULL_LIST(levels) + QDEL_NULL_LIST(z_levels) + QDEL_NULL_LIST(lbuttons) + + station_map = image(icon(HOLOMAP_ICON, "stationmap")) + station_map.layer = UNDER_HUD_LAYER + + //This is where the fun begins + if(length(global.using_map.overmap_ids)) + var/obj/effect/overmap/visitable/O = global.overmap_sectors["[z]"] + + var/current_z_offset_x = (HOLOMAP_ICON_SIZE / 2) - world.maxx / 2 + var/current_z_offset_y = (HOLOMAP_ICON_SIZE / 2) - world.maxy / 2 + + //For the given z level fetch the related map sector and build the list + if(istype(O)) + var/z_count = length(O.map_z) + var/current_z_index = 1 + z_levels = O.map_z.Copy() + + if(z_count > 1) + if(!LAZYLEN(lbuttons)) + //Add the buttons for switching levels + LAZYADD(lbuttons, new /obj/screen/levelselect/up(null, src)) + LAZYADD(lbuttons, new /obj/screen/levelselect/down(null, src)) + lbuttons[1].pixel_y = HOLOMAP_MARGIN - 22 + lbuttons[2].pixel_y = HOLOMAP_MARGIN + 5 + lbuttons[1].pixel_x = 254 + lbuttons[2].pixel_x = 196 + + //Each level now has to be built and offset properly. Then stored to be showed later + for(var/level = 1; level <= z_count; level++) + if (z == O.map_z[level]) + current_z_index = level + + //Turfs and walls + var/image/map_image = image(SSminimap.holomaps[O.map_z[level]].holomap_base) + + map_image.color = COLOR_HOLOMAP_HOLOFIER + map_image.layer = HUD_BASE_LAYER + + map_image.pixel_x = (HOLOMAP_ICON_SIZE / 2) - world.maxx / 2 + map_image.pixel_y = (HOLOMAP_ICON_SIZE / 2) - world.maxy / 2 + + //Store the image for future use + //LAZYADD(levels, map_image) + LAZYSET(levels, "[O.map_z[level]]", map_image) + + var/obj/screen/maptext_overlay = new(null) + maptext_overlay.icon = null + maptext_overlay.layer = HUD_ITEM_LAYER + maptext_overlay.appearance_flags |= RESET_COLOR | PIXEL_SCALE + maptext_overlay.maptext = STYLE_SMALLFONTS_OUTLINE("
    LEVEL [level-1]
    ", 7, COLOR_WHITE, COLOR_BLACK) + maptext_overlay.maptext_width = 96 + maptext_overlay.pixel_x = (HOLOMAP_ICON_SIZE / 2) - (maptext_overlay.maptext_width / 2) + maptext_overlay.pixel_y = HOLOMAP_MARGIN + + LAZYSET(maptexts, "[O.map_z[level]]", maptext_overlay) + + //Reset to starting zlevel + set_level(current_z_index) + if(isAI) + T = get_turf(user.client.eye) + cursor.pixel_x = (T.x - 6 + current_z_offset_x) * PIXEL_MULTIPLIER + cursor.pixel_y = (T.y - 6 + current_z_offset_y) * PIXEL_MULTIPLIER + + +/datum/station_holomap/proc/set_level(level) + if(level > z_levels.len) + return + + displayed_level = level + + station_map.overlays.Cut() + station_map.vis_contents.Cut() + + if(z == z_levels[displayed_level]) + station_map.overlays += cursor + + station_map.overlays += levels["[z_levels[displayed_level]]"] + station_map.vis_contents += maptexts["[z_levels[displayed_level]]"] + + //Fix legend position + var/pixel_y = HOLOMAP_LEGEND_Y + for(var/obj/screen/legend/element in legend) + element.owner = src + element.pixel_y = pixel_y //Set adjusted pixel y as it will be needed for area placement + element.Setup(z_levels[displayed_level]) + if(element.has_areas) + pixel_y -= 10 + station_map.vis_contents += element + + if(displayed_level > 1) + station_map.vis_contents += lbuttons[1] + + if(displayed_level < z_levels.len) + station_map.vis_contents += lbuttons[2] + +/datum/station_holomap/proc/legend_select(obj/screen/legend/L) + legend_deselect() + L.Select() + +/datum/station_holomap/proc/legend_deselect() + for(var/obj/screen/legend/entry in legend) + entry.Deselect() + +/datum/station_holomap/proc/initialize_holomap_bogus() + station_map = image('icons/480x480.dmi', "stationmap") + station_map.overlays |= image('icons/effects/64x64.dmi', "notfound", pixel_x = 7 * WORLD_ICON_SIZE, pixel_y = 7 * WORLD_ICON_SIZE) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index d5e65ff9921..4c059974e73 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -5,6 +5,7 @@ blocks_air = 1 density = 1 opacity = 1 + turf_flags = TURF_IS_HOLOMAP_OBSTACLE var/global/list/mining_floors = list() /**********************Asteroid**************************/ @@ -22,7 +23,7 @@ var/global/list/mining_floors = list() initial_flooring = null initial_gas = null temperature = TCMB - turf_flags = TURF_FLAG_BACKGROUND + turf_flags = TURF_FLAG_BACKGROUND | TURF_IS_HOLOMAP_PATH var/dug = 0 //0 = has not yet been dug, 1 = has already been dug var/overlay_detail diff --git a/code/modules/overmap/exoplanets/_exoplanet.dm b/code/modules/overmap/exoplanets/_exoplanet.dm index 4bd89d390a2..dade341d28a 100644 --- a/code/modules/overmap/exoplanets/_exoplanet.dm +++ b/code/modules/overmap/exoplanets/_exoplanet.dm @@ -298,5 +298,5 @@ name = "\improper Planetary surface" ambience = list('sound/effects/wind/wind_2_1.ogg','sound/effects/wind/wind_2_2.ogg','sound/effects/wind/wind_3_1.ogg','sound/effects/wind/wind_4_1.ogg','sound/effects/wind/wind_4_2.ogg','sound/effects/wind/wind_5_1.ogg') always_unpowered = 1 - area_flags = AREA_FLAG_IS_BACKGROUND | AREA_FLAG_EXTERNAL + area_flags = AREA_FLAG_IS_BACKGROUND | AREA_FLAG_EXTERNAL | AREA_FLAG_HIDE_FROM_HOLOMAP is_outside = OUTSIDE_YES diff --git a/code/modules/turbolift/turbolift_areas.dm b/code/modules/turbolift/turbolift_areas.dm index dbf568aec2e..fcc9558991b 100644 --- a/code/modules/turbolift/turbolift_areas.dm +++ b/code/modules/turbolift/turbolift_areas.dm @@ -4,6 +4,7 @@ base_turf = /turf/simulated/open requires_power = 0 sound_env = SMALL_ENCLOSED + holomap_color = HOLOMAP_AREACOLOR_LIFTS var/lift_floor_label = null var/lift_floor_name = null diff --git a/icons/480x480.dmi b/icons/480x480.dmi index 90ea9fbd55cbef9fa3da246b5092b86ccca22ec1..0b6d072855ac702f84d96e8204461feb432fac8d 100644 GIT binary patch literal 46289 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 literal 2074 zcmeAS@N?(olHy`uVBq!ia0y~yV0-|=9Be?5+AI5}0;!^^kcbkO)Z*l#%z~24{5%GR ziaEN+_wqRyh_GGQ`CW7025zUMmr9~94_I?dFZ(e0TibQ>4Ra?idRt|Eh-X?J-^Kat zCaZMRzy5HQFq=7}>w3S7y=-Y4zA)Xb zk-liTnEw?61ADTki(^Q|oVQmE84oB395}GN>*M~0?z9Jfj@#B)Zf0lraW$Ns;XpT! z1OpQr4+A4JTSEgQv%`S~Mumg}3<3rT3>*>$3@oG4qrozo97eOjXz4IoDvs6$XqDuS Yx23H5EZ#i}ft5Xjr>mdKI;Vst0NeF~X#fBK diff --git a/icons/effects/64x64.dmi b/icons/effects/64x64.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5ebf9ff164eb017a8c02f83bb3a1616104e5bef3 GIT binary patch literal 4090 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 literal 0 HcmV?d00001 diff --git a/icons/misc/holomap_markers.dmi b/icons/misc/holomap_markers.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3ea32c120d0e4bebb8b7e65acf78f87250ade248 GIT binary patch literal 9371 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 literal 0 HcmV?d00001 diff --git a/icons/obj/machines/stationmap.dmi b/icons/obj/machines/stationmap.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f57bf08913e7599511193a02e37f3484868961f7 GIT binary patch literal 3988 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 dt4Y`)XSh(H?$