From 26787f1ed2fd95ea2ca3cb9b457ae132d6e0d452 Mon Sep 17 00:00:00 2001 From: its-helvi <95545138+its-helvi@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:28:09 -0500 Subject: [PATCH 01/16] Fixes operating consoles (#6958) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## About The Pull Request Screenshot 2025-01-03 at 11 07 31 PM tgui is loud and it is demanding to know why I would sin against both nature and god so thoughtlessly ## Why It's Good For The Game - Surgical consoles should now actually work instead of not recognizing nearby operating tables. - Surgical consoles should no longer spam users with organ removal prompts after opening someone's ribcage. - Surgery steps now have proper-ish names. - I have tried to test this extensively but probably missed something with surgery on alien species. Hopefully not. ## Changelog :cl: fix: NanoTrasen's engineering teams have concluded an investigation on the newest line of Vey-Med patient monitoring consoles, augmented with D-class drone personalities, reportedly "going on strike" mid-surgery. This has been fixed violently. fix: Said drone personalities also reportedly urged surgeons to perform heart transplants and pneumonectomies on healthy patients. This has also been fixed. Violently. /:cl: --- code/game/machinery/computer/Operating.dm | 29 +++-- code/modules/surgery/bones.dm | 10 ++ code/modules/surgery/encased.dm | 12 ++ code/modules/surgery/external_repair.dm | 6 + code/modules/surgery/face.dm | 8 ++ code/modules/surgery/generic.dm | 14 +++ code/modules/surgery/implant.dm | 10 ++ code/modules/surgery/limb_reattach.dm | 8 ++ code/modules/surgery/neck.dm | 12 ++ code/modules/surgery/organs_internal.dm | 9 ++ code/modules/surgery/other.dm | 16 +++ code/modules/surgery/robotics.dm | 18 +++ code/modules/surgery/slimes.dm | 5 + code/modules/surgery/surgery.dm | 2 + .../tgui/interfaces/OperatingComputer.js | 118 ++++++------------ 15 files changed, 189 insertions(+), 88 deletions(-) diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 1e7e42ae92ce..2e1f80158f1a 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -54,7 +54,7 @@ ui_interact(user) ..() -/obj/machinery/computer/operating/ui_interact(mob/user, datum/tgui/ui = null) +/obj/machinery/computer/operating/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "OperatingComputer", "Patient Monitor") @@ -63,7 +63,10 @@ /obj/machinery/computer/operating/ui_data(mob/user, datum/tgui/ui) var/data[0] var/mob/living/carbon/human/occupant - if(table) + if(!table) + data["table"] = 0 + else + data["table"] = 1 occupant = table.victim data["hasOccupant"] = occupant ? 1 : 0 var/occupantData[0] @@ -119,9 +122,9 @@ occupantData["bloodPercent"] = round(100*(blood_volume/occupant.species.blood_volume), 0.01) //copy pasta ends here occupantData["bloodType"] = occupant.dna.b_type - occupantData["surgery"] = build_surgery_list(user) + occupantData["procedures"] = build_surgery_list(user) - data["occupant"] = occupantData + data["patient"] = occupantData data["verbose"]=verbose data["oxyAlarm"]=oxyAlarm data["choice"]=choice @@ -302,7 +305,19 @@ */ /obj/machinery/computer/operating/proc/find_next_steps(mob/user, zone) . = list() - for(var/datum/surgery_step/S in get_surgery_steps_without_basetypes()) + var/list/possible_next_steps = get_surgery_steps_without_basetypes() + // these steps prompt the player in can_use, don't call them every ui update + var/list/prompting_surgery_steps = list( + /datum/surgery_step/internal/detatch_organ, + /datum/surgery_step/internal/remove_organ, + /datum/surgery_step/internal/attach_organ, + /datum/surgery_step/internal/rip_organ, + /datum/surgery_step/robotics/detatch_organ_robotic, + /datum/surgery_step/robotics/attach_organ_robotic, + ) + for(var/datum/surgery_step/S in possible_next_steps) + if (S.type in prompting_surgery_steps) + continue if(S.can_use(user, victim, zone, null) && S.is_valid_target(victim)) var/allowed_tools_by_name = list() for(var/tool in S.allowed_tools) @@ -311,6 +326,4 @@ continue var/obj/tool_path = tool allowed_tools_by_name += capitalize(initial(tool_path.name)) - // Please for the love of all that is holy, someone make surgery steps - // have names so I don't have to do this stupid pretty_type shit. - . += "[pretty_type(S)]: [english_list(allowed_tools_by_name)]" + . += list(S.step_name = english_list(allowed_tools_by_name)) diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index 734a788d43e9..2e27a62087e1 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -8,6 +8,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/glue_bone + step_name = "Glue bone" + allowed_tools = list( /obj/item/surgical/bonegel = 100 ) @@ -50,6 +52,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/set_bone + step_name = "Set bone" + allowed_tools = list( /obj/item/surgical/bonesetter = 100, /obj/item/surgical/bonesetter_primitive = 60 @@ -95,6 +99,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/mend_skull + step_name = "Mend skull" + allowed_tools = list( /obj/item/surgical/bonesetter = 100, /obj/item/surgical/bonesetter_primitive = 60 @@ -135,6 +141,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/finish_bone + step_name = "Finish bone" + allowed_tools = list( /obj/item/surgical/bonegel = 100 ) @@ -176,6 +184,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/clamp_bone + step_name = "Clamp bone" + allowed_tools = list( /obj/item/surgical/bone_clamp = 100 ) diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index 438506ef882c..aa50cc8532f3 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -19,6 +19,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/saw + step_name = "Saw bones" + allowed_tools = list( /obj/item/surgical/circular_saw = 100, \ /obj/item/surgical/saw_bronze = 75, \ @@ -70,6 +72,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/retract + step_name = "Retract bones" + allowed_tools = list( /obj/item/surgical/retractor = 100, /obj/item/surgical/retractor_primitive = 75 @@ -124,6 +128,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/close + step_name = "Close bones" + allowed_tools = list( /obj/item/surgical/retractor = 100, /obj/item/surgical/retractor_primitive = 75 @@ -183,6 +189,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/mend + step_name = "Mend bones" + allowed_tools = list( /obj/item/surgical/bonegel = 100 ) @@ -224,6 +232,8 @@ // Saw/Retractor/Gel Combi-open and close. /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/advancedsaw_open + step_name = "Divert bones" + allowed_tools = list( /obj/item/surgical/circular_saw/manager = 100 ) @@ -273,6 +283,8 @@ /datum/surgery_step/open_encased/advancedsaw_mend + step_name = "Seal bones" + allowed_tools = list( /obj/item/surgical/circular_saw/manager = 100 ) diff --git a/code/modules/surgery/external_repair.dm b/code/modules/surgery/external_repair.dm index 416c1ba6a109..a708a2e608f2 100644 --- a/code/modules/surgery/external_repair.dm +++ b/code/modules/surgery/external_repair.dm @@ -30,6 +30,8 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/repairflesh/scan_injury + step_name = "Scan injury" + allowed_tools = list( /obj/item/healthanalyzer = 100, /obj/item/atmos_analyzer = 10 @@ -80,6 +82,8 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/repairflesh/repair_burns + step_name = "Reconstruct skin" + allowed_tools = list( /obj/item/stack/medical/advanced/ointment = 100, /obj/item/surgical/FixOVein = 100, @@ -149,6 +153,8 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/repairflesh/repair_brute + step_name = "Repair skin" + allowed_tools = list( /obj/item/stack/medical/advanced/bruise_pack = 100, /obj/item/surgical/cautery = 100, diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm index 6bcc37b58711..6882d8e6f49d 100644 --- a/code/modules/surgery/face.dm +++ b/code/modules/surgery/face.dm @@ -21,6 +21,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/cut_face + step_name = "Cut face" + allowed_tools = list( /obj/item/surgical/scalpel = 100, \ /obj/item/surgical/scalpel_primitive = 80, \ @@ -57,6 +59,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/face/mend_vocal + step_name = "Fix vocal cords" + allowed_tools = list( /obj/item/surgical/hemostat = 100, \ /obj/item/stack/cable_coil = 75, \ @@ -90,6 +94,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/face/fix_face + step_name = "Fix face" + allowed_tools = list( /obj/item/surgical/retractor = 100, \ /obj/item/surgical/retractor_primitive = 75, \ @@ -125,6 +131,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/face/cauterize + step_name = "Cauterize" + allowed_tools = list( /obj/item/surgical/cautery = 100, \ /obj/item/clothing/mask/smokable/cigarette = 75, \ diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index 253a47906a23..bf5ce7447ce9 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -27,6 +27,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/cut_open + step_name = "Incise" + allowed_tools = list( /obj/item/surgical/scalpel = 100, /obj/item/surgical/scalpel_bronze = 90, @@ -73,6 +75,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/cut_with_laser + step_name = "Laser incision" + allowed_tools = list( /obj/item/surgical/scalpel/laser3 = 95, \ /obj/item/surgical/scalpel/laser2 = 85, \ @@ -119,6 +123,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/incision_manager + step_name = "Prepared incision" + allowed_tools = list( /obj/item/surgical/scalpel/manager = 100, ) @@ -165,6 +171,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/clamp_bleeders + step_name = "Clamp bleeders" + allowed_tools = list( /obj/item/surgical/hemostat = 100, /obj/item/stack/cable_coil = 75, @@ -205,6 +213,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/retract_skin + step_name = "Retract skin" + allowed_tools = list( /obj/item/surgical/retractor = 100, /obj/item/surgical/retractor_primitive = 75, @@ -266,6 +276,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/cauterize + step_name = "Cauterize" + allowed_tools = list( /obj/item/surgical/cautery = 100, /obj/item/clothing/mask/smokable/cigarette = 75, @@ -308,6 +320,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/amputate + step_name = "Amputate limb" + allowed_tools = list( /obj/item/surgical/circular_saw = 100, /obj/item/material/knife/machete/hatchet = 75, diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index b6c00fe16c6d..938d58778143 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -44,6 +44,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/cavity/make_space + step_name = "Prepare cavity" + allowed_tools = list( /obj/item/surgical/surgicaldrill = 100, /obj/item/pen = 75, @@ -76,6 +78,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/cavity/close_space + step_name = "Seal cavity" + priority = 2 allowed_tools = list( /obj/item/surgical/cautery = 100, @@ -111,6 +115,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/cavity/place_item + step_name = "Implant item" + priority = 0 allowed_tools = list(/obj/item = 100) @@ -122,6 +128,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) //if(istype(user,/mob/living/silicon/robot)) //return + if(tool == null) + return 0 if(affected && affected.cavity) var/total_volume = tool.w_class for(var/obj/item/I in affected.implants) @@ -168,6 +176,8 @@ update_icon() /datum/surgery_step/cavity/implant_removal + step_name = "Remove implant" + allowed_tools = list( /obj/item/surgical/hemostat = 100, \ /obj/item/surgical/hemostat_primitive = 50, \ diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index a2c2e78d804d..0e3a17c4cfb7 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -22,12 +22,16 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/limb/attach + step_name = "Attach limb" + allowed_tools = list(/obj/item/organ/external = 100) min_duration = 50 max_duration = 70 /datum/surgery_step/limb/attach/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if (!istype(tool, /obj/item/organ/external)) + return 0 var/obj/item/organ/external/E = tool var/obj/item/organ/external/P = target.organs_by_name[E.parent_organ] var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -73,6 +77,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/limb/connect + step_name = "Connect muscles" + allowed_tools = list( /obj/item/surgical/hemostat = 100, \ /obj/item/stack/cable_coil = 75, \ @@ -113,6 +119,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/limb/mechanize + step_name = "Attach prosthetic" + allowed_tools = list(/obj/item/robot_parts = 100) min_duration = 80 diff --git a/code/modules/surgery/neck.dm b/code/modules/surgery/neck.dm index 069187ac9438..f5997cd8a81d 100644 --- a/code/modules/surgery/neck.dm +++ b/code/modules/surgery/neck.dm @@ -21,6 +21,8 @@ ///////////////////////////// /datum/surgery_step/brainstem/mend_vessels + step_name = "Mend vessels" + priority = 1 allowed_tools = list( /obj/item/surgical/FixOVein = 100, @@ -56,6 +58,8 @@ ///////////////////////////// /datum/surgery_step/brainstem/drill_vertebrae + step_name = "Drill vertebrae" + priority = 3 //Do this instead of expanding the skull cavity allowed_tools = list( /obj/item/surgical/surgicaldrill = 100, @@ -99,6 +103,8 @@ ///////////////////////////// /datum/surgery_step/brainstem/clean_chips + step_name = "Clear bone chips" + priority = 3 //Do this instead of picking around for implants. allowed_tools = list( /obj/item/surgical/hemostat = 100, @@ -139,6 +145,8 @@ ///////////////////////////// /datum/surgery_step/brainstem/mend_cord + step_name = "Mend spinal cord" + priority = 1 //Do this after IB. allowed_tools = list( /obj/item/surgical/FixOVein = 100, @@ -179,6 +187,8 @@ ///////////////////////////// /datum/surgery_step/brainstem/mend_vertebrae + step_name = "Mend vertebrae" + priority = 3 //Do this instead of fixing bones. allowed_tools = list( /obj/item/surgical/bonegel = 100, @@ -217,6 +227,8 @@ ///////////////////////////// /datum/surgery_step/brainstem/realign_tissue + step_name = "Realign tissue" + priority = 3 //Do this instead of searching for objects in the skull. allowed_tools = list( /obj/item/surgical/hemostat = 100, diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index e96159a8265b..8ad03a4e9665 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -58,6 +58,8 @@ // CHEST INTERNAL ORGAN SURGERY // ////////////////////////////////////////////////////////////////// /datum/surgery_step/internal/fix_organ + step_name = "Fix organs" + allowed_tools = list( /obj/item/stack/medical/advanced/bruise_pack= 100, \ /obj/item/stack/medical/bruise_pack = 20 @@ -145,6 +147,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/internal/detatch_organ/ + step_name = "Detatch organ" allowed_tools = list( /obj/item/surgical/scalpel = 100, \ @@ -209,6 +212,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/internal/remove_organ + step_name = "Extract organ" allowed_tools = list( /obj/item/surgical/hemostat = 100, \ @@ -268,6 +272,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/internal/replace_organ + step_name = "Insert organ" + allowed_tools = list( /obj/item/organ = 100 ) @@ -347,6 +353,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/internal/attach_organ + step_name = "Attach organ" + allowed_tools = list( /obj/item/surgical/FixOVein = 100, \ /obj/item/stack/cable_coil = 75 @@ -399,6 +407,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/internal/rip_organ + step_name = "Rip organ" allowed_tools = list( /obj/item/surgical/scalpel/ripper = 100 diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 5319e1c8e99e..477605328ce1 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -8,6 +8,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/fix_vein + step_name = "Fix vein" + priority = 2 allowed_tools = list( /obj/item/surgical/FixOVein = 100, \ @@ -70,6 +72,8 @@ // Necrosis Surgery Step 1 /////////////////////////////////////////////////////////////// /datum/surgery_step/fix_dead_tissue //Debridement + step_name = "Debride tissue" + priority = 2 allowed_tools = list( /obj/item/surgical/scalpel = 100, \ @@ -119,6 +123,8 @@ // Necrosis Surgery Step 2 /////////////////////////////////////////////////////////////// /datum/surgery_step/treat_necrosis + step_name = "Treat necrosis" + priority = 2 allowed_tools = list( /obj/item/reagent_containers/dropper = 100, @@ -194,6 +200,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/hardsuit + step_name = "Remove hardsuit" + allowed_tools = list( /obj/item/weldingtool = 80, /obj/item/surgical/circular_saw = 60, @@ -260,6 +268,8 @@ return target_zone == BP_TORSO && (MUTATION_HUSK in target.mutations) /datum/surgery_step/dehusk/structinitial + step_name = "Create mesh" + allowed_tools = list( /obj/item/surgical/bioregen = 100 ) @@ -289,6 +299,8 @@ ..() /datum/surgery_step/dehusk/relocateflesh + step_name = "Relocate flesh" + allowed_tools = list( /obj/item/surgical/hemostat = 100, \ /obj/item/stack/cable_coil = 75, \ @@ -321,6 +333,8 @@ ..() /datum/surgery_step/dehusk/structfinish + step_name = "Finish structure" + allowed_tools = list( /obj/item/surgical/bioregen = 100, \ /obj/item/surgical/FixOVein = 30 @@ -365,6 +379,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/internal/detoxify + step_name = "Detoxify" + blood_level = 1 allowed_tools = list(/obj/item/surgical/bioregen=100) min_duration = 90 diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index b24a7dca4162..14a3fda45380 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -28,6 +28,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/unscrew_hatch + step_name = "Unscrew hatch" + allowed_tools = list( /obj/item/coin = 50, /obj/item/material/knife = 50 @@ -67,6 +69,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/open_hatch + step_name = "Open hatch" + allowed_tools = list( /obj/item/surgical/retractor = 100, /obj/item/surgical/retractor_primitive = 75, @@ -105,6 +109,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/close_hatch + step_name = "Close hatch" + allowed_tools = list( /obj/item/surgical/retractor = 100, /obj/item/surgical/retractor_primitive = 75, @@ -144,6 +150,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/repair_brute + step_name = "Fix structure" + allowed_tools = list( /obj/item/weldingtool = 100, /obj/item/pickaxe/plasmacutter = 50 @@ -185,6 +193,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/repair_burn + step_name = "Fix wiring" + allowed_tools = list( /obj/item/stack/cable_coil = 100 ) @@ -233,6 +243,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/fix_organ_robotic //For artificial organs + step_name = "Repair systems" + allowed_tools = list( /obj/item/stack/nanopaste = 100, \ /obj/item/surgical/bonegel = 30, \ @@ -301,6 +313,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/detatch_organ_robotic + step_name = "Decouple system" allowed_tools = list( /obj/item/multitool = 100 @@ -354,6 +367,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/attach_organ_robotic + step_name = "Install system" allowed_tools = list( /obj/item/surgical/FixOVein = 100 @@ -406,6 +420,8 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/install_mmi + step_name = "Install MMI" + allowed_tools = list( /obj/item/mmi = 100 ) @@ -484,6 +500,8 @@ */ /datum/surgery_step/robotics/install_nymph + step_name = "Install Nymph" + allowed_tools = list( /obj/item/holder/diona = 100 ) diff --git a/code/modules/surgery/slimes.dm b/code/modules/surgery/slimes.dm index 4b83d8c3b158..ac945710cdd9 100644 --- a/code/modules/surgery/slimes.dm +++ b/code/modules/surgery/slimes.dm @@ -12,6 +12,7 @@ /datum/surgery_step/slime/cut_flesh + step_name = "Incise" allowed_tools = list( /obj/item/surgical/scalpel = 100, /obj/item/surgical/scalpel_bronze = 90, @@ -42,6 +43,8 @@ /datum/surgery_step/slime/cut_innards + step_name = "Expose core" + allowed_tools = list( /obj/item/surgical/scalpel = 100, \ /obj/item/surgical/scalpel_bronze = 90, \ @@ -72,6 +75,8 @@ /datum/surgery_step/slime/saw_core + step_name = "Extract core" + allowed_tools = list( /obj/item/surgical/circular_saw = 100, \ /obj/item/surgical/saw_bronze = 90, \ diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 8e430c51bd3d..b6ae6f8fa96b 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -7,6 +7,8 @@ var/surgery_odds = 30 // temporary - surgery odds for on-turf. /datum/surgery_step + var/step_name = "" //label to show for this step on operating consoles + var/priority = 0 //steps with higher priority would be attempted first var/req_open = 1 //1 means the part must be cut open, 0 means it doesn't diff --git a/tgui/packages/tgui/interfaces/OperatingComputer.js b/tgui/packages/tgui/interfaces/OperatingComputer.js index 07898019c094..7fb2353f022c 100644 --- a/tgui/packages/tgui/interfaces/OperatingComputer.js +++ b/tgui/packages/tgui/interfaces/OperatingComputer.js @@ -1,5 +1,5 @@ -import { useBackend, useSharedState } from '../backend'; -import { AnimatedNumber, Button, LabeledList, NoticeBox, ProgressBar, Section, Tabs } from '../components'; +import { useBackend } from '../backend'; +import { AnimatedNumber, LabeledList, NoticeBox, ProgressBar, Section, Divider } from '../components'; import { Window } from '../layouts'; const damageTypes = [ @@ -21,37 +21,32 @@ const damageTypes = [ }, ]; -export const OperatingComputer = (props, context) => { - const { act } = useBackend(context); - const [tab, setTab] = useSharedState(context, 'tab', 1); +const patientStates = { + 0: { + color: 'good', + statText: 'Conscious', + }, + 1: { + color: 'average', + statText: 'Unconscious', + }, + 2: { + color: 'bad', + statText: 'Dead', + }, + 3: { + color: 'light-gray', + statText: 'Unknown', + }, +}; +export const OperatingComputer = (props, context) => { return ( - - setTab(1)}> - Patient State - - setTab(2)}> - Surgery Procedures - - act("open_experiments")}> - Experiments - - - {tab === 1 && ( - - )} - {tab === 2 && ( - - )} + ); @@ -61,9 +56,10 @@ const PatientStateView = (props, context) => { const { act, data } = useBackend(context); const { table, - procedures = [], - patient = {}, + hasOccupant, + patient, } = data; + const patientStat = patientStates[patient.stat] || patientStates[3]; if (!table) { return ( @@ -73,16 +69,16 @@ const PatientStateView = (props, context) => { } return ( <> -
- {patient && ( +
+ {hasOccupant && ( - {patient.stat} + color={patientStat.color}> + {patientStat.statText} - {patient.blood_type} + {patient.bloodType} { 'No Patient Detected' )}
- {procedures.length === 0 && ( + {(patient.procedures?.length === 0) && (
No Active Procedures
)} - {procedures.map(procedure => ( + {patient.procedures?.map(procedure => (
+ {procedure.currentStage} + - - {procedure.next_step} - {procedure.chems_needed && ( - <> - Required Chemicals: -
- {procedure.chems_needed} - - )} -
- {!!data.alternative_step && ( - - {procedure.alternative_step} - {procedure.alt_chems_needed && ( - <> - Required Chemicals: -
- {procedure.alt_chems_needed} - - )} + {Object.entries(procedure.nextSteps).map(([k, v]) => ( + + {v} - )} + ))}
))} ); }; - -const SurgeryProceduresView = (props, context) => { - const { act, data } = useBackend(context); - const { - surgeries = [], - } = data; - return ( -
-
- ); -}; From 1c677044de3d36d40abe2aa5f1f01cc0901155cf Mon Sep 17 00:00:00 2001 From: GySgtMurphy <79298976+GySgtMurphy@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:28:42 -0500 Subject: [PATCH 02/16] AAAA fixing Atlas Trading shuttle docking (#6957) ## About The Pull Request moves the trading shuttle docking landmark so that it will coincide with the update to the Beruang trading shuttle for the Endeavour ## Why It's Good For The Game Needs to happen to make the trader shuttle docking work on Atlas. ## Changelog :cl: fix: Moved the trading shuttle landmark to work with the Endeavour map /:cl: --- maps/rift/levels/rift-06-surface3.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/rift/levels/rift-06-surface3.dmm b/maps/rift/levels/rift-06-surface3.dmm index 9c81f85f9c1c..d3154c3e5e3b 100644 --- a/maps/rift/levels/rift-06-surface3.dmm +++ b/maps/rift/levels/rift-06-surface3.dmm @@ -41651,6 +41651,7 @@ acH aQK aBK aus +aiB aus aus aus @@ -41668,7 +41669,6 @@ aus aus aus aus -aiB aus alo amT From a0e8babdf11da7fd8a274039b6f83c15d47a333a Mon Sep 17 00:00:00 2001 From: DeltaDav <121488347+DeltaDav@users.noreply.github.com> Date: Fri, 10 Jan 2025 17:28:50 +0100 Subject: [PATCH 03/16] Offstation Spawns for Visitors, on Nebula (#6921) ## About The Pull Request This PR adds visitors spawns on Nebula. Meaning that people outside NT can now spawn outside a NT station. This PR adds 4 new alternative name for outside spawning Visitors : -> Visitors, (the normal) -> Contractor -> Freelancer -> Frontier Colonist -> Tourist Additional : Makes solar bigger. Now, with visitors on nebula, they can just RP there, use one of the 5 free to use shuttle to wander off in space. In the eventuality that all shuttle are taken, not to fret ! - Visitor can make a call to order a NT pilot to get them ! (If one is on station) via public holopads or fax. - Traders can bring them with their shuttle (the Udang is a passenger shuttle they can use) NOTE : For now, no shuttle have been coded to work with the Endeavour. Only the Beruang. ## Why It's Good For The Game Off station spawn have been requested for a long time. --- citadel.dme | 1 + code/__DEFINES/access.dm | 29 + code/__DEFINES/jobs/jobs.dm | 1 + .../game/landmarks/spawnpoint/station/jobs.dm | 10 + code/game/landmarks/spawnpoint/tradeport.dm | 10 + code/game/machinery/vending/misc.dm | 210 +++ .../objects/items/devices/radio/headset.dm | 5 + .../objects/items/id_cards/station_ids.dm | 64 + .../job_types/station/civillian/assistant.dm | 2 + .../job_types/station/civillian/outsider.dm | 82 + code/modules/jobs/jobs.dm | 1 + code/modules/lore_hardcoded/faction.dm | 6 + .../space/trade_station/trade_station.dm | 18 + maps/endeavour/endeavour.dm | 2 +- maps/rift/levels/rift-10-west_plains.dmm | 28 +- maps/rift/rift.dm | 2 +- .../levels/nebula_tradeport.dmm | 1329 +++++++++++------ maps/tether/tether.dm | 2 +- maps/triumph/triumph.dm | 2 +- 19 files changed, 1333 insertions(+), 471 deletions(-) create mode 100644 code/modules/jobs/job_types/station/civillian/outsider.dm diff --git a/citadel.dme b/citadel.dme index 897ce810808c..c1999fd4477a 100644 --- a/citadel.dme +++ b/citadel.dme @@ -3142,6 +3142,7 @@ #include "code\modules\jobs\job_types\station\admin\centcom_officer.dm" #include "code\modules\jobs\job_types\station\admin\emergency_responder.dm" #include "code\modules\jobs\job_types\station\civillian\assistant.dm" +#include "code\modules\jobs\job_types\station\civillian\outsider.dm" #include "code\modules\jobs\job_types\station\civillian\chaplain.dm" #include "code\modules\jobs\job_types\station\civillian\clown.dm" #include "code\modules\jobs\job_types\station\civillian\entertainer.dm" diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index 16b87969854f..75fa4b75379b 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -411,6 +411,35 @@ STANDARD_ACCESS_DATUM(ACCESS_FACTION_PIRATE, faction/pirate, "Pirate") #define ACCESS_FACTION_TRADER 160//General Beruang Trader Access STANDARD_ACCESS_DATUM(ACCESS_FACTION_TRADER, faction/trader, "Trader") +//? Motel + +#define ACCESS_FACTION_MOTEL1 161//Motel-Inn-Room1 +STANDARD_ACCESS_DATUM(ACCESS_FACTION_MOTEL1, faction/motelroom1, "Nebula-Room-1") + +#define ACCESS_FACTION_MOTEL2 162//Motel-Inn-Room2 +STANDARD_ACCESS_DATUM(ACCESS_FACTION_MOTEL2, faction/motelroom2, "Nebula-Room-2") + +#define ACCESS_FACTION_MOTEL3 163//Motel-Inn-Room3 +STANDARD_ACCESS_DATUM(ACCESS_FACTION_MOTEL3, faction/motelroom3, "Nebula-Room-3") + +#define ACCESS_FACTION_MOTEL4 164//Motel-Inn-Room4 +STANDARD_ACCESS_DATUM(ACCESS_FACTION_MOTEL4, faction/motelroom4, "Nebula-Room-4") + +#define ACCESS_FACTION_MOTEL5 165//Motel-Inn-Room5 +STANDARD_ACCESS_DATUM(ACCESS_FACTION_MOTEL5, faction/motelroom5, "Nebula-Room-5") + +#define ACCESS_FACTION_MOTEL6 166//Motel-Inn-Room6 +STANDARD_ACCESS_DATUM(ACCESS_FACTION_MOTEL6, faction/motelroom6, "Nebula-Room-6") + +#define ACCESS_FACTION_MOTEL7 167//Motel-Inn-Room7 +STANDARD_ACCESS_DATUM(ACCESS_FACTION_MOTEL7, faction/motelroom7, "Nebula-Room-7") + +#define ACCESS_FACTION_MOTEL8 169//Motel-Inn-Room8 168 is taken by Pirate +STANDARD_ACCESS_DATUM(ACCESS_FACTION_MOTEL8, faction/motelroom8, "Nebula-Room-8") + +#define ACCESS_FACTION_MOTEL_VIP 170//Motel-Inn-VIP +STANDARD_ACCESS_DATUM(ACCESS_FACTION_MOTEL_VIP, faction/motelroomvip, "Nebula-Room-VIP") + //? Gaia Station #define ACCESS_GAIA_GUEST 250//Gaia Station Basic Access diff --git a/code/__DEFINES/jobs/jobs.dm b/code/__DEFINES/jobs/jobs.dm index 2a31a90d9aaf..1d54713e0fcd 100644 --- a/code/__DEFINES/jobs/jobs.dm +++ b/code/__DEFINES/jobs/jobs.dm @@ -47,6 +47,7 @@ #define JOB_ID_LIBRARIAN "librarian" #define JOB_ID_LAWYER "lawyer" // IAA #define JOB_ID_ASSISTANT "assistant" +#define JOB_ID_OUTSIDER "traveler" #define JOB_ID_CLOWN "clown" #define JOB_ID_MIME "mime" diff --git a/code/game/landmarks/spawnpoint/station/jobs.dm b/code/game/landmarks/spawnpoint/station/jobs.dm index 96ac821e63a4..8b01ed2aaa8c 100644 --- a/code/game/landmarks/spawnpoint/station/jobs.dm +++ b/code/game/landmarks/spawnpoint/station/jobs.dm @@ -8,6 +8,16 @@ latejoin = TRUE priority = 5 +/obj/landmark/spawnpoint/job/outsider + name = "Traveler" + icon_state = "Assistant" + job_path = /datum/role/job/station/outsider + +/obj/landmark/spawnpoint/job/outsider/override + spawns_left = INFINITY + latejoin = TRUE + priority = 5 + /obj/landmark/spawnpoint/job/janitor name = "Janitor" icon_state = "Janitor" diff --git a/code/game/landmarks/spawnpoint/tradeport.dm b/code/game/landmarks/spawnpoint/tradeport.dm index 24adc1185e24..40f217d262a6 100644 --- a/code/game/landmarks/spawnpoint/tradeport.dm +++ b/code/game/landmarks/spawnpoint/tradeport.dm @@ -7,3 +7,13 @@ /obj/landmark/spawnpoint/latejoin/tradeport name = "Tradeport Latejoin" faction = JOB_FACTION_TRADEPORT + +/obj/landmark/spawnpoint/job/outsider + name = "Traveler" + job_path = /datum/role/job/station/outsider + latejoin = TRUE + latejoin_override = TRUE + +/obj/landmark/spawnpoint/latejoin/outsider + name = "Traveler Latejoin" + faction = JOB_FACTION_TRADEPORT diff --git a/code/game/machinery/vending/misc.dm b/code/game/machinery/vending/misc.dm index 7da4832bdc2b..84fed03a186d 100644 --- a/code/game/machinery/vending/misc.dm +++ b/code/game/machinery/vending/misc.dm @@ -270,3 +270,213 @@ /obj/item/card/id/external/gaia = 150, /obj/item/card/id/external/gaia/vip = 250, ) + +/obj/machinery/vending/farmer + name = "Miaphus Farm vendor" + desc = "A vending machine put here by some farmers from Miaphus." + icon = 'icons/obj/vending.dmi' + icon_state = "generic" + icon_deny = "generic-deny" + icon_vend = "generic-vend" + product_slogans = "Its always fresh when it comes out from the ground !" + product_ads = "Buy my fruits and Vegetable !; Milk, eggs, You should totaly buy some !; Buy or else ill get mad !; No negociations !" + + products = list( + /obj/item/reagent_containers/food/condiment/flour = 10, + /obj/item/reagent_containers/food/drinks/bottle/milk = 10, + /obj/item/storage/fancy/egg_box = 10, + /obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 5, + /obj/item/reagent_containers/food/snacks/tomatomeat = 15, + /obj/item/reagent_containers/food/condiment/enzyme = 10, + /obj/item/farmbot_arm_assembly = 1, + /obj/item/seeds/tomatoseed = 10, + /obj/item/seeds/potatoseed = 15, + /obj/item/seeds/wheatseed = 15, + ) + + contraband = list( + /obj/item/gun/ballistic/shotgun/doublebarrel = 2, + /obj/item/storage/box/shotgunshells = 2, + ) + + prices = list( + /obj/item/reagent_containers/food/condiment/flour = 5, + /obj/item/reagent_containers/food/drinks/bottle/milk = 5, + /obj/item/storage/fancy/egg_box = 5, + /obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 4, + /obj/item/reagent_containers/food/snacks/tomatomeat = 3, + /obj/item/reagent_containers/food/condiment/enzyme = 8, + /obj/item/farmbot_arm_assembly = 50, + /obj/item/seeds/tomatoseed = 2, + /obj/item/seeds/potatoseed = 1, + /obj/item/seeds/wheatseed = 1, + ) + +/obj/machinery/vending/voidsuit + name = "Spacesuit Vendor" + desc = "A vending machine selling spacesuits." + icon = 'icons/obj/vending.dmi' + icon_state = "generic" + icon_deny = "generic-deny" + icon_vend = "generic-vend" + product_slogans = "My suits will protect you from space !" + product_ads = "Please buy my suits !; I just wanted this orange one, but I had to buy the full bundle ! Help me !; Look ! Those voidsuit are Fleeexible !" + + products = list( + /obj/item/clothing/suit/space/emergency = 5, + /obj/item/clothing/head/helmet/space/emergency = 5, + /obj/item/clothing/suit/space/syndicate = 2, + /obj/item/clothing/suit/space/syndicate/blue = 2, + /obj/item/clothing/suit/space/syndicate/green/dark = 2, + /obj/item/clothing/suit/space/syndicate/green = 2, + /obj/item/clothing/suit/space/syndicate/black = 2, + /obj/item/clothing/head/helmet/space/syndicate = 2, + /obj/item/clothing/head/helmet/space/syndicate/blue = 2, + /obj/item/clothing/head/helmet/space/syndicate/green/dark = 2, + /obj/item/clothing/head/helmet/space/syndicate/green = 2, + /obj/item/clothing/head/helmet/space/syndicate/black = 2, + /obj/item/clothing/head/helmet/space/void/explorer = 3, + /obj/item/clothing/suit/space/void/explorer = 3, + /obj/item/tank/emergency/oxygen = 10, + /obj/item/tank/emergency/oxygen/double = 2, + /obj/item/clothing/mask/gas/clear = 10, + ) + + prices = list( + /obj/item/clothing/suit/space/emergency = 10, + /obj/item/clothing/head/helmet/space/emergency = 10, + /obj/item/clothing/suit/space/syndicate = 15, + /obj/item/clothing/suit/space/syndicate/blue = 15, + /obj/item/clothing/suit/space/syndicate/green/dark = 15, + /obj/item/clothing/suit/space/syndicate/green = 15, + /obj/item/clothing/suit/space/syndicate/black = 15, + /obj/item/clothing/head/helmet/space/syndicate = 15, + /obj/item/clothing/head/helmet/space/syndicate/blue = 15, + /obj/item/clothing/head/helmet/space/syndicate/green/dark = 15, + /obj/item/clothing/head/helmet/space/syndicate/green = 15, + /obj/item/clothing/head/helmet/space/syndicate/black = 15, + /obj/item/clothing/head/helmet/space/void/explorer = 20, + /obj/item/clothing/suit/space/void/explorer = 20, + /obj/item/tank/emergency/oxygen = 5, + /obj/item/tank/emergency/oxygen/double = 30, + /obj/item/clothing/mask/gas/clear = 5, + ) + +/obj/machinery/vending/winter + name = "Wintergear Vendor" + desc = "A vending machine selling coats and winter gear." + icon = 'icons/obj/vending.dmi' + icon_state = "generic" + icon_deny = "generic-deny" + icon_vend = "generic-vend" + product_slogans = "snif... Lots of... Place here are ... Freezing... This will heat you up..." + product_ads = "2 ... Cold worlds here.; ATCHOOO !; ATCHOOO- snif; Snif-..." + + products = list( + /obj/item/clothing/mask/warmer = 10, + /obj/item/clothing/suit/storage/hooded/wintercoat = 10, + /obj/item/clothing/shoes/boots/winter = 10, + /obj/item/clothing/suit/storage/hooded/wintercoat/olive = 5, + /obj/machinery/space_heater = 4 + ) + + prices = list( + /obj/item/clothing/mask/warmer = 10, + /obj/item/clothing/suit/storage/hooded/wintercoat = 15, + /obj/item/clothing/shoes/boots/winter = 10, + /obj/item/clothing/suit/storage/hooded/wintercoat/olive = 15, + /obj/machinery/space_heater = 90, + ) + +/obj/machinery/vending/survivalist + name = "SDF Surplus Gear Vendor" + desc = "A vending machine put here by the System Defence Force, because of the rising ammount of pirates and danger in the sector." + icon = 'icons/obj/vending.dmi' + icon_state = "generic" + icon_deny = "generic-deny" + icon_vend = "generic-vend" + product_slogans = "Barely used only for 40 years !" + product_ads = "The SDF needs more funds !; By buying here you defend the system !; Better than a donation !;20 years of services..." + + products = list( + /obj/item/storage/box/survival_knife = 6, + /obj/item/storage/toolbox/lunchbox/survival = 4, + /obj/item/survivalcapsule = 2, + /obj/item/gps/survival = 10, + /obj/item/gun/ballistic/shotgun/flare = 8, + /obj/item/clothing/accessory/holster/machete/occupied = 2, + /obj/item/clothing/accessory/holster/machete/occupied/deluxe = 1, + /obj/item/material/knife/machete/hatchet = 4, + /obj/item/gun/ballistic/pistol = 4, + /obj/item/storage/box/flare = 10, + /obj/item/storage/box/handcuffs = 5, + /obj/item/storage/box/beanbags = 6, + /obj/item/storage/box/flashshells = 10, + /obj/item/storage/box/stunshells = 6, + /obj/item/storage/box/shotgunshells = 5, + /obj/item/ammo_magazine/a9mm/compact/rubber = 15, + /obj/item/ammo_magazine/a9mm/compact = 10, + /obj/item/storage/single_use/mre/random = 15, + /obj/item/clothing/suit/storage/vest/heavy = 1, + /obj/item/clothing/suit/storage/vest/press = 2, + /obj/item/clothing/suit/armor/vest = 4, + ) + + prices = list( + /obj/item/storage/box/survival_knife = 80, + /obj/item/storage/toolbox/lunchbox/survival = 5, + /obj/item/survivalcapsule = 100, + /obj/item/gps/survival = 10, + /obj/item/gun/ballistic/shotgun/flare = 100, + /obj/item/clothing/accessory/holster/machete/occupied = 100, + /obj/item/clothing/accessory/holster/machete/occupied/deluxe = 150, + /obj/item/material/knife/machete/hatchet = 120, + /obj/item/gun/ballistic/pistol = 300, + /obj/item/storage/box/flare = 50, + /obj/item/storage/box/handcuffs = 80, + /obj/item/storage/box/beanbags = 80, + /obj/item/storage/box/flashshells = 60, + /obj/item/storage/box/stunshells = 100, + /obj/item/storage/box/shotgunshells = 100, + /obj/item/ammo_magazine/a9mm/compact/rubber = 90, + /obj/item/ammo_magazine/a9mm/compact = 100, + /obj/item/storage/single_use/mre/random = 40, + /obj/item/clothing/suit/storage/vest/heavy = 350, + /obj/item/clothing/suit/storage/vest/press = 150, + /obj/item/clothing/suit/armor/vest = 150, + ) + +/obj/machinery/vending/motel + name = "Nebula Motel Vendor" + desc = "A vending machine selling the Keycards to the rooms on Nebula." + icon = 'icons/obj/vending.dmi' + icon_state = "laptop" + icon_deny = "laptop-deny" + icon_vend = "laptop-vend" + product_slogans = "A place to rest after a long journey !" + product_ads = "The VIP Room has a cool shuttle bundled in !; You can maybe see the zoo with Room 5 to 8 !; We clean regulary !; Pretty cheap !" + + products = list( + /obj/item/card/id/external/nebula/room1 = 1, + /obj/item/card/id/external/nebula/room2 = 1, + /obj/item/card/id/external/nebula/room3 = 1, + /obj/item/card/id/external/nebula/room4 = 1, + /obj/item/card/id/external/nebula/room5 = 1, + /obj/item/card/id/external/nebula/room6 = 1, + /obj/item/card/id/external/nebula/room7 = 1, + /obj/item/card/id/external/nebula/room8 = 1, + /obj/item/card/id/external/nebula/room9 = 1, + + ) + + prices = list( + /obj/item/card/id/external/nebula/room1 = 30, + /obj/item/card/id/external/nebula/room2 = 30, + /obj/item/card/id/external/nebula/room3 = 30, + /obj/item/card/id/external/nebula/room4 = 30, + /obj/item/card/id/external/nebula/room5 = 15, + /obj/item/card/id/external/nebula/room6 = 15, + /obj/item/card/id/external/nebula/room7 = 15, + /obj/item/card/id/external/nebula/room8 = 15, + /obj/item/card/id/external/nebula/room9 = 80, + ) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 4a9e633a83bd..8a7624eae6f7 100755 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -109,6 +109,11 @@ origin_tech = list(TECH_ILLEGAL = 3) ks1type = /obj/item/encryptionkey/binary +/obj/item/radio/headset/trader/outsider + name = "Traveler headset" + desc = "While being a normal headset, it was upgraded with a shortwave frenquency... Altho the upgrade was done with just duck taping circuits of a shortwave radio to the headset" + adhoc_fallback = TRUE + /obj/item/radio/headset/headset_sec name = "security radio headset" desc = "This is used by your elite security force." diff --git a/code/game/objects/items/id_cards/station_ids.dm b/code/game/objects/items/id_cards/station_ids.dm index df5ef7a9e202..8a455e75cccc 100644 --- a/code/game/objects/items/id_cards/station_ids.dm +++ b/code/game/objects/items/id_cards/station_ids.dm @@ -705,3 +705,67 @@ desc = "Issued to staff of the Happy Trails Company." icon_state = "gaia_staff" access = list(250,251,252) + +/obj/item/card/id/external/nebula/room1 + name = "Card to Room 1" + desc = "A card that grants usage of Room 1 of the Nebula Motel" + icon_state = "guest" + job_access_type = null + access = list(161) + +/obj/item/card/id/external/nebula/room2 + name = "Card to Room 2" + desc = "A card that grants usage of Room 2 of the Nebula Motel" + icon_state = "guest" + job_access_type = null + access = list(162) + +/obj/item/card/id/external/nebula/room3 + name = "Card to Room 3" + desc = "A card that grants usage of Room 3 of the Nebula Motel" + icon_state = "guest" + job_access_type = null + access = list(163) + +/obj/item/card/id/external/nebula/room4 + name = "Card to Room 4" + desc = "A card that grants usage of Room 4 of the Nebula Motel" + icon_state = "guest" + job_access_type = null + access = list(164) + +/obj/item/card/id/external/nebula/room5 + name = "Card to Room 5" + desc = "A card that grants usage of Room 5 of the Nebula Motel" + icon_state = "guest" + job_access_type = null + access = list(165) + +/obj/item/card/id/external/nebula/room6 + name = "Card to Room 6" + desc = "A card that grants usage of Room 6 of the Nebula Motel" + icon_state = "guest" + job_access_type = null + access = list(166) + +/obj/item/card/id/external/nebula/room7 + name = "Card to Room 7" + desc = "A card that grants usage of Room 7 of the Nebula Motel" + icon_state = "guest" + job_access_type = null + access = list(167) + +/obj/item/card/id/external/nebula/room8 + name = "Card to Room 8" + desc = "A card that grants usage of Room 8 of the Nebula Motel" + icon_state = "guest" + job_access_type = null + access = list(169) + +/obj/item/card/id/external/nebula/room9 + name = "Card to the VIP Suit" + color = "#ffbd17" + desc = "A card that grants usage to the VIP suite of the Nebula Motel, and its Arrowhead shuttle." + icon_state = "guest" + job_access_type = null + access = list(170) diff --git a/code/modules/jobs/job_types/station/civillian/assistant.dm b/code/modules/jobs/job_types/station/civillian/assistant.dm index 7537c89fc28d..df32b6a506e5 100644 --- a/code/modules/jobs/job_types/station/civillian/assistant.dm +++ b/code/modules/jobs/job_types/station/civillian/assistant.dm @@ -83,3 +83,5 @@ name = OUTFIT_JOB_NAME("Server") uniform = /obj/item/clothing/under/waiter l_ear = /obj/item/radio/headset/headset_service + + diff --git a/code/modules/jobs/job_types/station/civillian/outsider.dm b/code/modules/jobs/job_types/station/civillian/outsider.dm new file mode 100644 index 000000000000..8356d824d64f --- /dev/null +++ b/code/modules/jobs/job_types/station/civillian/outsider.dm @@ -0,0 +1,82 @@ +/datum/role/job/station/outsider + id = JOB_ID_OUTSIDER + title = "Traveler" + flag = OUTSIDER + departments = list(DEPARTMENT_CIVILIAN) + sorting_order = -1 + department_flag = CIVILIAN + total_positions = -1 + spawn_positions = -1 + desc = "You are in the sector for various reason, may it be visiting or simply exploring. You start on the Nebula Gas Station, and can use the services here. (This is not a antag role)" + supervisors = "Nobody !" + selection_color = "#515151" + outfit_type = /datum/outfit/job/station/outsider + alt_titles = list( + "Contractor" = /datum/prototype/struct/alt_title/contractor, + "Freelancer" = /datum/prototype/struct/alt_title/freelancer, + "Frontier Colonist" = /datum/prototype/struct/alt_title/colonist, + "Tourist" = /datum/prototype/struct/alt_title/tourist, + "Independant Reporter" = /datum/prototype/struct/alt_title/indyreport + ) + +/datum/outfit/job/station/outsider + name = OUTFIT_JOB_NAME("outsider") + id_type = /obj/item/card/id/assistant + l_ear = /obj/item/radio/headset/trader/outsider + shoes = /obj/item/clothing/shoes/black + uniform = /obj/item/clothing/under/laconic + suit = /obj/item/clothing/suit/storage/tajaran/jacket + gloves = /obj/item/clothing/gloves/fingerless + id_slot = SLOT_ID_WORN_ID + pda_slot = SLOT_ID_BELT + pda_type = /obj/item/pda + flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL + backpack_contents = list(/obj/item/spacecash/c200 = 1) + +/datum/prototype/struct/alt_title/contractor + title = "Contractor" + title_outfit = /datum/outfit/job/station/outsider/contractor + title_blurb = "You are a independant contractor, working for a faction." + +/datum/prototype/struct/alt_title/freelancer + title = "Freelancer" + title_outfit = /datum/outfit/job/station/outsider/freelancer + title_blurb = "You are a independant freelancer." + +/datum/prototype/struct/alt_title/colonist + title = "Frontier Colonist" + title_outfit = /datum/outfit/job/station/outsider/colonist + title_blurb = "You are a colonist in the frontier! Make yourself a home on any place in the sector." + +/datum/prototype/struct/alt_title/tourist + title = "Tourist" + title_outfit = /datum/outfit/job/station/outsider/tourist + title_blurb = "You are a tourist, visiting the sector." + +/datum/prototype/struct/alt_title/indyreport + title = "Independant Reporter" + title_outfit = /datum/outfit/job/station/outsider/indyreport + title_blurb = "You are a tourist, visiting the sector." + +/datum/outfit/job/station/outsider/contractor + id_pda_assignment = "Contractor" + +/datum/outfit/job/station/outsider/freelancer + id_pda_assignment = "Freelancer" + +/datum/outfit/job/station/outsider/colonist + id_pda_assignment = "Colonist" + +/datum/outfit/job/station/outsider/tourist + id_pda_assignment = "Tourist" + +/datum/outfit/job/station/outsider/indyreport + name = OUTFIT_JOB_NAME("Independant Reporter") + uniform = /obj/item/clothing/under/suit_jacket/red + id_type = /obj/item/card/id/assistant + pda_type = /obj/item/pda/librarian + belt = /obj/item/camera + backpack_contents = list(/obj/item/clothing/accessory/badge/corporate_tag/press = 1, + /obj/item/tape_recorder = 1, + /obj/item/camera_film = 1 + ) diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm index 53c094292974..5cce9bc8d511 100644 --- a/code/modules/jobs/jobs.dm +++ b/code/modules/jobs/jobs.dm @@ -55,6 +55,7 @@ var/const/BRIDGE =(1<<12) var/const/PILOT =(1<<13) var/const/ENTERTAINER =(1<<14) var/const/TRADER =(1<<15) +var/const/OUTSIDER =(1<<16) /proc/guest_jobbans(job) diff --git a/code/modules/lore_hardcoded/faction.dm b/code/modules/lore_hardcoded/faction.dm index d07bbfcfc95d..2dfc76581f02 100644 --- a/code/modules/lore_hardcoded/faction.dm +++ b/code/modules/lore_hardcoded/faction.dm @@ -102,6 +102,7 @@ /datum/role/job/station/janitor::id, /datum/role/job/station/librarian::id, /datum/role/job/station/mime::id, + /datum/role/job/station/outsider::id, // med staff - paramedic only /datum/role/job/station/paramedic::id, // engineering staff - engi and atmos tech @@ -150,6 +151,8 @@ /datum/role/job/station/scientist::id, // not their specialty /datum/role/job/station/chief_medical_officer::id, + //Outside NT + /datum/role/job/station/outsider::id, ) /datum/lore/character_background/faction/oculum @@ -174,6 +177,7 @@ /datum/role/job/station/janitor::id, /datum/role/job/station/librarian::id, /datum/role/job/station/mime::id, + /datum/role/job/station/outsider::id, // off duty /datum/role/job/station/off_duty/civilian::id, ) @@ -211,4 +215,6 @@ /datum/role/job/station/scientist::id, // not their specialty /datum/role/job/station/chief_engineer::id, + //Outside NT + /datum/role/job/station/outsider::id, ) diff --git a/code/modules/maps/overmap/space/trade_station/trade_station.dm b/code/modules/maps/overmap/space/trade_station/trade_station.dm index 24b37cdd11ed..20409aee18a6 100644 --- a/code/modules/maps/overmap/space/trade_station/trade_station.dm +++ b/code/modules/maps/overmap/space/trade_station/trade_station.dm @@ -74,6 +74,24 @@ announce_channel = "Trade" on_store_name = "Beruang Trading Corp Storage" +/datum/spawnpoint/trade/visitor + display_name = "Nebula Visitor Arrival" + restrict_job = list("Traveler") + announce_channel = "Trade" + method = LATEJOIN_METHOD_ARRIVALS_SHUTTLE + +/obj/machinery/cryopod/robot/door/gateway/trade/visitor + name = "Trade public teleporter" + desc = "The short-range teleporter you might've came in from. You could leave easily using this." + icon = 'icons/obj/machines/teleporter.dmi' + icon_state = "pad_idle" + announce_channel = "Trade" + base_icon_state = "pad" + occupied_icon_state = "pad_active" + on_store_message = "has departed via short-range teleport." + on_enter_occupant_message = "The teleporter activates, and you step into the swirling portal." + spawnpoint_type = /datum/role/job/station/outsider + // Their shuttle // Shuttle landmarks. Need to be removed at some point and generic waypoints used diff --git a/maps/endeavour/endeavour.dm b/maps/endeavour/endeavour.dm index f31553fc93bd..f89981482b75 100644 --- a/maps/endeavour/endeavour.dm +++ b/maps/endeavour/endeavour.dm @@ -104,7 +104,7 @@ bot_patrolling = FALSE - allowed_spawns = list(LATEJOIN_METHOD_ARRIVALS_SHUTTLE,LATEJOIN_METHOD_GATEWAY,LATEJOIN_METHOD_CRYOGENIC_STORAGE,LATEJOIN_METHOD_ROBOT_STORAGE,"Beruang Trading Corp Cryo") + allowed_spawns = list(LATEJOIN_METHOD_ARRIVALS_SHUTTLE,LATEJOIN_METHOD_GATEWAY,LATEJOIN_METHOD_CRYOGENIC_STORAGE,LATEJOIN_METHOD_ROBOT_STORAGE,"Beruang Trading Corp Cryo","Nebula Visitor Arrival") spawnpoint_died = /datum/spawnpoint/arrivals spawnpoint_left = /datum/spawnpoint/arrivals spawnpoint_stayed = /datum/spawnpoint/cryo diff --git a/maps/rift/levels/rift-10-west_plains.dmm b/maps/rift/levels/rift-10-west_plains.dmm index 7f531c74e37d..a29286873e8c 100644 --- a/maps/rift/levels/rift-10-west_plains.dmm +++ b/maps/rift/levels/rift-10-west_plains.dmm @@ -1122,6 +1122,12 @@ /obj/machinery/light/small, /turf/simulated/floor/tiled/steel_dirty/lythios43c, /area/rift/surfacebase/outside/west) +"fi" = ( +/obj/effect/shuttle_landmark/automatic{ + base_turf = /turf/simulated/floor/outdoors/snow/lythios43c + }, +/turf/simulated/floor/outdoors/snow/lythios43c, +/area/rift/surfacebase/outside/west) "fj" = ( /obj/machinery/power/apc/alarms_hidden/north_mount{ cell_type = null; @@ -7096,6 +7102,10 @@ }, /turf/simulated/floor, /area/rnd/outpost/anomaly_lab/storage) +"Hf" = ( +/obj/tether_away_spawner/lythios_animals, +/turf/simulated/floor/outdoors/snow/lythios43c, +/area/rift/exterior/bunker) "Hg" = ( /obj/structure/cable/heavyduty{ icon_state = "0-8" @@ -19002,7 +19012,7 @@ PP PP PP sv -sv +cL sv sv sv @@ -20167,7 +20177,7 @@ PP PP PP sv -cL +sv sv sv sv @@ -20559,7 +20569,7 @@ sv sv sv sv -sv +fi sv sv sv @@ -22121,7 +22131,7 @@ sv sv sv sv -sv +fi sv sv sv @@ -22296,7 +22306,7 @@ PP sv sv sv -sv +cL sv sv sv @@ -23474,7 +23484,7 @@ sv sv sv sv -cL +sv sv sv sv @@ -26180,7 +26190,7 @@ nz nz nz nz -nz +Hf nz YE sv @@ -26188,7 +26198,7 @@ sv sv sv sv -sv +fi sv sv sv @@ -29094,7 +29104,7 @@ sv sv sv sv -sv +cL sv sv sv diff --git a/maps/rift/rift.dm b/maps/rift/rift.dm index 1dc514bcffc9..126512285c8b 100644 --- a/maps/rift/rift.dm +++ b/maps/rift/rift.dm @@ -142,7 +142,7 @@ bot_patrolling = FALSE - allowed_spawns = list(LATEJOIN_METHOD_ARRIVALS_SHUTTLE,"Beruang Trading Corp Cryo","Cryogenic Storage") + allowed_spawns = list(LATEJOIN_METHOD_ARRIVALS_SHUTTLE,"Beruang Trading Corp Cryo","Cryogenic Storage","Nebula Visitor Arrival") spawnpoint_died = /datum/spawnpoint/arrivals spawnpoint_left = /datum/spawnpoint/arrivals spawnpoint_stayed = /datum/spawnpoint/cryo diff --git a/maps/sectors/nebula_tradeport/levels/nebula_tradeport.dmm b/maps/sectors/nebula_tradeport/levels/nebula_tradeport.dmm index 0113b113667b..738567469482 100644 --- a/maps/sectors/nebula_tradeport/levels/nebula_tradeport.dmm +++ b/maps/sectors/nebula_tradeport/levels/nebula_tradeport.dmm @@ -298,6 +298,7 @@ name = "Adventurer Airtight Hatch"; req_one_access = null }, +/obj/machinery/atmospheric_field_generator/perma, /turf/simulated/floor/tiled/techfloor/monogrid, /area/shuttle/adventurer) "aaS" = ( @@ -323,7 +324,7 @@ dir = 1 }, /obj/item/paper{ - info = "WELCOME TO THE NEBULA MOTEL \ TO BUY A PASS, SEEK M4RIA, AT BEHIND THE COUNTER. \ \ We have 9 rooms. \ Room 1 to 4 have a small kitchen, and washing room. \ Room 1 and 4 have 1 Double bed. \ 2 has 1 single bed \ 3 have 2 single beds. \ Those rooms are 30 Thrallers the 3 to 5 hours. \ \ Room 5 to 8 have no kitchen, and washing room. \ Room 6 and 8 have 1 Double bed. \ 5 has 1 single bed \ 7 have 2 single beds. \ Those rooms are 15 Thrallers the 3 to 5 hours. \ \ Room 9 is our VIP Suite. This suite has 2 bed rooms, 1 office, 1 fully equipped kitchen, 1 washroom, 1 laundry room, And its own shuttle call the Arrowhead, used by ex Tajaran racer Cheuk'Yager. the suite is 80 Thrallers the 3 to 5 hours. \ \ The Sauna is free to use. The public laundry machine and public bathroom are free to use. Guest pass are available if the rooms are shared."; + info = "WELCOME TO THE NEBULA MOTEL \ TO BUY A PASS, SEEK THE MOTEL VENDING MACHINE NEAR THE COUNTER. \ \ We have 9 rooms. \ Room 1 to 4 have a small kitchen, and washing room. \ Room 1 and 4 have 1 Double bed. \ 2 has 1 single bed \ 3 have 2 single beds. \ Those rooms are 30 Thrallers the 3 to 5 hours. \ \ Room 5 to 8 have no kitchen, and washing room. \ Room 6 and 8 have 1 Double bed. \ 5 has 1 single bed \ 7 have 2 single beds. \ Those rooms are 15 Thrallers the 3 to 5 hours. \ \ Room 9 is our VIP Suite. This suite has 2 bed rooms, 1 office, 1 fully equipped kitchen, 1 washroom, 1 laundry room, And its own shuttle call the Arrowhead, used by ex Tajaran racer Cheuk'Yager. the suite is 80 Thrallers the 3 to 5 hours. \ \ The Sauna is free to use. The public laundry machine and public bathroom are free to use. Guest pass are available if the rooms are shared."; name = "Nebula Motel" }, /obj/effect/floor_decal/corner/green/border, @@ -455,6 +456,7 @@ /area/tradeport) "abr" = ( /obj/spawner/window/low_wall/full/firelocks/nogrille, +/obj/structure/curtain/open/black, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel) "abs" = ( @@ -916,10 +918,6 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/tradeport/engineering) -"acK" = ( -/obj/structure/bed/chair/bay/chair/padded/teal, -/turf/simulated/floor/tiled/techfloor/grid, -/area/sector/nebula_tradeport/engineering) "acL" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -1046,7 +1044,9 @@ /turf/simulated/floor/carpet/bcarpet, /area/shuttle/trade_ship/general) "adb" = ( -/obj/machinery/air_alarm/alarms_hidden/north_mount, +/obj/machinery/air_alarm/alarms_hidden/north_mount{ + req_one_access = null + }, /obj/structure/window/reinforced/tinted{ dir = 4 }, @@ -1250,9 +1250,6 @@ /turf/simulated/wall/r_wall, /area/tradeport/dock) "adC" = ( -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, /obj/structure/window/reinforced/tinted, /obj/structure/cable/green{ icon_state = "1-8" @@ -1260,6 +1257,9 @@ /obj/machinery/atmospherics/pipe/tank/air{ dir = 1 }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled/techfloor/monogrid, /area/shuttle/tug) "adD" = ( @@ -1384,6 +1384,7 @@ name = "Tug hauler shuttle Airlock"; opacity = 0 }, +/obj/machinery/atmospheric_field_generator/perma, /turf/simulated/floor/tiled/monotechmaint, /area/shuttle/tug) "adV" = ( @@ -1865,7 +1866,6 @@ "afb" = ( /obj/effect/floor_decal/corner/grey/diagonal, /obj/machinery/door/window/brigdoor/eastleft, -/obj/map_helper/access_helper/airlock/station/security/general, /turf/simulated/floor/tiled/old_tile/red, /area/sector/nebula_tradeport/security) "afc" = ( @@ -2124,7 +2124,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/cryopod/robot/door/gateway, +/obj/machinery/cryopod/robot/door/gateway/trade/visitor, /turf/simulated/floor/tiled/old_tile/beige, /area/tradeport/commhall) "afS" = ( @@ -2172,6 +2172,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 9 }, +/obj/machinery/photocopier, /turf/simulated/floor/tiled/techfloor/grid, /area/sector/nebula_tradeport/dock2) "afY" = ( @@ -2200,6 +2201,7 @@ id_tag = "trade_space_lock"; pixel_x = -25 }, +/obj/effect/shuttle_landmark/trade/hangar, /turf/simulated/floor/tiled/dark, /area/shuttle/trade_ship/general) "agc" = ( @@ -2353,6 +2355,9 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, +/obj/machinery/newscaster{ + pixel_y = 35 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/sector/nebula_tradeport/comroom) "agt" = ( @@ -2385,13 +2390,15 @@ /turf/simulated/floor/tiled/neutral, /area/tradeport/commons) "agw" = ( -/obj/machinery/door/airlock/multi_tile/glass, /obj/machinery/door/firedoor{ req_one_access = list(160) }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/old_tile/beige, +/obj/machinery/door/airlock/multi_tile/glass/polarized{ + id_tint = "med_office" + }, +/turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) "agx" = ( /obj/machinery/seed_extractor, @@ -2655,6 +2662,7 @@ icon_state = "1-2" }, /obj/effect/floor_decal/rust, +/obj/machinery/air_alarm/alarms_hidden/east_mount, /turf/simulated/floor/plating, /area/shuttle/udang/main) "ahi" = ( @@ -2667,7 +2675,9 @@ "ahk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/machinery/computer/shuttle_control/explore/utilitymicro, -/obj/machinery/air_alarm/alarms_hidden/north_mount, +/obj/machinery/air_alarm/alarms_hidden/north_mount{ + req_one_access = null + }, /obj/item/gps/internal/base{ name = "UtilityMicro beacon"; gps_tag = "UTILITY" @@ -2843,7 +2853,12 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/simulated/wall/r_wall, +/obj/spawner/window/low_wall/reinforced/full/firelocks, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "med_office" + }, +/turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) "ahH" = ( /obj/machinery/light/flamp, @@ -2917,8 +2932,8 @@ /obj/structure/bed/chair/comfy/brown{ dir = 8 }, -/obj/structure/closet/walllocker/emerglocker{ - pixel_y = -32 +/obj/machinery/newscaster{ + pixel_y = -28 }, /turf/simulated/floor/carpet/patterened/blue, /area/shuttle/caravan) @@ -3050,6 +3065,7 @@ /obj/structure/sign/nosmoking_2{ pixel_y = 32 }, +/obj/machinery/space_heater, /turf/simulated/floor/tiled/techfloor/monogrid, /area/sector/nebula_tradeport/dock2) "aig" = ( @@ -3188,7 +3204,8 @@ /area/space) "aiz" = ( /obj/machinery/computer/ship/helm{ - dir = 4 + dir = 4; + req_one_access = null }, /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 4 @@ -3977,6 +3994,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/green{ dir = 10 }, +/obj/machinery/holopad/ship, /turf/simulated/floor/tiled/monotechmaint, /area/shuttle/runabout) "akv" = ( @@ -4034,6 +4052,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/sector/nebula_tradeport/dock2) "akD" = ( +/obj/landmark/spawnpoint/latejoin/outsider, /turf/simulated/floor/tiled/old_tile/beige, /area/tradeport/commhall) "akE" = ( @@ -4107,7 +4126,9 @@ /obj/machinery/computer/ship/sensors{ dir = 4 }, -/obj/machinery/power/apc/alarms_hidden/south_mount, +/obj/machinery/power/apc/alarms_hidden/south_mount{ + req_access = null + }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/adventurer) "akP" = ( @@ -4405,6 +4426,7 @@ name = "Teshari Runabout Airlock"; opacity = 0 }, +/obj/structure/fans/tiny, /turf/simulated/floor/tiled/techfloor, /area/shuttle/runabout) "alF" = ( @@ -4695,6 +4717,7 @@ dir = 4; old_wall = 1 }, +/obj/machinery/space_heater, /turf/simulated/floor/tiled/techfloor/monogrid, /area/shuttle/adventurer) "amu" = ( @@ -5087,7 +5110,7 @@ /turf/space, /area/tradeport/spine) "anA" = ( -/obj/machinery/cryopod/robot/door/gateway, +/obj/machinery/cryopod/robot/door/gateway/trade/visitor, /turf/simulated/floor/tiled/old_tile/beige, /area/tradeport/commhall) "anB" = ( @@ -5214,7 +5237,9 @@ }, /obj/machinery/computer/ship/engines, /obj/structure/railing/grey, -/obj/machinery/air_alarm/alarms_hidden/north_mount, +/obj/machinery/air_alarm/alarms_hidden/north_mount{ + req_one_access = null + }, /turf/simulated/floor/tiled/monodark, /area/shuttle/runabout) "anT" = ( @@ -5227,6 +5252,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, +/obj/structure/cable/green{ + icon_state = "1-4" + }, /turf/simulated/floor/tiled/monotechmaint, /area/shuttle/utilitymicro) "anV" = ( @@ -5260,7 +5288,6 @@ /area/sector/nebula_tradeport/dock2) "anY" = ( /obj/machinery/door/airlock/security, -/obj/map_helper/access_helper/airlock/station/security/general, /turf/simulated/floor/tiled/old_tile/red, /area/sector/nebula_tradeport/security) "anZ" = ( @@ -5306,6 +5333,7 @@ name = "Spacenat Caravan Airlock"; opacity = 0 }, +/obj/structure/fans/tiny, /turf/simulated/floor/plating, /area/shuttle/caravan) "aof" = ( @@ -5624,11 +5652,6 @@ /obj/machinery/appliance/cooker/oven, /turf/simulated/floor/wmarble, /area/sector/nebula_tradeport/motel/vip) -"apb" = ( -/obj/effect/floor_decal/techfloor, -/obj/machinery/light, -/turf/simulated/wall/r_wall, -/area/tradeport/commhall) "apc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -6099,8 +6122,8 @@ /turf/simulated/floor/tiled/old_tile/yellow, /area/tradeport/safari) "aqq" = ( -/obj/item/modular_computer/console/preset/civilian{ - dir = 1 +/obj/structure/bed/chair/bay/chair/padded/teal{ + dir = 8 }, /turf/simulated/floor/glass/reinforced, /area/sector/nebula_tradeport/engineering) @@ -6493,6 +6516,9 @@ /obj/machinery/light{ dir = 1 }, +/obj/machinery/newscaster{ + pixel_y = 35 + }, /turf/simulated/floor/tiled/techfloor/monogrid, /area/shuttle/adventurer) "ars" = ( @@ -6573,7 +6599,6 @@ /turf/simulated/floor/tiled/dark, /area/sector/nebula_tradeport/motel/vip) "arA" = ( -/obj/machinery/photocopier, /obj/effect/floor_decal/spline/fancy/wood{ dir = 6 }, @@ -6633,7 +6658,9 @@ /area/tradeport/cafeteria) "arL" = ( /obj/structure/table/steel_reinforced, -/obj/machinery/computer/ship/helm, +/obj/machinery/computer/ship/helm{ + req_one_access = null + }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/adventurer) "arM" = ( @@ -6683,6 +6710,9 @@ /obj/effect/floor_decal/spline/plain{ dir = 1 }, +/obj/machinery/newscaster{ + pixel_y = 35 + }, /turf/simulated/floor/tiled/monodark, /area/tradeport/commhall) "arU" = ( @@ -6780,6 +6810,9 @@ /obj/effect/floor_decal/corner_oldtile/blue{ dir = 5 }, +/obj/machinery/newscaster{ + pixel_y = 35 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/sector/nebula_tradeport/engineering) "asj" = ( @@ -6822,6 +6855,14 @@ /area/shuttle/udang/main) "aso" = ( /obj/machinery/light, +/obj/structure/reagent_dispensers/beerkeg, +/obj/machinery/button/remote/blast_door{ + pixel_x = 8; + pixel_y = -23; + dir = 1; + id = "tugdoor1b"; + name = "Tug Barge door" + }, /turf/simulated/floor/plating, /area/shuttle/tug) "asp" = ( @@ -7061,6 +7102,7 @@ name = "Caravan Airtight Hatch"; req_one_access = null }, +/obj/structure/fans/tiny, /turf/simulated/floor/plating, /area/shuttle/caravan) "asV" = ( @@ -7074,10 +7116,6 @@ }, /turf/simulated/floor/airless, /area/space) -"asZ" = ( -/obj/structure/loot_pile/surface/drone, -/turf/simulated/mineral/floor/vacuum, -/area/space) "ata" = ( /obj/machinery/door/firedoor{ dir = 8 @@ -7218,7 +7256,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/window/reinforced, /turf/simulated/floor/tiled/monodark, /area/sector/nebula_tradeport/comroom) "att" = ( @@ -7279,6 +7316,12 @@ /obj/machinery/light{ dir = 1 }, +/obj/machinery/button/remote/blast_door{ + pixel_x = 8; + pixel_y = 27; + id = "tugdoor1a"; + name = "Tug Barge door" + }, /turf/simulated/floor/plating, /area/shuttle/tug) "atB" = ( @@ -7689,7 +7732,7 @@ /area/tradeport/pads) "auC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 6 + dir = 4 }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/adventurer) @@ -8124,9 +8167,6 @@ /obj/structure/bed/chair/shuttle{ dir = 4 }, -/obj/structure/window/reinforced/polarized{ - id = "udang_cargo" - }, /obj/effect/floor_decal/borderfloorblack, /turf/simulated/floor/tiled/old_tile/yellow, /area/shuttle/udang/main) @@ -8179,7 +8219,13 @@ /turf/simulated/floor/tiled/white, /area/tradeport/medical) "avI" = ( -/obj/random/multiple/corp_crate/no_weapons, +/obj/machinery/button/remote/blast_door{ + pixel_x = 8; + pixel_y = -23; + dir = 1; + id = "tugdoor1"; + name = "Tug Barge door" + }, /turf/simulated/floor/plating, /area/shuttle/tug) "avJ" = ( @@ -8640,10 +8686,15 @@ pixel_x = -6; id_tag = "tradeport_adventurer_docker" }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 6 + }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/adventurer) "awJ" = ( -/obj/machinery/computer/ship/helm, +/obj/machinery/computer/ship/helm{ + req_one_access = null + }, /obj/structure/table/steel_reinforced, /obj/machinery/embedded_controller/radio/airlock/docking_port{ pixel_y = 30; @@ -8824,11 +8875,9 @@ /turf/simulated/floor/tiled/old_tile/purple, /area/tradeport/cafeteria) "axh" = ( -/obj/structure/fuel_port{ - dir = 4; - pixel_x = 29 +/obj/machinery/air_alarm/alarms_hidden/east_mount{ + req_one_access = null }, -/obj/machinery/air_alarm/alarms_hidden/east_mount, /obj/machinery/computer/shuttle_control/explore/tug{ dir = 8 }, @@ -8839,6 +8888,9 @@ /obj/structure/cable/green{ icon_state = "1-2" }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled/monotechmaint, /area/shuttle/tug) "axi" = ( @@ -8872,7 +8924,12 @@ /obj/machinery/computer/ship/sensors{ pixel_x = -27 }, -/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/machinery/power/apc/alarms_hidden/north_mount{ + req_access = null + }, +/obj/structure/cable/green{ + icon_state = "0-2" + }, /turf/simulated/floor/tiled/monotechmaint, /area/shuttle/utilitymicro) "axo" = ( @@ -9436,9 +9493,6 @@ /obj/structure/bed/chair/shuttle{ dir = 4 }, -/obj/structure/window/reinforced/polarized{ - id = "udang_cargo" - }, /obj/effect/floor_decal/borderfloorblack, /turf/simulated/floor/tiled/old_tile/yellow, /area/shuttle/udang/main) @@ -9462,7 +9516,7 @@ /obj/machinery/door/firedoor{ req_one_access = list(160) }, -/turf/simulated/floor/tiled/old_tile/beige, +/turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) "ayV" = ( /obj/structure/cable/green{ @@ -9489,11 +9543,15 @@ /turf/simulated/floor/outdoors/beach/sand/desert/indoors, /area/tradeport/safarizoo) "ayY" = ( -/obj/structure/metal_edge{ - layer = 2.8 - }, /obj/structure/closet/crate/corporate/nanotrasen, /obj/structure/handrail, +/obj/structure/window/reinforced/polarized{ + id = "udang_cargo"; + dir = 1 + }, +/obj/structure/metal_edge{ + layer = 1 + }, /turf/simulated/floor/plating, /area/shuttle/udang/main) "ayZ" = ( @@ -9903,7 +9961,6 @@ /turf/simulated/floor/outdoors/dirt, /area/tradeport/cyndishow) "aAb" = ( -/obj/structure/window/reinforced/tinted, /obj/structure/window/reinforced/tinted{ dir = 1 }, @@ -10047,7 +10104,8 @@ dir = 1 }, /obj/machinery/computer/ship/helm{ - dir = 1 + dir = 1; + req_one_access = null }, /obj/structure/railing/grey{ dir = 1 @@ -10059,9 +10117,6 @@ /turf/simulated/floor/tiled/monodark, /area/shuttle/runabout) "aAu" = ( -/obj/structure/metal_edge{ - layer = 2.8 - }, /obj/structure/table/rack/shelf/steel, /obj/item/clothing/head/helmet/space/void/explorer, /obj/item/clothing/head/helmet/space/void/explorer, @@ -10075,6 +10130,13 @@ /obj/machinery/light{ dir = 1 }, +/obj/structure/window/reinforced/polarized{ + id = "udang_cargo"; + dir = 1 + }, +/obj/structure/metal_edge{ + layer = 1 + }, /turf/simulated/floor/plating, /area/shuttle/udang/main) "aAv" = ( @@ -10183,7 +10245,9 @@ }, /obj/machinery/computer/ship/sensors, /obj/structure/railing/grey, -/obj/machinery/power/apc/alarms_hidden/north_mount, +/obj/machinery/power/apc/alarms_hidden/north_mount{ + req_access = null + }, /obj/structure/cable/green{ icon_state = "0-2" }, @@ -10223,6 +10287,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 1 }, +/obj/machinery/space_heater, /turf/simulated/floor/plating, /area/sector/nebula_tradeport/engineering) "aAQ" = ( @@ -10288,6 +10353,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, +/obj/machinery/holopad/ship, /turf/simulated/floor/carpet/patterened/blue, /area/shuttle/caravan) "aBb" = ( @@ -10995,6 +11061,9 @@ }, /obj/machinery/atmospherics/component/unary/vent_pump/on, /obj/effect/floor_decal/corner/green/border, +/obj/structure/sign/department/medbay{ + pixel_y = 29 + }, /turf/simulated/floor/tiled, /area/tradeport/commhall) "aCK" = ( @@ -11022,20 +11091,6 @@ /obj/spawner/window/low_wall/reinforced/full/firelocks, /turf/simulated/floor/plating, /area/tradeport/commons) -"aCN" = ( -/obj/machinery/door/blast/shutters{ - id = "Tug2" - }, -/obj/machinery/door/blast/regular{ - density = 0; - dir = 4; - icon_state = "pdoorc0"; - id = "tugdoor2"; - name = "Tug hauler shuttle Airlock"; - opacity = 0 - }, -/turf/simulated/floor/tiled/techfloor, -/area/shuttle/tug) "aCP" = ( /obj/effect/floor_decal/techfloor{ dir = 1 @@ -11071,7 +11126,9 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/air_alarm/alarms_hidden/north_mount, +/obj/machinery/air_alarm/alarms_hidden/north_mount{ + req_one_access = null + }, /turf/simulated/floor/tiled/old_tile/white, /area/shuttle/caravan) "aCU" = ( @@ -11279,13 +11336,11 @@ /turf/simulated/floor/tiled/old_tile/purple, /area/tradeport/spine) "aDx" = ( -/obj/machinery/light{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/manifold/hidden, /obj/structure/cable/orange{ icon_state = "1-2" }, +/obj/machinery/holopad/ship, /turf/simulated/floor/tiled/monotechmaint, /area/shuttle/tug) "aDy" = ( @@ -11367,17 +11422,6 @@ /obj/item/trash/liquidprotein, /turf/simulated/floor/tiled/monotechmaint, /area/tradeport/spine) -"aDJ" = ( -/obj/effect/floor_decal/techfloor{ - dir = 1 - }, -/obj/machinery/air_alarm/alarms_hidden{ - pixel_y = 22; - req_one_access = list(160) - }, -/obj/effect/floor_decal/corner/green/border, -/turf/simulated/floor/tiled, -/area/tradeport/commhall) "aDL" = ( /obj/machinery/smartfridge, /turf/simulated/floor/grass, @@ -11702,6 +11746,7 @@ charge = 15000; cur_coils = 3 }, +/obj/structure/cable/green, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/utilitymicro) "aEL" = ( @@ -12074,9 +12119,6 @@ /obj/structure/bed/chair/shuttle{ dir = 4 }, -/obj/structure/window/reinforced/polarized{ - id = "udang_cargo" - }, /obj/effect/floor_decal/borderfloorblack, /turf/simulated/floor/tiled/old_tile/yellow, /area/shuttle/udang/main) @@ -12120,6 +12162,7 @@ /area/tradeport/spine) "aFJ" = ( /obj/effect/floor_decal/spline/plain, +/obj/machinery/vending/voidsuit, /turf/simulated/floor/tiled/techfloor/lythios43c, /area/tradeport/spine) "aFK" = ( @@ -12545,6 +12588,7 @@ name = "Spacenat Caravan Airlock"; opacity = 0 }, +/obj/machinery/atmospheric_field_generator/perma, /turf/simulated/floor/plating, /area/shuttle/adventurer) "aGV" = ( @@ -12732,6 +12776,7 @@ name = "Tug hauler shuttle Airlock"; opacity = 0 }, +/obj/machinery/atmospheric_field_generator/perma, /turf/simulated/floor/tiled/techfloor, /area/shuttle/tug) "aHv" = ( @@ -12785,6 +12830,7 @@ /area/tradeport/commons) "aHD" = ( /obj/effect/floor_decal/spline/plain, +/obj/machinery/vending/winter, /turf/simulated/floor/carpet/purcarpet, /area/tradeport/spine) "aHE" = ( @@ -12832,6 +12878,7 @@ /obj/effect/floor_decal/grass_edge{ dir = 8 }, +/obj/machinery/vending/farmer, /turf/simulated/floor/tiled/monotechmaint, /area/tradeport/spine) "aHM" = ( @@ -12853,6 +12900,9 @@ /obj/structure/bed/chair/sofa/beige/left{ dir = 1 }, +/obj/structure/closet/walllocker/emerglocker{ + pixel_y = -32 + }, /turf/simulated/floor/carpet/patterened/blue, /area/shuttle/caravan) "aHP" = ( @@ -12880,9 +12930,6 @@ /area/shuttle/trade_ship/general) "aHR" = ( /obj/structure/railing/grey, -/obj/structure/window/reinforced/polarized{ - id = "udang_cargo" - }, /obj/structure/bed/chair/shuttle{ dir = 4 }, @@ -13009,6 +13056,7 @@ /obj/item/reagent_containers/glass/beaker{ pixel_x = 5 }, +/obj/machinery/appliance/cooker/oven, /turf/simulated/floor/tiled/old_tile/white, /area/shuttle/caravan) "aIj" = ( @@ -13028,6 +13076,9 @@ /area/tradeport/safari) "aIl" = ( /obj/machinery/telecomms/relay/preset/telecomms, +/obj/structure/cable/green{ + icon_state = "2-8" + }, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/utilitymicro) "aIm" = ( @@ -13777,7 +13828,9 @@ /obj/machinery/computer/ship/sensors{ dir = 1 }, -/obj/machinery/power/apc/alarms_hidden/south_mount, +/obj/machinery/power/apc/alarms_hidden/south_mount{ + req_access = null + }, /turf/simulated/floor/tiled/old_tile/beige, /area/shuttle/caravan) "aKm" = ( @@ -14238,13 +14291,18 @@ /turf/simulated/floor/tiled/neutral, /area/tradeport/facility) "aLD" = ( -/obj/structure/metal_edge{ - layer = 2.8 - }, /obj/structure/curtain/open/shower/engineering, /obj/structure/railing/grey{ dir = 8 }, +/obj/structure/window/reinforced/polarized{ + id = "udang_cargo"; + dir = 1 + }, +/obj/structure/reagent_dispensers/beerkeg, +/obj/structure/metal_edge{ + layer = 1 + }, /turf/simulated/floor/plating, /area/shuttle/udang/main) "aLE" = ( @@ -14342,12 +14400,16 @@ /turf/space, /area/sector/nebula_tradeport/motel/vip) "aLT" = ( -/obj/structure/metal_edge{ - layer = 2.8 - }, /obj/machinery/portable_atmospherics/canister/empty/phoron, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/structure/handrail, +/obj/structure/window/reinforced/polarized{ + id = "udang_cargo"; + dir = 1 + }, +/obj/structure/metal_edge{ + layer = 1 + }, /turf/simulated/floor/plating, /area/shuttle/udang/main) "aLU" = ( @@ -14730,14 +14792,18 @@ }, /obj/effect/shuttle_landmark/triumph/trade/utilitymicro, /obj/overmap/entity/visitable/ship/landable/trade/utilitymicro, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/holopad/ship, /turf/simulated/floor/tiled/monotechmaint, /area/shuttle/utilitymicro) "aMX" = ( /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/atmospherics/component/unary/vent_pump/on{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 9 }, /turf/simulated/floor/carpet/patterened/blue, /area/shuttle/caravan) @@ -14915,6 +14981,9 @@ /obj/structure/window/reinforced{ dir = 4 }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/utilitymicro) "aNx" = ( @@ -15128,6 +15197,7 @@ name = "Tug Airtight Hatch"; req_one_access = null }, +/obj/machinery/atmospheric_field_generator/perma, /turf/simulated/floor/tiled/monotechmaint, /area/shuttle/tug) "aNV" = ( @@ -15315,6 +15385,7 @@ /obj/machinery/door/firedoor{ req_one_access = list(160) }, +/obj/structure/curtain/open/black, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel) "aOA" = ( @@ -15701,7 +15772,7 @@ icon_state = "4-8" }, /turf/simulated/floor/airless, -/area/tradeport/exterior) +/area/space) "aPJ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular{ @@ -15716,6 +15787,7 @@ name = "Adventurer Airtight Hatch"; req_one_access = null }, +/obj/machinery/atmospheric_field_generator/perma, /turf/simulated/floor/tiled/techfloor/monogrid, /area/shuttle/adventurer) "aPK" = ( @@ -15829,14 +15901,14 @@ /turf/simulated/floor/tiled/old_tile/blue, /area/tradeport/cafeteria) "aQb" = ( -/obj/structure/window/reinforced/tinted{ - dir = 1 - }, /obj/structure/window/reinforced/tinted, /obj/machinery/power/smes/buildable{ charge = 15000; cur_coils = 3 }, +/obj/structure/cable/green{ + icon_state = "0-4" + }, /turf/simulated/floor/tiled/techfloor/monogrid, /area/shuttle/tug) "aQd" = ( @@ -15986,6 +16058,9 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/trade_ship/general) "aQz" = ( +/obj/structure/fuel_port{ + pixel_x = -27 + }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/tug) "aQA" = ( @@ -16270,9 +16345,6 @@ /turf/simulated/floor, /area/tradeport/pads) "aRn" = ( -/obj/structure/closet/walllocker/emerglocker{ - pixel_y = -32 - }, /obj/machinery/light_switch{ dir = 1; pixel_y = -24 @@ -16522,7 +16594,6 @@ /turf/space/basic, /area/space) "aRU" = ( -/obj/structure/window/reinforced/tinted, /obj/structure/window/reinforced/tinted{ dir = 1 }, @@ -16928,16 +16999,6 @@ }, /turf/simulated/floor/tiled/neutral, /area/tradeport/commons) -"aTi" = ( -/obj/item/paper{ - info = "WELCOME TO THE NEBULA MOTEL \ TO BUY A PASS, SEEK M4RIA, AT BEHIND THE COUNTER. \ \ We have 9 rooms. \ Room 1 to 4 have a small kitchen, and washing room. \ Room 1 and 4 have 1 Double bed. \ 2 has 1 single bed \ 3 have 2 single beds. \ Those rooms are 30 Thrallers the 3 to 5 hours. \ \ Room 5 to 8 have no kitchen, and washing room. \ Room 6 and 8 have 1 Double bed. \ 5 has 1 single bed \ 7 have 2 single beds. \ Those rooms are 15 Thrallers the 3 to 5 hours. \ \ Room 9 is our VIP Suite. This suite has 2 bed rooms, 1 office, 1 fully equipped kitchen, 1 washroom, 1 laundry room, And its own shuttle call the Arrowhead, used by ex Tajaran racer Cheuk'Yager. the suite is 80 Thrallers the 3 to 5 hours. \ \ The Sauna is free to use. The public laundry machine and public bathroom are free to use. Guest pass are available if the rooms are shared."; - name = "Nebula Motel" - }, -/obj/effect/floor_decal/borderfloorblack{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/monogrid, -/area/sector/nebula_tradeport/dock2) "aTj" = ( /obj/effect/floor_decal/techfloor, /obj/structure/sign/warning/mail_delivery{ @@ -17521,7 +17582,9 @@ /obj/structure/cable/green{ icon_state = "0-8" }, -/obj/machinery/power/apc/alarms_hidden/south_mount, +/obj/machinery/power/apc/alarms_hidden/south_mount{ + req_access = null + }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/tug) "aUz" = ( @@ -17619,23 +17682,21 @@ }, /turf/simulated/floor/wood, /area/shuttle/trade_ship/general) -"aUI" = ( -/obj/structure/bed/chair/bay/chair/padded/teal{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/sector/nebula_tradeport/engineering) "aUJ" = ( /obj/structure/stasis_cage, /obj/effect/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/old_tile/yellow, /area/tradeport/safari) "aUK" = ( -/obj/structure/metal_edge{ - layer = 2.8 - }, /obj/machinery/portable_atmospherics/canister/empty/phoron, /obj/structure/handrail, +/obj/structure/window/reinforced/polarized{ + id = "udang_cargo"; + dir = 1 + }, +/obj/structure/metal_edge{ + layer = 1 + }, /turf/simulated/floor/plating, /area/shuttle/udang/main) "aUL" = ( @@ -17887,7 +17948,8 @@ /area/shuttle/adventurer) "aVw" = ( /obj/machinery/computer/ship/helm/adv{ - dir = 4 + dir = 4; + req_one_access = null }, /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled/monotechmaint, @@ -18141,6 +18203,9 @@ /obj/structure/bed/chair/bay/chair/padded/black{ dir = 8 }, +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 1 + }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/adventurer) "aWh" = ( @@ -18202,9 +18267,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/machinery/atmospherics/component/unary/vent_pump/on{ - dir = 1 - }, +/obj/machinery/holopad/ship, /turf/simulated/floor/tiled/techfloor, /area/shuttle/adventurer) "aWr" = ( @@ -18227,7 +18290,7 @@ /turf/space/basic, /area/sector/nebula_tradeport/motel/vip) "aWu" = ( -/obj/machinery/vending/security, +/obj/structure/table/rack/shelf/steel, /turf/simulated/floor/tiled/old_tile/red, /area/sector/nebula_tradeport/security) "aWv" = ( @@ -18824,7 +18887,6 @@ "aYd" = ( /obj/effect/floor_decal/corner/grey/diagonal, /obj/machinery/door/window/brigdoor/eastright, -/obj/map_helper/access_helper/airlock/station/security/general, /turf/simulated/floor/tiled/old_tile/red, /area/sector/nebula_tradeport/security) "aYe" = ( @@ -19038,6 +19100,7 @@ name = "Shuttle Utility Door"; pixel_x = 30 }, +/obj/structure/fans/tiny, /turf/simulated/floor/tiled/monotechmaint, /area/shuttle/utilitymicro) "aYJ" = ( @@ -19066,13 +19129,6 @@ id = "tugdoor1"; name = "Tug Barge door" }, -/obj/machinery/button/remote/blast_door{ - pixel_x = 33; - pixel_y = -2; - dir = 8; - id = "Tug2"; - name = "Tug Air refuel" - }, /obj/machinery/button/remote/blast_door{ pixel_x = 23; pixel_y = -2; @@ -19132,6 +19188,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, +/obj/machinery/space_heater, /turf/simulated/floor/plating, /area/sector/nebula_tradeport/engineering) "aYV" = ( @@ -19223,7 +19280,10 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/trade_ship/general) "aZf" = ( -/obj/machinery/door/blast/regular, +/obj/machinery/door/blast/regular{ + id = "tugdoor1" + }, +/obj/machinery/atmospheric_field_generator/perma, /turf/simulated/floor/tiled/techfloor, /area/shuttle/tug) "aZg" = ( @@ -19373,6 +19433,9 @@ /turf/simulated/floor/carpet/patterened/blue/alt, /area/sector/nebula_tradeport/motel/vip) "aZE" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/utilitymicro) "aZF" = ( @@ -19433,9 +19496,6 @@ pixel_x = 32; pixel_y = -3 }, -/obj/structure/window/reinforced/polarized{ - id = "udang_cargo" - }, /obj/effect/floor_decal/borderfloorblack{ dir = 6 }, @@ -19493,8 +19553,11 @@ /turf/simulated/floor/tiled/neutral, /area/tradeport/commons) "aZT" = ( -/obj/structure/railing, -/turf/simulated/mineral/floor/vacuum, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/obj/machinery/power/solar, +/turf/simulated/floor/airless, /area/tradeport/exterior) "aZU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -19601,6 +19664,9 @@ }, /turf/simulated/floor/tiled/old_tile/white, /area/tradeport/cafeteria) +"bfF" = ( +/turf/simulated/wall/r_wall/prepainted/medical, +/area/sector/nebula_tradeport/medical/public) "bfK" = ( /obj/effect/floor_decal/techfloor{ dir = 9 @@ -19648,7 +19714,7 @@ /area/sector/nebula_tradeport/motel) "bqy" = ( /turf/simulated/wall/prepainted/exploration, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "bqF" = ( /obj/effect/floor_decal/corner/red/border{ dir = 9 @@ -19695,7 +19761,7 @@ id = "scoophead_office" }, /turf/simulated/floor/plating, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "bsc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -19716,7 +19782,7 @@ dir = 9 }, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "btw" = ( /obj/machinery/atmospherics/portables_connector{ dir = 1 @@ -19756,7 +19822,7 @@ /obj/machinery/atmospherics/valve{ dir = 4 }, -/turf/simulated/floor/tiled/steel_dirty/dark, +/turf/simulated/floor/tiled/steel_dirty/red, /area/shuttle/arrowhead) "bAO" = ( /obj/machinery/camera{ @@ -19801,7 +19867,7 @@ id = "scoophead_office" }, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "bEl" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 10 @@ -19844,7 +19910,7 @@ icon_state = "4-8" }, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "bHd" = ( /obj/structure/aquarium/prefilled, /turf/simulated/floor/carpet/turcarpet, @@ -19873,6 +19939,14 @@ /obj/machinery/holopad, /turf/simulated/floor/tiled/dark, /area/sector/nebula_tradeport/motel/room1) +"bPs" = ( +/obj/machinery/door/blast/regular{ + id = "tugdoor1a"; + dir = 4 + }, +/obj/machinery/atmospheric_field_generator/perma, +/turf/simulated/floor/plating, +/area/shuttle/tug) "bSu" = ( /obj/effect/floor_decal/techfloor{ dir = 4 @@ -19904,15 +19978,12 @@ /turf/simulated/floor/wood, /area/tradeport/commons) "bXL" = ( -/obj/structure/table/hardwoodtable, /obj/item/material/knife, -/obj/machinery/recharger{ - pixel_x = 9; - pixel_y = 2 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, +/obj/machinery/appliance/cooker/oven, +/obj/structure/table/hardwoodtable, /turf/simulated/floor/tiled/dark, /area/sector/nebula_tradeport/motel/room3) "bYr" = ( @@ -19923,9 +19994,7 @@ dir = 8; nightshift_allowed = 0 }, -/obj/structure/bed/roller, -/obj/structure/medical_stand/anesthetic, -/obj/machinery/iv_drip, +/obj/structure/filingcabinet/chestdrawer, /turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) "bYS" = ( @@ -19972,12 +20041,17 @@ /turf/simulated/floor/tiled/old_tile/gray, /area/tradeport/cafeteria) "cfu" = ( -/obj/structure/bed/roller, -/obj/machinery/iv_drip, -/obj/structure/medical_stand/anesthetic, /obj/effect/floor_decal/corner/blue/border{ dir = 8 }, +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/obj/machinery/power/apc/alarms_hidden/west_mount, +/obj/structure/cable/yellow{ + dir = 4; + icon_state = "0-2" + }, /turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) "cfJ" = ( @@ -20045,20 +20119,18 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/silver{ - id_tag = "motel5" + id_tag = "motel5"; + req_access = list(165) }, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room5) "crj" = ( -/obj/structure/table/hardwoodtable, /obj/item/material/knife, -/obj/machinery/recharger{ - pixel_x = 9; - pixel_y = 2 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, +/obj/machinery/appliance/cooker/oven, +/obj/structure/table/hardwoodtable, /turf/simulated/floor/tiled/dark, /area/sector/nebula_tradeport/motel/room1) "csb" = ( @@ -20086,7 +20158,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/red{ dir = 4 }, -/turf/simulated/floor/tiled/steel_dirty/dark, +/turf/simulated/floor/tiled/steel_dirty/red, /area/shuttle/arrowhead) "cyy" = ( /obj/machinery/portable_atmospherics/canister/empty/phoron, @@ -20229,6 +20301,7 @@ "cQi" = ( /obj/structure/bed/padded, /obj/structure/curtain/open/bed, +/obj/item/bedsheet, /turf/simulated/floor/carpet/patterened/blue, /area/sector/nebula_tradeport/motel/room2) "cQQ" = ( @@ -20264,6 +20337,10 @@ /obj/machinery/gear_painter, /turf/simulated/floor/tiled/steel, /area/tradeport/commons) +"cTW" = ( +/obj/structure/catwalk, +/turf/space/basic, +/area/space) "cUz" = ( /obj/structure/shuttle/engine/heater{ dir = 4 @@ -20481,7 +20558,7 @@ req_one_access = null }, /turf/simulated/floor/plating, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "dzE" = ( /obj/structure/toilet{ dir = 4 @@ -20519,7 +20596,7 @@ id = "scoophead_room" }, /turf/simulated/floor/plating, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "dCd" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 9 @@ -20576,7 +20653,7 @@ dir = 4 }, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "dGF" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, /obj/structure/curtain/black, @@ -20652,12 +20729,25 @@ /obj/machinery/light/small, /turf/simulated/floor/carpet/patterened/blue, /area/sector/nebula_tradeport/motel/room4) +"dPa" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/fire_alarm/south_mount, +/turf/simulated/floor/wood, +/area/sector/nebula_tradeport/motel/room1) "dPi" = ( /obj/structure/cable/pink{ icon_state = "1-8" }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/scoophead/main) +"dQr" = ( +/obj/structure/bed/padded, +/obj/machinery/fire_alarm/north_mount, +/obj/item/bedsheet, +/turf/simulated/floor/carpet/patterened/blue, +/area/sector/nebula_tradeport/motel/room7) "dQx" = ( /obj/structure/bed/chair/comfy/black{ dir = 1 @@ -20694,6 +20784,10 @@ }, /turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) +"dUe" = ( +/obj/spawner/window/low_wall/reinforced/full/firelocks, +/turf/simulated/floor/tiled/steel_dirty/red, +/area/shuttle/arrowhead) "dVq" = ( /obj/machinery/button/remote/blast_door{ id = "Arrowhead Airlock"; @@ -20709,6 +20803,7 @@ /obj/structure/cable/orange{ icon_state = "1-2" }, +/obj/machinery/atmospheric_field_generator/perma, /turf/simulated/floor/tiled/steel_dirty/dark, /area/shuttle/arrowhead) "dWa" = ( @@ -20753,6 +20848,15 @@ }, /turf/simulated/floor/plating, /area/shuttle/scoophead/main) +"dYD" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/patterened/blue, +/area/shuttle/caravan) "dYK" = ( /obj/structure/transit_tube, /obj/effect/floor_decal/industrial/warning{ @@ -20822,6 +20926,16 @@ /obj/item/storage/bag/trash, /turf/simulated/floor/carpet/turcarpet, /area/sector/nebula_tradeport/motel) +"eiO" = ( +/obj/structure/table/steel_reinforced, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/plastic, +/obj/effect/floor_decal/corner_oldtile/blue{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/sector/nebula_tradeport/engineering) "eiW" = ( /obj/structure/railing/grey, /turf/space/basic, @@ -20916,8 +21030,17 @@ name = "Arrowhead beacon"; gps_tag = "ARROWHEAD" }, -/turf/simulated/floor/tiled/steel_dirty/dark, +/turf/simulated/floor/tiled/steel_dirty/red, /area/shuttle/arrowhead) +"evN" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/turf/simulated/floor/airless, +/area/space) "evZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -21003,7 +21126,7 @@ pixel_x = -32 }, /turf/simulated/floor/carpet/patterened/blue, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "eEX" = ( /obj/structure/simple_door/hardwood, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -21048,6 +21171,10 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, +/obj/machinery/newscaster{ + pixel_x = -35; + pixel_y = 3 + }, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/vip) "eKY" = ( @@ -21131,6 +21258,14 @@ }, /turf/simulated/floor/carpet/turcarpet, /area/sector/nebula_tradeport/motel) +"eSH" = ( +/obj/spawner/window/low_wall/reinforced/full/firelocks, +/obj/structure/window/reinforced/polarized{ + dir = 1; + id = "med_office" + }, +/turf/simulated/floor/tiled/white, +/area/sector/nebula_tradeport/medical/public) "eXQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -21209,10 +21344,13 @@ id = "scoophead_office" }, /turf/simulated/floor/plating, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "fir" = ( /obj/machinery/computer/ship/sensors, -/turf/simulated/floor/tiled/steel_dirty/dark, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, /area/shuttle/arrowhead) "fkY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -21271,6 +21409,12 @@ }, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room6) +"fwS" = ( +/obj/item/modular_computer/console/preset/civilian{ + dir = 8 + }, +/turf/simulated/floor/glass/reinforced, +/area/sector/nebula_tradeport/engineering) "fxW" = ( /turf/simulated/floor/carpet/patterened/blue, /area/sector/nebula_tradeport/motel/room3) @@ -21318,7 +21462,7 @@ }, /obj/machinery/power/apc/alarms_hidden/south_mount, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "fFF" = ( /obj/structure/table/steel_reinforced, /obj/machinery/atmospherics/component/unary/vent_pump/on{ @@ -21350,6 +21494,14 @@ }, /turf/space/basic, /area/space) +"fHX" = ( +/obj/machinery/atmospheric_field_generator/perma, +/obj/machinery/door/blast/regular{ + id = "tugdoor1a"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/shuttle/tug) "fIa" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 8 @@ -21563,6 +21715,15 @@ }, /turf/simulated/floor/tiled/old_tile/red, /area/tradeport/cafeteria) +"gCI" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/fire_alarm/west_mount{ + pixel_x = -26 + }, +/turf/simulated/floor/airless, +/area/sector/nebula_tradeport/motel) "gCP" = ( /obj/structure/table/glass, /obj/item/reagent_containers/food/snacks/milosoup, @@ -21621,7 +21782,6 @@ pixel_x = -25 }, /obj/overmap/entity/visitable/ship/landable/trade, -/obj/effect/shuttle_landmark/trade/hangar, /turf/simulated/floor/tiled/dark, /area/shuttle/trade_ship/general) "gLI" = ( @@ -21663,6 +21823,7 @@ pixel_y = 22; req_one_access = list(160) }, +/obj/machinery/body_scanconsole, /turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) "gPE" = ( @@ -21708,7 +21869,8 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/silver{ - id_tag = "motel8" + id_tag = "motel8"; + req_access = list(169) }, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room8) @@ -21817,6 +21979,13 @@ /obj/structure/barricade, /turf/simulated/floor/wood, /area/tradeport/safarizoo) +"hhH" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/fire_alarm/south_mount, +/turf/simulated/floor/wood, +/area/sector/nebula_tradeport/motel/room4) "hhI" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 @@ -21887,7 +22056,8 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/silver{ - id_tag = "motel4" + id_tag = "motel4"; + req_access = list(164) }, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room4) @@ -21946,7 +22116,7 @@ id = "scoophead_office" }, /turf/simulated/floor/plating, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "hyI" = ( /obj/structure/table/hardwoodtable, /obj/machinery/chemical_dispenser/catering/bar_coffee{ @@ -21976,6 +22146,13 @@ /obj/machinery/light{ dir = 8 }, +/obj/item/surgical/bonesetter, +/obj/item/surgical/cautery, +/obj/item/surgical/circular_saw, +/obj/item/surgical/bonegel, +/obj/item/surgical/retractor, +/obj/item/surgical/scalpel, +/obj/item/surgical/surgicaldrill, /turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) "hCk" = ( @@ -22229,6 +22406,9 @@ /obj/structure/bed/chair/sofa/brown/right{ dir = 4 }, +/obj/machinery/newscaster{ + pixel_y = -28 + }, /turf/simulated/floor/carpet/turcarpet, /area/sector/nebula_tradeport/motel) "ifH" = ( @@ -22354,6 +22534,17 @@ }, /turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) +"itp" = ( +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/landmark/spawnpoint/latejoin/outsider, +/turf/simulated/floor/tiled, +/area/tradeport/commhall) "itB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -22450,7 +22641,7 @@ icon_state = "4-8" }, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "iQo" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/meter, @@ -22499,7 +22690,7 @@ /obj/structure/curtain/open/shower, /obj/structure/simple_door/wood, /turf/simulated/floor/tiled/neutral, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "jdu" = ( /obj/machinery/washing_machine, /obj/item/storage/laundry_basket{ @@ -22567,9 +22758,11 @@ /area/tradeport/spine) "job" = ( /obj/effect/floor_decal/corner/blue/border, -/obj/structure/cable/yellow, -/obj/machinery/power/apc/alarms_hidden/south_mount{ - req_access = list(160) +/obj/structure/table/carbon/reinforced, +/obj/machinery/button/windowtint{ + pixel_x = -5; + pixel_y = 7; + id = "med_office" }, /turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) @@ -22581,7 +22774,7 @@ pixel_x = 32 }, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "jpc" = ( /obj/structure/window/reinforced/polarized{ dir = 8; @@ -22589,7 +22782,7 @@ }, /obj/spawner/window/low_wall/reinforced/full/firelocks, /turf/simulated/floor/plating, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "juq" = ( /obj/effect/debris/cleanable/dirt, /turf/simulated/floor/tiled/old_tile/blue, @@ -22688,6 +22881,10 @@ }, /turf/simulated/floor/carpet/arcadecarpet, /area/sector/nebula_tradeport/motel/arcade) +"jGT" = ( +/mob/living/simple_mob/animal/passive/cat, +/turf/simulated/floor/wood, +/area/sector/nebula_tradeport/motel) "jHF" = ( /obj/structure/table/rack/shelf/steel, /obj/machinery/air_alarm/alarms_hidden{ @@ -22768,7 +22965,7 @@ dir = 4 }, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "jQe" = ( /obj/machinery/computer/ship/helm{ dir = 1 @@ -22777,7 +22974,7 @@ pixel_y = 7; pixel_x = -6 }, -/turf/simulated/floor/tiled/steel_dirty/dark, +/turf/simulated/floor/tiled/steel_dirty/red, /area/shuttle/arrowhead) "jQK" = ( /obj/structure/handrail, @@ -22889,6 +23086,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/item/storage/box/glasses/meta, /turf/simulated/floor/tiled/dark, /area/sector/nebula_tradeport/motel/room4) "keh" = ( @@ -22931,8 +23129,19 @@ /obj/structure/closet/secure_closet/personal, /obj/item/storage/box/glasses/meta, /obj/item/storage/box/donkpockets, +/obj/item/pizzabox/meat{ + pixel_y = 8 + }, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room6) +"khV" = ( +/obj/machinery/atmospheric_field_generator/perma, +/obj/machinery/door/blast/regular{ + id = "tugdoor1b"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/shuttle/tug) "kji" = ( /obj/effect/floor_decal/spline/fancy/wood, /obj/structure/railing, @@ -22944,6 +23153,10 @@ "kjD" = ( /obj/structure/table/hardwoodtable, /obj/effect/floor_decal/spline/fancy/wood, +/obj/item/paper{ + info = "WELCOME TO THE NEBULA MOTEL \ TO BUY A PASS, SEEK THE MOTEL VENDING MACHINE NEAR THE COUNTER. \ \ We have 9 rooms. \ Room 1 to 4 have a small kitchen, and washing room. \ Room 1 and 4 have 1 Double bed. \ 2 has 1 single bed \ 3 have 2 single beds. \ Those rooms are 30 Thrallers the 3 to 5 hours. \ \ Room 5 to 8 have no kitchen, and washing room. \ Room 6 and 8 have 1 Double bed. \ 5 has 1 single bed \ 7 have 2 single beds. \ Those rooms are 15 Thrallers the 3 to 5 hours. \ \ Room 9 is our VIP Suite. This suite has 2 bed rooms, 1 office, 1 fully equipped kitchen, 1 washroom, 1 laundry room, And its own shuttle call the Arrowhead, used by ex Tajaran racer Cheuk'Yager. the suite is 80 Thrallers the 3 to 5 hours. \ \ The Sauna is free to use. The public laundry machine and public bathroom are free to use. Guest pass are available if the rooms are shared."; + name = "Nebula Motel" + }, /turf/simulated/floor/carpet/turcarpet, /area/sector/nebula_tradeport/motel) "koU" = ( @@ -23015,15 +23228,12 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/silver{ - id_tag = "motel4" + id_tag = "motel4"; + req_access = list(163) }, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room3) "kDN" = ( -/obj/structure/table/bench/wooden, -/obj/item/pizzabox/meat{ - pixel_y = 8 - }, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -23096,15 +23306,12 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/scoophead/engineering) "kKj" = ( -/obj/structure/table/hardwoodtable, /obj/item/material/knife, -/obj/machinery/recharger{ - pixel_x = 9; - pixel_y = 2 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, +/obj/machinery/appliance/cooker/oven, +/obj/structure/table/hardwoodtable, /turf/simulated/floor/tiled/dark, /area/sector/nebula_tradeport/motel/room2) "kKq" = ( @@ -23146,6 +23353,18 @@ }, /turf/simulated/floor/tiled/neutral, /area/tradeport/facility) +"kRE" = ( +/obj/structure/bed/chair/comfy/black{ + dir = 4 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/carpet/patterened/red, +/area/sector/nebula_tradeport/motel/vip) "kVa" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -23236,6 +23455,17 @@ }, /turf/simulated/mineral/floor/vacuum, /area/tradeport/pads) +"lcX" = ( +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/floor_decal/techfloor, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/tradeport/commhall) "lfu" = ( /obj/machinery/chemical_dispenser/catering/bar_soft{ dir = 4 @@ -23355,12 +23585,19 @@ /area/sector/nebula_tradeport/motel) "luK" = ( /turf/simulated/floor/wood, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "luQ" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, /obj/structure/curtain/open/black, /turf/simulated/floor/tiled/techmaint, /area/sector/nebula_tradeport/motel/room6) +"lwa" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/fire_alarm/alarms_hidden/west_mount, +/turf/simulated/floor/wood, +/area/sector/nebula_tradeport/motel) "lwk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -23394,15 +23631,14 @@ /turf/simulated/floor/tiled/dark, /area/sector/nebula_tradeport/motel/room2) "lAe" = ( -/obj/machinery/door/firedoor{ - req_one_access = list(160) - }, /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/door/airlock/silver{ - id_tag = "motel1" + id_tag = "motel1"; + req_access = list(161) }, +/obj/machinery/door/firedoor, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room1) "lAm" = ( @@ -23521,8 +23757,7 @@ }, /obj/machinery/button/remote/blast_door{ id = "nebulacafe"; - pixel_y = 27; - req_access = list(160) + pixel_y = 27 }, /obj/machinery/door/window/westleft, /turf/simulated/floor/wood, @@ -23650,6 +23885,7 @@ /obj/effect/floor_decal/corner/blue/border{ dir = 1 }, +/obj/machinery/bodyscanner, /turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) "mlI" = ( @@ -23825,6 +24061,10 @@ "mGF" = ( /obj/structure/table/hardwoodtable, /obj/random/alcohol, +/obj/machinery/recharger{ + pixel_x = 9; + pixel_y = 2 + }, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room1) "mHd" = ( @@ -23875,7 +24115,7 @@ /area/shuttle/arrowhead) "mLx" = ( /turf/simulated/wall/prepainted/command, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "mMt" = ( /obj/effect/shuttle_landmark/triumph/trade/arrowhead, /obj/overmap/entity/visitable/ship/landable/trade/arrowhead, @@ -23914,6 +24154,10 @@ "mOb" = ( /obj/structure/table/hardwoodtable, /obj/random/alcohol, +/obj/machinery/recharger{ + pixel_x = 9; + pixel_y = 2 + }, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room2) "mOl" = ( @@ -23967,7 +24211,7 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 4 }, -/turf/simulated/floor/tiled/steel_dirty/dark, +/turf/simulated/floor/tiled/steel_dirty/red, /area/shuttle/arrowhead) "ncQ" = ( /obj/structure/cable/yellow{ @@ -23993,6 +24237,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/item/storage/box/glasses/meta, /turf/simulated/floor/tiled/dark, /area/sector/nebula_tradeport/motel/room1) "ngf" = ( @@ -24026,15 +24271,17 @@ icon_state = "4-8" }, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "nkf" = ( /obj/machinery/atmospherics/pipe/tank/air{ dir = 8 }, -/obj/machinery/air_alarm/alarms_hidden/north_mount, /obj/structure/cable/green{ icon_state = "1-2" }, +/obj/machinery/air_alarm/alarms_hidden/north_mount{ + req_one_access = null + }, /turf/simulated/floor/tiled/techfloor/monogrid, /area/shuttle/arrowhead) "nlw" = ( @@ -24134,9 +24381,18 @@ }, /turf/simulated/floor/tiled/old_tile/blue, /area/tradeport/commons) +"nHT" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/border, +/obj/landmark/spawnpoint/job/outsider, +/turf/simulated/floor/tiled, +/area/tradeport/commhall) "nIB" = ( /obj/structure/curtain/open/bed, /obj/structure/bed/double/padded, +/obj/item/bedsheet/double, /turf/simulated/floor/carpet/patterened/blue, /area/sector/nebula_tradeport/motel/room4) "nIU" = ( @@ -24265,6 +24521,13 @@ /obj/structure/flora/pottedplant/smalltree, /turf/simulated/floor/tiled/monotechmaint, /area/tradeport/spine) +"ojj" = ( +/obj/machinery/door/blast/regular{ + id = "tugdoor1" + }, +/obj/machinery/atmospheric_field_generator/perma, +/turf/simulated/floor/plating, +/area/shuttle/tug) "ojq" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 @@ -24467,7 +24730,7 @@ /obj/item/pen/fountain, /obj/item/pen, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "oFP" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -24576,7 +24839,7 @@ id = "scoophead_room" }, /turf/simulated/floor/wood, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "pfv" = ( /obj/structure/cable/yellow{ icon_state = "0-8" @@ -24638,6 +24901,7 @@ "phM" = ( /obj/structure/bed/padded, /obj/structure/curtain/open/bed, +/obj/item/bedsheet, /turf/simulated/floor/carpet/patterened/blue, /area/sector/nebula_tradeport/motel/room3) "piK" = ( @@ -24758,6 +25022,13 @@ /obj/structure/cable/yellow{ icon_state = "1-4" }, +/obj/machinery/vending/motel, +/obj/item/paper{ + info = "WELCOME TO THE NEBULA MOTEL \ TO BUY A PASS, SEEK THE MOTEL VENDING MACHINE NEAR THE COUNTER. \ \ We have 9 rooms. \ Room 1 to 4 have a small kitchen, and washing room. \ Room 1 and 4 have 1 Double bed. \ 2 has 1 single bed \ 3 have 2 single beds. \ Those rooms are 30 Thrallers the 3 to 5 hours. \ \ Room 5 to 8 have no kitchen, and washing room. \ Room 6 and 8 have 1 Double bed. \ 5 has 1 single bed \ 7 have 2 single beds. \ Those rooms are 15 Thrallers the 3 to 5 hours. \ \ Room 9 is our VIP Suite. This suite has 2 bed rooms, 1 office, 1 fully equipped kitchen, 1 washroom, 1 laundry room, And its own shuttle call the Arrowhead, used by ex Tajaran racer Cheuk'Yager. the suite is 80 Thrallers the 3 to 5 hours. \ \ The Sauna is free to use. The public laundry machine and public bathroom are free to use. Guest pass are available if the rooms are shared."; + name = "Nebula Motel"; + pixel_x = -7; + pixel_y = 1 + }, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel) "pJb" = ( @@ -24781,6 +25052,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/item/storage/box/glasses/meta, /turf/simulated/floor/tiled/dark, /area/sector/nebula_tradeport/motel/room2) "pSM" = ( @@ -24891,6 +25163,8 @@ /area/sector/nebula_tradeport/motel/room4) "qnM" = ( /obj/structure/bed/double/padded, +/obj/machinery/fire_alarm/north_mount, +/obj/item/bedsheet/double, /turf/simulated/floor/carpet/patterened/blue, /area/sector/nebula_tradeport/motel/room6) "qnU" = ( @@ -24899,6 +25173,12 @@ }, /turf/simulated/floor/tiled/old_tile/white, /area/sector/nebula_tradeport/motel/room3) +"qox" = ( +/obj/item/modular_computer/console/preset/civilian{ + dir = 4 + }, +/turf/simulated/floor/glass/reinforced, +/area/sector/nebula_tradeport/engineering) "qoI" = ( /obj/machinery/camera{ dir = 8 @@ -25035,13 +25315,15 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/silver{ - id_tag = "motel2" + id_tag = "motel2"; + req_access = list(162) }, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room2) "qOg" = ( /obj/structure/curtain/open/bed, /obj/structure/bed/double/padded, +/obj/item/bedsheet/double, /turf/simulated/floor/carpet/patterened/blue, /area/sector/nebula_tradeport/motel/room1) "qOs" = ( @@ -25230,7 +25512,19 @@ /obj/structure/bed/pod, /obj/item/bedsheet/brown, /turf/simulated/floor/carpet/patterened/blue, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) +"rbV" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/air_alarm/alarms_hidden{ + pixel_y = 22; + req_one_access = list(160) + }, +/obj/effect/floor_decal/corner/green/border, +/obj/landmark/spawnpoint/job/outsider, +/turf/simulated/floor/tiled, +/area/tradeport/commhall) "rch" = ( /obj/structure/closet/crate/bin{ anchored = 1 @@ -25244,6 +25538,13 @@ /obj/item/reagent_containers/food/snacks/candy_corn, /turf/simulated/floor/tiled/old_tile/blue, /area/tradeport/commons) +"rdP" = ( +/obj/spawner/window/low_wall/reinforced/full/firelocks, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/shuttle/utilitymicro) "rfq" = ( /obj/machinery/newscaster{ pixel_y = 35 @@ -25354,8 +25655,17 @@ /area/sector/nebula_tradeport/motel/arcade) "rEe" = ( /obj/machinery/computer/ship/engines, -/turf/simulated/floor/tiled/steel_dirty/dark, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty/red, /area/shuttle/arrowhead) +"rIw" = ( +/obj/structure/bed/chair/bay/chair/padded/teal{ + dir = 4 + }, +/turf/simulated/floor/glass/reinforced, +/area/sector/nebula_tradeport/engineering) "rJb" = ( /obj/machinery/door/firedoor/glass, /obj/structure/grille, @@ -25410,6 +25720,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/item/storage/box/glasses/meta, /turf/simulated/floor/tiled/dark, /area/sector/nebula_tradeport/motel/room3) "rMJ" = ( @@ -25487,6 +25798,13 @@ }, /turf/simulated/floor/tiled/old_tile/white, /area/sector/nebula_tradeport/motel/room2) +"rXg" = ( +/obj/effect/floor_decal/corner_oldtile/blue{ + dir = 10 + }, +/obj/machinery/lathe/autolathe, +/turf/simulated/floor/tiled/techfloor/grid, +/area/sector/nebula_tradeport/engineering) "rXJ" = ( /obj/structure/undies_wardrobe, /turf/simulated/floor/wood, @@ -25504,7 +25822,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plating, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "rYV" = ( /obj/machinery/light, /obj/structure/flora/pottedplant/drooping, @@ -25550,7 +25868,7 @@ /obj/item/modular_computer/console/preset/civilian{ dir = 4 }, -/turf/simulated/floor/tiled/steel_dirty/dark, +/turf/simulated/floor/tiled/steel_dirty/red, /area/shuttle/arrowhead) "sjP" = ( /turf/simulated/floor/tiled/white, @@ -25654,6 +25972,15 @@ /obj/structure/inflatable, /turf/simulated/floor/tiled/old_tile/yellow, /area/tradeport/spine) +"sEm" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/valve{ + dir = 4 + }, +/turf/simulated/floor/carpet/patterened/blue, +/area/shuttle/caravan) "sFL" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 8 @@ -25712,6 +26039,8 @@ /area/sector/nebula_tradeport/motel/sauna) "sKi" = ( /obj/structure/bed/double/padded, +/obj/machinery/fire_alarm/north_mount, +/obj/item/bedsheet/double, /turf/simulated/floor/carpet/patterened/blue, /area/sector/nebula_tradeport/motel/room8) "sLr" = ( @@ -25720,6 +26049,13 @@ }, /turf/simulated/floor/carpet/turcarpet, /area/sector/nebula_tradeport/motel) +"sLJ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/fire_alarm/south_mount, +/turf/simulated/floor/wood, +/area/sector/nebula_tradeport/motel/room2) "sMT" = ( /obj/machinery/power/apc/alarms_hidden/north_mount, /obj/structure/cable/yellow{ @@ -25783,7 +26119,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/red{ dir = 4 }, -/turf/simulated/floor/tiled/steel_dirty/dark, +/turf/simulated/floor/tiled/steel_dirty/red, /area/shuttle/arrowhead) "tcJ" = ( /obj/structure/flora/pottedplant/smelly, @@ -25793,10 +26129,12 @@ /turf/simulated/floor/outdoors/grass/heavy/indoors, /area/tradeport/spine) "tcM" = ( -/obj/machinery/bodyscanner, /obj/structure/cable/yellow{ icon_state = "2-8" }, +/obj/structure/bed/chair/office/light{ + dir = 8 + }, /turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) "tdH" = ( @@ -25965,7 +26303,7 @@ /obj/item/storage/single_use/mre/random, /obj/item/storage/single_use/mre/random, /turf/simulated/floor/carpet/patterened/blue, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "tBI" = ( /obj/structure/closet/secure_closet/personal, /obj/item/storage/box/glasses/meta, @@ -25993,6 +26331,16 @@ }, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room7) +"tDW" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/border, +/obj/structure/sign/department/medbay{ + pixel_y = 29 + }, +/turf/simulated/floor/tiled, +/area/tradeport/commhall) "tEL" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 4 @@ -26044,10 +26392,6 @@ /obj/machinery/holopad, /turf/simulated/floor/tiled/old_tile/yellow, /area/tradeport/spine) -"tQK" = ( -/obj/machinery/body_scanconsole, -/turf/simulated/floor/tiled/white, -/area/sector/nebula_tradeport/medical/public) "tRl" = ( /obj/structure/flora/pottedplant/minitree, /obj/machinery/light{ @@ -26190,7 +26534,7 @@ gps_tag = "SCOOP" }, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "umU" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 10 @@ -26233,7 +26577,7 @@ dir = 4 }, /turf/simulated/wall/prepainted/command, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "uuk" = ( /obj/structure/noticeboard{ pixel_y = 29 @@ -26281,6 +26625,8 @@ /obj/machinery/light/spot{ dir = 1 }, +/obj/item/roller, +/obj/item/roller, /turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) "uxP" = ( @@ -26328,6 +26674,7 @@ /area/sector/nebula_tradeport/motel) "uyE" = ( /obj/structure/bed/padded, +/obj/item/bedsheet, /turf/simulated/floor/carpet/patterened/blue, /area/sector/nebula_tradeport/motel/room7) "uBu" = ( @@ -26352,7 +26699,7 @@ "uFC" = ( /obj/structure/table/woodentable, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "uHN" = ( /obj/machinery/light{ dir = 1 @@ -26385,7 +26732,8 @@ "uNh" = ( /obj/machinery/door/airlock/multi_tile/metal{ dir = 8; - id_tag = "motel9" + id_tag = "motel9"; + req_access = list(170) }, /obj/machinery/door/firedoor{ req_one_access = list(160) @@ -26426,6 +26774,10 @@ /obj/machinery/light, /turf/simulated/floor/tiled/steel_dirty/dark, /area/shuttle/arrowhead) +"uVC" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/simulated/floor/plating, +/area/shuttle/tug) "uWr" = ( /obj/effect/floor_decal/corner/red/border{ dir = 1 @@ -26451,6 +26803,10 @@ /obj/effect/floor_decal/spline/plain, /turf/simulated/floor/wmarble, /area/tradeport/commons) +"uZU" = ( +/obj/machinery/vending/survivalist, +/turf/simulated/floor/tiled/monotechmaint, +/area/tradeport/spine) "ves" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -26471,7 +26827,7 @@ pixel_x = 32 }, /turf/simulated/floor/wood, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "vff" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -26533,6 +26889,15 @@ }, /turf/simulated/floor/bmarble, /area/tradeport/commons) +"vqO" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/sector/nebula_tradeport/motel/vip) "vrJ" = ( /obj/structure/bed/chair/sofa/red/corner{ dir = 8 @@ -26581,15 +26946,12 @@ /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room3) "vym" = ( -/obj/structure/table/hardwoodtable, /obj/item/material/knife, -/obj/machinery/recharger{ - pixel_x = 9; - pixel_y = 2 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, +/obj/machinery/appliance/cooker/oven, +/obj/structure/table/hardwoodtable, /turf/simulated/floor/tiled/dark, /area/sector/nebula_tradeport/motel/room4) "vzd" = ( @@ -26761,7 +27123,7 @@ dir = 4 }, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "wlu" = ( /obj/machinery/shipsensors, /turf/simulated/floor/plating, @@ -26813,7 +27175,7 @@ dir = 4 }, /turf/simulated/floor/tiled/neutral, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "wqt" = ( /obj/structure/shuttle/engine/heater{ dir = 4 @@ -26855,11 +27217,18 @@ dir = 9 }, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "wvG" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled/neutral, /area/tradeport/facility) +"wwE" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/fire_alarm/south_mount, +/turf/simulated/floor/wood, +/area/sector/nebula_tradeport/motel/room3) "wAb" = ( /obj/machinery/atmospherics/component/unary/engine{ dir = 8 @@ -26912,7 +27281,6 @@ /turf/simulated/floor/tiled/old_tile/blue, /area/tradeport/commons) "wEN" = ( -/obj/structure/table/hardwoodtable, /obj/item/reagent_containers/food/drinks/shaker{ pixel_x = -6 }, @@ -26932,6 +27300,7 @@ /obj/item/reagent_containers/food/snacks/pancakes, /obj/item/reagent_containers/food/snacks/pancakes, /obj/item/reagent_containers/food/snacks/pancakes, +/obj/machinery/appliance/cooker/oven, /turf/simulated/floor/wood, /area/tradeport/cafeteria) "wFr" = ( @@ -27023,11 +27392,21 @@ "wSZ" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, /turf/simulated/floor/plating, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "wUd" = ( /obj/structure/bed/padded, +/obj/machinery/fire_alarm/north_mount, +/obj/item/bedsheet, /turf/simulated/floor/carpet/patterened/blue, /area/sector/nebula_tradeport/motel/room5) +"wWl" = ( +/obj/effect/floor_decal/techfloor, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/landmark/spawnpoint/latejoin/outsider, +/turf/simulated/floor/tiled, +/area/tradeport/commhall) "wWB" = ( /turf/simulated/wall/r_wall, /area/sector/nebula_tradeport/motel/room7) @@ -27087,8 +27466,9 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/scoophead/main) "xcp" = ( +/obj/structure/table/carbon/reinforced, /obj/structure/cable/yellow{ - icon_state = "2-4" + icon_state = "4-8" }, /turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) @@ -27110,7 +27490,8 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/silver{ - id_tag = "motel7" + id_tag = "motel7"; + req_access = list(167) }, /turf/simulated/floor/airless, /area/sector/nebula_tradeport/motel/room7) @@ -27238,13 +27619,13 @@ }, /obj/machinery/computer/shuttle_control/explore/trade/scoophead, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "xvE" = ( /obj/structure/bed/chair/shuttle{ dir = 8 }, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/office) +/area/shuttle/scoophead/main2) "xwL" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 @@ -27266,6 +27647,13 @@ /obj/structure/undies_wardrobe, /turf/simulated/floor/carpet/patterened/blue, /area/sector/nebula_tradeport/motel/room3) +"xGT" = ( +/obj/structure/table/carbon/reinforced, +/obj/structure/flora/pottedplant/thinbush{ + pixel_y = 11 + }, +/turf/simulated/floor/tiled/white, +/area/sector/nebula_tradeport/medical/public) "xHj" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on, /obj/machinery/computer/arcade/orion_trail, @@ -27304,6 +27692,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel) +"xTF" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/machinery/fire_alarm/west_mount{ + pixel_x = -26 + }, +/turf/simulated/floor/carpet/patterened, +/area/sector/nebula_tradeport/motel) "xTL" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -27373,6 +27770,18 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/shuttle/scoophead) +"ygF" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/camera, +/obj/effect/floor_decal/corner/green/border, +/obj/machinery/air_alarm/alarms_hidden{ + pixel_y = 22; + req_one_access = list(160) + }, +/turf/simulated/floor/tiled, +/area/tradeport/commhall) "ygJ" = ( /obj/effect/floor_decal/spline/fancy{ dir = 6 @@ -27422,7 +27831,8 @@ icon_state = "4-8" }, /obj/machinery/door/airlock/silver{ - id_tag = "motel6" + id_tag = "motel6"; + req_access = list(166) }, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room6) @@ -27454,6 +27864,9 @@ }, /turf/simulated/floor/tiled/old_tile/white, /area/sector/nebula_tradeport/motel/room3) +"yjZ" = ( +/turf/simulated/floor/tiled/old_tile/beige, +/area/tradeport/commhall) (1,1,1) = {" acd @@ -29859,8 +30272,8 @@ acd aDh aDh nBl -nBl -nBl +dUe +dUe aDh acd acd @@ -30052,9 +30465,9 @@ acd acd aDh aDh -nBl +dUe sfh -nBl +dUe aDh acd acd @@ -30246,10 +30659,10 @@ acd acd aDh nBl -nBl +dUe naT -nBl -nBl +dUe +dUe acd acd aDh @@ -30443,7 +30856,7 @@ nBl fir tbk jQe -nBl +dUe acd acd aDh @@ -30637,7 +31050,7 @@ nBl rEe cuq etX -nBl +dUe acd acd acd @@ -33741,7 +34154,7 @@ aei sSX eok dMM -dMM +vqO mtk aCH aAF @@ -34134,7 +34547,7 @@ asa aAg ayA aIZ -aLh +kRE aLh aSb aMf @@ -35127,7 +35540,7 @@ adU aog aog aNU -aCN +aog aCS aEd aKa @@ -35499,7 +35912,7 @@ aMf aVE aXl aIh -anj +dYD aHO aXl atV @@ -35680,7 +36093,7 @@ tFV tFV wtb sFL -sFL +lwa mAL umU aFw @@ -35693,11 +36106,11 @@ aMf aVE aPx aQK -anj +sEm aRn aXl atV -aTp +aIs aza aZQ aId @@ -36239,22 +36652,22 @@ vTE tsd lfZ uci -xAe +hhH vLz dgI tEL gPE -vHl +wwE vey byE lxm pFo -rpe +sLJ sqy bOU ikV lLF -uMy +dPa sqy vLW mHz @@ -36268,7 +36681,7 @@ cXs aOy aHW aJz -akD +yjZ axS aoN apv @@ -36285,14 +36698,14 @@ aUh amt aIs aeg -aog +bPs agT agT agT agT agT agT -aog +khV aEd aKa awk @@ -36479,14 +36892,14 @@ atJ aXB arH aeg -aog +fHX agT agT agT agT agT awv -aog +khV aEd aKa awk @@ -36673,14 +37086,14 @@ aeo awi aTn aeg -aog +fHX aVR aXQ agT agT agT ayE -aog +khV aEd aKa awk @@ -36848,10 +37261,10 @@ cXs lFD jlU abr -aby +nHT awO aYp -aVm +wWl aoN apv aWO @@ -36867,14 +37280,14 @@ apL aqP avN aeg -aog +fHX aVM -avI +aij agT agT agT aaf -aog +khV aEd aKa awk @@ -37045,7 +37458,7 @@ abr awu aCZ akM -aWb +itp aoN apv aeh @@ -37064,7 +37477,7 @@ aeg aog aXG aij -agT +uVC agT agT axJ @@ -37228,7 +37641,7 @@ lAe sqy wMY pIG -ime +jGT kji vuw gPc @@ -37236,7 +37649,7 @@ eSp cXs koU aFw -aDJ +rbV fNR adj dWa @@ -37404,7 +37817,7 @@ dIo hjC jNt fCA -qfx +gCI ooi dXo mHd @@ -37415,7 +37828,7 @@ kKq bbg fCA ltU -ltU +xTF cUF bbg fCA @@ -37450,12 +37863,12 @@ atV atV atV aog -aog -aog +ojj +ojj aZf aZf -aog -aog +ojj +ojj aog aEd aKa @@ -38375,7 +38788,7 @@ dhw pSM snj cWp -uyE +dQr nZW uyE rXJ @@ -38412,7 +38825,7 @@ aHl aEd ahe aLz -aLz +rdP aBm aEd aHv @@ -38788,10 +39201,10 @@ eaJ kXi gaH asP -aBb +apj anJ aoq -apb +apj atf aif aHw @@ -38985,7 +39398,7 @@ aSQ awu aFe akM -aWb +lcX aoN azZ aHw @@ -40548,7 +40961,7 @@ auX atP arA afX -aTi +aOq dRV aOq aOq @@ -41147,7 +41560,7 @@ aIp aIp aRR aGH -aGH +qox aXk ajk acd @@ -41338,11 +41751,11 @@ aiJ aqu azw aKw -aUI -aQZ -amc -aqq +aIp +rXg aGH +aqq +qox ajk acd acd @@ -41503,8 +41916,8 @@ vKs mBg cfu bYr -abx -avS +bfF +ygF aCQ aYp aVm @@ -41532,11 +41945,11 @@ aiJ aJr aJu aMb -aUI +aIp aQZ -acK -aqq aGH +aGH +amc ajk acd acd @@ -41694,11 +42107,11 @@ eGH bcr iVZ itm -sjP +xGT xcp job -abx -aDJ +eSH +aby aCQ aYp aVm @@ -41726,11 +42139,11 @@ aiJ ajT aCv aJQ -aUI -aQZ -amc -aqq +aIp +eiO aGH +rIw +fwS ajk acd acd @@ -41923,7 +42336,7 @@ asi aIp aZo aGH -aGH +fwS aXk ajk acd @@ -42083,10 +42496,10 @@ vLJ vLJ mlq qGd -tQK +sjP bcr -abx -aby +bfF +tDW aCQ aYp aVm @@ -42667,7 +43080,7 @@ uvg qOL xhP hqi -abx +bfF aCJ aFe akM @@ -45544,7 +45957,7 @@ acd acd acd aDh -aDh +acd aDh aDh aDh @@ -45736,8 +46149,6 @@ acd acd acd acd -acd -aDh aDh abs abs @@ -45746,6 +46157,8 @@ abs abs abs abs +abs +abs aWv apJ adm @@ -45930,8 +46343,6 @@ acd acd acd acd -acd -aDh aMr aEi aEi @@ -45941,6 +46352,8 @@ aEi aEi aEi aEi +aEi +aEi acT aEi aEi @@ -46124,8 +46537,6 @@ acd acd acd acd -acd -aDh aMr aBg aVZ @@ -46135,6 +46546,8 @@ aVZ aVZ aVZ aVZ +aVZ +aVZ aPp aPQ aPQ @@ -46318,8 +46731,6 @@ acd acd acd acd -acd -aDh aMr aag aag @@ -46329,6 +46740,8 @@ aag aag aag aag +aag +aag acT aag aag @@ -46512,8 +46925,6 @@ acd acd acd acd -acd -aDh aMr aiv aiv @@ -46523,6 +46934,8 @@ aiv aiv aiv aiv +aiv +aiv acT aiv aiv @@ -46706,8 +47119,6 @@ acd acd acd acd -acd -aDh aMr aEi aEi @@ -46717,6 +47128,8 @@ aEi aEi aEi aEi +aEi +aEi acT aEi aEi @@ -46900,8 +47313,6 @@ acd acd acd acd -acd -aDh aMr aBg aVZ @@ -46911,6 +47322,8 @@ aVZ aVZ aVZ aVZ +aVZ +aVZ aPp aPQ aPQ @@ -47094,8 +47507,6 @@ acd acd acd acd -acd -aDh aMr aag aag @@ -47105,6 +47516,8 @@ aag aag aag aag +aag +aag acT aag aag @@ -47288,8 +47701,6 @@ aDh aDh aDh aDh -aDh -aDh aMr aiv aiv @@ -47299,6 +47710,8 @@ aiv aiv aiv aiv +aiv +aiv acT aiv aiv @@ -47482,8 +47895,6 @@ aDh aDh aDh aDh -aDh -aDh aMr aEi aEi @@ -47493,6 +47904,8 @@ aEi aEi aEi aEi +aEi +aEi acT aEi aEi @@ -47676,8 +48089,6 @@ aDh aDh aDh aDh -aDh -aDh aMr aBg aVZ @@ -47687,6 +48098,8 @@ aVZ aVZ aVZ aVZ +aVZ +aVZ aPp aPQ aPQ @@ -47870,8 +48283,6 @@ aDh aDh aDh aDh -aDh -aDh aMr aag aag @@ -47881,6 +48292,8 @@ aag aag aag aag +aag +aag acT aag aag @@ -48064,8 +48477,6 @@ aDh aDh aDh aDh -aDh -aDh aMr aiv aiv @@ -48075,6 +48486,8 @@ aiv aiv aiv aiv +aiv +aiv acT aiv aiv @@ -48258,8 +48671,6 @@ aDh aDh aDh aDh -aDh -aDh aMr aEi aEi @@ -48269,6 +48680,8 @@ aEi aEi aEi aEi +aEi +aEi acT aEi aEi @@ -48452,13 +48865,13 @@ aDh aDh aDh aDh -aDh -aDh aMr aBg aVZ aVZ aVZ +aVZ +aVZ ark aEU aEU @@ -48646,8 +49059,6 @@ aDh aDh aDh aDh -aDh -aDh aQv aag aag @@ -48657,6 +49068,8 @@ aag aag aag aag +aag +aag acT aag aag @@ -48840,8 +49253,6 @@ avW avW aDh aDh -aDh -aDh aQv aOe aiv @@ -48851,6 +49262,8 @@ aiv aiv aiv aiv +aiv +aiv acT aiv aiv @@ -49034,8 +49447,6 @@ avW avW avW avW -aDh -aDh aQv aEi aEi @@ -49045,6 +49456,8 @@ aEi aEi aEi aEi +aEi +aEi acT aEi aEi @@ -49228,13 +49641,13 @@ avW avW avW avW -avW -aDh aQv aBg aVZ aVZ aVZ +aVZ +aVZ ark aEU aEU @@ -49422,8 +49835,6 @@ avW avW avW avW -avW -avW aQv aag aag @@ -49433,6 +49844,8 @@ aag aag aag aag +aag +aag acT aag aag @@ -49616,13 +50029,13 @@ avW avW avW avW -avW -avW aQv aOe aOe aOe aOe +aOe +aOe aiv aiv aiv @@ -49810,8 +50223,6 @@ avW avW avW avW -abk -avW aQv aEi aEi @@ -49821,6 +50232,8 @@ aEi aEi aEi aEi +aEi +aEi acT aEi aEi @@ -49846,7 +50259,7 @@ aMr xsx abK bNF -aWh +uZU amU aWh aWh @@ -50004,13 +50417,13 @@ avW avW avW avW -avW -avW aQv aBg aVZ aVZ aVZ +aVZ +aVZ ark aEU aEU @@ -50175,8 +50588,7 @@ aDh aDh aDh aEh -aEh -avW +axY avW avW avW @@ -50199,7 +50611,8 @@ avW avW avW avW -axY +aQv +aZT aZT aag aag @@ -50404,25 +50817,25 @@ auG auG auG acT -auG -auG -auG -auG -auG -aew -aew -aew -aew -aew -aew -aew -aew -aew -aew -aew -aew -aew -aDh +cTW +cTW +cTW +cTW +cTW +cTW +cTW +cTW +cTW +cTW +cTW +cTW +cTW +cTW +cTW +cTW +cTW +cTW +aSY aTq aMr xsx @@ -50598,25 +51011,25 @@ avW avW avW acT -avW -avW -avW -avW -avW -avW -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh +aEi +aEi +aEi +aEi +aEi +aEi +aEi +aEi +aEi +aEi +aEi +aEi +aEi +aEi +aEi +aEi +aEi +aEi +aSY aTq aMr xsx @@ -50791,26 +51204,26 @@ avW avW avW avW -acT -asZ -avW -avW -awV -awV -abk -avW -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh +evN +akv +akv +akv +aml +aPQ +akv +akv +aml +akv +akv +aml +aPQ +aPQ +aPQ +aPQ +aPQ +aPQ +aET +aSY aTq aMr xsx @@ -50986,25 +51399,25 @@ avW awV awV aPI -awV -awV -awV -awV -awV -awV -avW -awV -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh +aag +aag +aag +aag +aag +aag +aag +aag +aag +aag +aag +aag +aag +aag +aag +aag +aag +aag +aSY aTq aMr xsx @@ -51189,15 +51602,15 @@ awV avt awV awV -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh -aDh +aew +aew +aew +aew +aew +aew +aew +aew +aew aDh aTq aMr diff --git a/maps/tether/tether.dm b/maps/tether/tether.dm index 69b9b3ffad5d..fe8a32781d51 100644 --- a/maps/tether/tether.dm +++ b/maps/tether/tether.dm @@ -101,7 +101,7 @@ bot_patrolling = FALSE - allowed_spawns = list("Tram Station","Gateway","Cryogenic Storage","Cyborg Storage","Beruang Trading Corp Cryo") + allowed_spawns = list("Tram Station","Gateway","Cryogenic Storage","Cyborg Storage","Beruang Trading Corp Cryo","Nebula Visitor Arrival") spawnpoint_died = /datum/spawnpoint/tram spawnpoint_left = /datum/spawnpoint/tram spawnpoint_stayed = /datum/spawnpoint/cryo diff --git a/maps/triumph/triumph.dm b/maps/triumph/triumph.dm index 936024523176..751d7b24292b 100644 --- a/maps/triumph/triumph.dm +++ b/maps/triumph/triumph.dm @@ -99,7 +99,7 @@ bot_patrolling = FALSE - allowed_spawns = list(LATEJOIN_METHOD_ARRIVALS_SHUTTLE,LATEJOIN_METHOD_GATEWAY,LATEJOIN_METHOD_CRYOGENIC_STORAGE,LATEJOIN_METHOD_ROBOT_STORAGE,"Beruang Trading Corp Cryo") + allowed_spawns = list(LATEJOIN_METHOD_ARRIVALS_SHUTTLE,LATEJOIN_METHOD_GATEWAY,LATEJOIN_METHOD_CRYOGENIC_STORAGE,LATEJOIN_METHOD_ROBOT_STORAGE,"Beruang Trading Corp Cryo","Nebula Visitor Arrival") spawnpoint_died = /datum/spawnpoint/arrivals spawnpoint_left = /datum/spawnpoint/arrivals spawnpoint_stayed = /datum/spawnpoint/cryo From aed3013410a511c4a384bbb7f0cdb9990c25136e Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:34:32 -0500 Subject: [PATCH 04/16] bugfix / tweaks (#6959) --- citadel.dme | 14 ++- code/__DEFINES/mapping/multiz.dm | 22 +++- code/__HELPERS/lists/associations.dm | 1 + code/controllers/repository/flooring.dm | 12 +- code/datums/components/_component.dm | 9 +- .../components/mobs/mob_feign_impairment.dm | 62 +++++++++++ .../mobs/mob_self_horizontal_inversion.dm | 6 + .../mobs/mob_self_vertical_inversion.dm | 40 +++++++ .../nanotrasen/nanotrasen-supply/costumes.dm | 4 +- .../game/objects/items-inventory-rendering.dm | 2 +- code/game/objects/items/gifts.dm | 1 - .../melee/types/transforming/energy/saber.dm | 1 + code/game/objects/items/stacks/rods.dm | 3 +- code/game/objects/items/stacks/stack.dm | 41 +++++-- .../objects/items/stacks/tiles/tile_types.dm | 12 +- code/game/objects/random/maintenance.dm | 2 +- code/game/objects/structures/loot_piles.dm | 2 +- code/game/objects/structures/trash_pile.dm | 2 +- code/game/objects/systems/storage/storage.dm | 12 +- code/game/rendering/legacy/radial.dm | 4 + code/game/rendering/mob.dm | 2 + .../simulated/floor/floor-construction.dm | 21 +++- .../game/turfs/simulated/flooring/flooring.dm | 12 ++ .../simulated/flooring/flooring_types.dm | 3 - code/modules/artwork/crayon_decal_meta.dm | 10 +- code/modules/artwork/items/crayon.dm | 2 + code/modules/clothing/accessories/halo.dm | 4 +- code/modules/clothing/clothing.dm | 29 +++-- code/modules/clothing/under/_under.dm | 4 +- code/modules/clothing/under/gear_harness.dm | 25 +++++ code/modules/clothing/under/miscellaneous.dm | 6 - code/modules/frames/frame_step.dm | 10 +- code/modules/frames/types/fire_alarm.dm | 2 +- code/modules/loadout/loadout_xeno.dm | 2 +- code/modules/materials/material_sheets.dm | 2 +- code/modules/materials/material_synth.dm | 6 + code/modules/mining/tools/vertibore.dm | 2 +- code/modules/mob/animations.dm | 11 +- .../mob/living/carbon/human/examine.dm | 7 +- .../mob/living/carbon/human/human-defense.dm | 2 +- .../mob/living/carbon/human/update_icons.dm | 2 +- code/modules/mob/living/living.dm | 2 +- code/modules/mob/living/say.dm | 4 +- code/modules/mob/mob-status_procs.dm | 36 ++++++ code/modules/mob/mob.dm | 5 + code/modules/mob/verbs/feign_impairment.dm | 105 ++++++++++++++++++ .../mob/verbs/horizontal_invert_self.dm | 1 + .../modules/mob/verbs/vertical_invert_self.dm | 24 ++++ code/modules/multiz/atom-z_fall.dm | 29 +++++ .../multiz/{atoms.dm => atom-z_move.dm} | 2 +- code/modules/multiz/core.dm | 2 +- code/modules/multiz/falling.dm | 15 --- code/modules/multiz/movement.dm | 36 +++--- code/modules/multiz/turf-multiz_misc.dm | 52 +++++++++ code/modules/multiz/turf-z_fall.dm | 38 +++++++ .../multiz/{turf.dm => turf-z_move.dm} | 100 ++--------------- code/modules/power/cable.dm | 45 ++++---- .../preferences/preferences_toggle_procs.dm | 50 --------- .../micro/mecha_construction_paths_vr.dm | 2 - maps/templates/archive/tradeship.dmm | 2 +- 60 files changed, 678 insertions(+), 288 deletions(-) create mode 100644 code/datums/components/mobs/mob_feign_impairment.dm create mode 100644 code/datums/components/mobs/mob_self_vertical_inversion.dm create mode 100644 code/modules/clothing/under/gear_harness.dm create mode 100644 code/modules/mob/mob-status_procs.dm create mode 100644 code/modules/mob/verbs/feign_impairment.dm create mode 100644 code/modules/mob/verbs/vertical_invert_self.dm create mode 100644 code/modules/multiz/atom-z_fall.dm rename code/modules/multiz/{atoms.dm => atom-z_move.dm} (92%) delete mode 100644 code/modules/multiz/falling.dm create mode 100644 code/modules/multiz/turf-multiz_misc.dm create mode 100644 code/modules/multiz/turf-z_fall.dm rename code/modules/multiz/{turf.dm => turf-z_move.dm} (52%) diff --git a/citadel.dme b/citadel.dme index c1999fd4477a..674277a855ba 100644 --- a/citadel.dme +++ b/citadel.dme @@ -811,7 +811,9 @@ #include "code\datums\components\items\passive_parry.dm" #include "code\datums\components\items\wielding.dm" #include "code\datums\components\mobs\block_frame.dm" +#include "code\datums\components\mobs\mob_feign_impairment.dm" #include "code\datums\components\mobs\mob_self_horizontal_inversion.dm" +#include "code\datums\components\mobs\mob_self_vertical_inversion.dm" #include "code\datums\components\mobs\parry_frame.dm" #include "code\datums\components\movable\aquarium.dm" #include "code\datums\components\movable\spatial_grid.dm" @@ -2668,6 +2670,7 @@ #include "code\modules\clothing\suits\aliens\vox.dm" #include "code\modules\clothing\under\_under.dm" #include "code\modules\clothing\under\color.dm" +#include "code\modules\clothing\under\gear_harness.dm" #include "code\modules\clothing\under\imperial_vr.dm" #include "code\modules\clothing\under\misc.dm" #include "code\modules\clothing\under\miscellaneous.dm" @@ -3615,6 +3618,7 @@ #include "code\modules\mob\mob-keybind-triggers.dm" #include "code\modules\mob\mob-login.dm" #include "code\modules\mob\mob-logout.dm" +#include "code\modules\mob\mob-status_procs.dm" #include "code\modules\mob\mob.dm" #include "code\modules\mob\mob_defines.dm" #include "code\modules\mob\mob_helpers.dm" @@ -4146,7 +4150,9 @@ #include "code\modules\mob\observer\dead\orbit.dm" #include "code\modules\mob\observer\dead\perspective.dm" #include "code\modules\mob\observer\dead\say.dm" +#include "code\modules\mob\verbs\feign_impairment.dm" #include "code\modules\mob\verbs\horizontal_invert_self.dm" +#include "code\modules\mob\verbs\vertical_invert_self.dm" #include "code\modules\modular_computers\laptop_vendor.dm" #include "code\modules\modular_computers\computers\modular_computer\core.dm" #include "code\modules\modular_computers\computers\modular_computer\damage.dm" @@ -4211,12 +4217,14 @@ #include "code\modules\movespeed\movespeed_modifier.dm" #include "code\modules\movespeed\modifiers\misc.dm" #include "code\modules\movespeed\modifiers\mob.dm" -#include "code\modules\multiz\atoms.dm" +#include "code\modules\multiz\atom-z_fall.dm" +#include "code\modules\multiz\atom-z_move.dm" #include "code\modules\multiz\basic_legacy.dm" #include "code\modules\multiz\core.dm" -#include "code\modules\multiz\falling.dm" #include "code\modules\multiz\movement.dm" -#include "code\modules\multiz\turf.dm" +#include "code\modules\multiz\turf-multiz_misc.dm" +#include "code\modules\multiz\turf-z_fall.dm" +#include "code\modules\multiz\turf-z_move.dm" #include "code\modules\multiz\structures\hoist.dm" #include "code\modules\multiz\structures\ladder.dm" #include "code\modules\multiz\structures\pipes.dm" diff --git a/code/__DEFINES/mapping/multiz.dm b/code/__DEFINES/mapping/multiz.dm index b43bdd839d77..51636b09d27f 100644 --- a/code/__DEFINES/mapping/multiz.dm +++ b/code/__DEFINES/mapping/multiz.dm @@ -1,4 +1,8 @@ -// fall_flags +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2025 Citadel Station Developers *// + +//* fall_Flags *// + /// Falling should ignore anchored status #define FALL_IGNORE_ANCHORED (1<<0) /// this fall shouldn't incur any sort of self-damage for hitting the ground @@ -20,17 +24,25 @@ #define FALL_FLAGS_STOP (FALL_BLOCKED | FALL_RECOVERED | FALL_TERMINATED) /// there's a level above +/// * This works as long as SSmapping has its rebuild proc called after a load; given this is enforced +/// by SSmapping most of the time, this is usually fine. #define Z_HAS_ABOVE(z) (!isnull(SSmapping.cached_level_up[z])) /// there's a level below +/// * This works as long as SSmapping has its rebuild proc called after a load; given this is enforced +/// by SSmapping most of the time, this is usually fine. #define Z_HAS_BELOW(z) (!isnull(SSmapping.cached_level_down[z])) /// get turf below this turf, if any -/// we are at the mercy of zmimic when we do this. do not use in critical maploader code. +/// * this is a guesstimation +/// * we are at the mercy of zmimic when we do this. do not use in critical maploader code. #define TURF_BELOW_ISH(T) (T.below || T.below()) /// get turf above this turf, if any -/// we are at the mercy of zmimic when we do this. do not use in critical maploader code. +/// * this is a guesstimation +/// * we are at the mercy of zmimic when we do this. do not use in critical maploader code. #define TURF_ABOVE_ISH(T) (T.above || T.above()) -/// we should use get virtual step due to our x/y being border -/// we do not get step this, so use it on something **on** game world. (aka turf or on turf). +/// Checks if we're right next to the map transition border. +/// * Only valid for something on a turf. +/// +/// todo: support multi-tile objects #define AT_MAP_BORDER(A) (A.x == 2 || A.y == 2 || A.x == world.maxx - 1 || A.y == world.maxy - 1) diff --git a/code/__HELPERS/lists/associations.dm b/code/__HELPERS/lists/associations.dm index 7e2610cb0bad..243906b6dba5 100644 --- a/code/__HELPERS/lists/associations.dm +++ b/code/__HELPERS/lists/associations.dm @@ -32,6 +32,7 @@ flat_list[flat_list[i]] = TRUE return flat_list +//! WARNING: this no longer works; byond will NEVER de-assoc a list for json_encode purposes even if this is called! /proc/assoc_list_strip_value_inplace(list/input) for(var/i in 1 to length(input)) input[input[i]] = null diff --git a/code/controllers/repository/flooring.dm b/code/controllers/repository/flooring.dm index 8b7bd2ba2e38..ed8190c1253a 100644 --- a/code/controllers/repository/flooring.dm +++ b/code/controllers/repository/flooring.dm @@ -20,17 +20,21 @@ REPOSITORY_DEF(flooring) if(!.) return if(ispath(instance.build_type, /obj/item/stack)) - LAZYADD(build_item_lookup[instance.build_type], instance) + if(build_item_lookup?[instance.build_type]) + stack_trace("attempted to load [instance.id], but build type [instance.build_type] collides with [build_item_lookup?[instance.build_type]:id]. suppressing [instance.id]'s build_type.") + LAZYSET(build_item_lookup, instance.build_type, instance) else if(ispath(instance.build_type, /datum/prototype/material)) var/datum/prototype/material/casted_material = instance.build_type - LAZYADD(build_material_lookup[initial(casted_material.id)], instance) + if(build_material_lookup?[casted_material.id]) + stack_trace("attempted to load [instance.id], but material [casted_material.id] collides with [build_material_lookup?[casted_material.id]:id]. suppressing [instance.id]'s build_type.") + LAZYSET(build_material_lookup, initial(casted_material.id), instance) /datum/controller/repository/flooring/unload(datum/prototype/flooring/instance) . = ..() if(!.) return if(ispath(instance.build_type, /obj/item/stack)) - LAZYREMOVE(build_item_lookup[instance.build_type], instance) + LAZYREMOVE(build_item_lookup, instance.build_type) else if(ispath(instance.build_type, /datum/prototype/material)) var/datum/prototype/material/casted_material = instance.build_type - LAZYREMOVE(build_material_lookup[initial(casted_material.id)], instance) + LAZYREMOVE(build_material_lookup, initial(casted_material.id)) diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index e9fb0a5caa06..ec9b3e6a4a39 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -345,11 +345,10 @@ for(var/datum/listening_datum as anything in queued_calls) . |= call(listening_datum, queued_calls[listening_datum])(arglist(arguments)) -// The type arg is casted so initial works, you shouldn't be passing a real instance into this /** - * Return any component assigned to this datum of the given type + * Return any component assigned to this datum of the given registered component type * - * If it has a registered type, that'll be used instead! + * * `registered_type` must be set on the component for this to work. * * Arguments: * * datum/component/c_type The type of the component you want to get a reference to. It will be overridden with the type of its [registered_type] if it's set. @@ -360,7 +359,9 @@ return . && (length(.) ? .[1] : .) /** - * Get all components of a given type that are attached to this datum + * Get all components of a given registered component type that are attached to this datum + * + * * `registered_type` must be set on the component for this to work. * * Arguments: * * c_type The component type path diff --git a/code/datums/components/mobs/mob_feign_impairment.dm b/code/datums/components/mobs/mob_feign_impairment.dm new file mode 100644 index 000000000000..0c9d897dad0d --- /dev/null +++ b/code/datums/components/mobs/mob_feign_impairment.dm @@ -0,0 +1,62 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2025 Citadel Station Developers *// + +// todo: datumize impairments; the way this works right now is pretty stupid +// it's because we're using different components since i was too +// lazy to do a single tracking component + +/** + * Component added to a mob by the mob themselves to feign an impairment + */ +/datum/component/mob_feign_impairment + var/power + var/feign_impairment_type + +/datum/component/mob_feign_impairment/Initialize(power) + if(!ismob(parent)) + return COMPONENT_INCOMPATIBLE + . = ..() + if(. == COMPONENT_INCOMPATIBLE) + return + src.power = power + +/datum/component/mob_feign_impairment/RegisterWithParent() + . = ..() + // todo: on update stat + RegisterSignal(parent, COMSIG_MOB_ON_UPDATE_MOBILITY, PROC_REF(recheck_stat)) + var/mob/mob_parent = parent + LAZYSET(mob_parent.impairments_feigned, feign_impairment_type, src) + +/datum/component/mob_feign_impairment/UnregisterFromParent() + . = ..() + // todo: on update stat + UnregisterSignal(parent, COMSIG_MOB_ON_UPDATE_MOBILITY) + var/mob/mob_parent = parent + LAZYREMOVE(mob_parent.impairments_feigned, feign_impairment_type) + +/datum/component/mob_feign_impairment/proc/recheck_stat(mob/source) + SIGNAL_HANDLER + if(IS_CONSCIOUS(source)) + return + qdel(src) + +/datum/component/mob_feign_impairment/slurring + // this must be set + registered_type = /datum/component/mob_feign_impairment/slurring + feign_impairment_type = /datum/feign_impairment/slurring + +/datum/component/mob_feign_impairment/stutter + // this must be set + registered_type = /datum/component/mob_feign_impairment/stutter + feign_impairment_type = /datum/feign_impairment/stutter + +/datum/component/mob_feign_impairment/jitter + // this must be set + registered_type = /datum/component/mob_feign_impairment/jitter + feign_impairment_type = /datum/feign_impairment/jitter + +/datum/component/mob_feign_impairment/jitter/RegisterWithParent() + . = ..() + // shitcode but whatever + var/mob/mob_parent = parent + mob_parent.make_jittery(0) diff --git a/code/datums/components/mobs/mob_self_horizontal_inversion.dm b/code/datums/components/mobs/mob_self_horizontal_inversion.dm index 79df9ca7c29e..fc85738cf3e9 100644 --- a/code/datums/components/mobs/mob_self_horizontal_inversion.dm +++ b/code/datums/components/mobs/mob_self_horizontal_inversion.dm @@ -15,6 +15,7 @@ /datum/component/mob_self_horizontal_inversion/RegisterWithParent() . = ..() RegisterSignal(parent, COMSIG_MOVABLE_BASE_TRANSFORM, PROC_REF(alter_base_transform)) + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) var/mob/target = parent var/matrix/to_apply = target.transform to_apply.Scale(-1, 1) @@ -23,6 +24,7 @@ /datum/component/mob_self_horizontal_inversion/UnregisterFromParent() . = ..() UnregisterSignal(parent, COMSIG_MOVABLE_BASE_TRANSFORM) + UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) var/mob/target = parent var/matrix/to_apply = target.transform to_apply.Scale(-1, 1) @@ -31,3 +33,7 @@ /datum/component/mob_self_horizontal_inversion/proc/alter_base_transform(datum/source, matrix/applying) SIGNAL_HANDLER applying.Scale(-1, 1) + +/datum/component/mob_self_horizontal_inversion/proc/on_move(datum/source) + SIGNAL_HANDLER + qdel(src) diff --git a/code/datums/components/mobs/mob_self_vertical_inversion.dm b/code/datums/components/mobs/mob_self_vertical_inversion.dm new file mode 100644 index 000000000000..8bdec05ff5f3 --- /dev/null +++ b/code/datums/components/mobs/mob_self_vertical_inversion.dm @@ -0,0 +1,40 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +/** + * Component added to a mob by the mob themselves to invert themselves vertically. + */ +/datum/component/mob_self_vertical_inversion + registered_type = /datum/component/mob_self_vertical_inversion + +/datum/component/mob_self_vertical_inversion/Initialize() + if(!ismob(parent)) + return COMPONENT_INCOMPATIBLE + return ..() + +/datum/component/mob_self_vertical_inversion/RegisterWithParent() + . = ..() + // todo: allow it if they're being moved by an external source; MOB_SLEFMOVE? + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) + RegisterSignal(parent, COMSIG_MOVABLE_BASE_TRANSFORM, PROC_REF(alter_base_transform)) + var/mob/target = parent + var/matrix/to_apply = target.transform + to_apply.Scale(1, -1) + target.set_transform(to_apply) + +/datum/component/mob_self_vertical_inversion/UnregisterFromParent() + . = ..() + UnregisterSignal(parent, COMSIG_MOVABLE_BASE_TRANSFORM) + UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) + var/mob/target = parent + var/matrix/to_apply = target.transform + to_apply.Scale(1, -1) + target.set_transform(to_apply) + +/datum/component/mob_self_vertical_inversion/proc/alter_base_transform(datum/source, matrix/applying) + SIGNAL_HANDLER + applying.Scale(1, -1) + +/datum/component/mob_self_vertical_inversion/proc/on_move(datum/source) + SIGNAL_HANDLER + qdel(src) diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/costumes.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/costumes.dm index 782a2e66f39f..25ab2126413a 100644 --- a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/costumes.dm +++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/costumes.dm @@ -187,7 +187,7 @@ /obj/item/clothing/under/permit, /obj/item/clothing/under/vox/vox_casual, /obj/item/clothing/under/vox/vox_robes, - /obj/item/clothing/under/harness, + /obj/item/clothing/under/gear_harness, /obj/item/clothing/under/skirt/loincloth, /obj/item/clothing/gloves/vox, ) @@ -345,7 +345,7 @@ /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen/sleeveless, /obj/item/clothing/under/pants/chaps, /obj/item/clothing/under/pants/chaps/black, - /obj/item/clothing/under/harness, + /obj/item/clothing/under/gear_harness, /obj/item/clothing/shoes/laceup/brown, /obj/item/clothing/shoes/boots/jungle, /obj/item/clothing/shoes/boots/jackboots, diff --git a/code/game/objects/items-inventory-rendering.dm b/code/game/objects/items-inventory-rendering.dm index d28e70515cc5..a0e8fc2d44f7 100644 --- a/code/game/objects/items-inventory-rendering.dm +++ b/code/game/objects/items-inventory-rendering.dm @@ -472,7 +472,7 @@ var/mob/living/carbon/human/H = ishuman(M)? M : null var/datum/inventory_slot/slot_meta if(isnull(slot_or_id)) - slot_or_id = worn_slot + slot_or_id = inv_slot_or_index if(isnum(slot_or_id)) slot_meta = resolve_inventory_slot((slot_or_id % 2)? /datum/inventory_slot/abstract/hand/left : /datum/inventory_slot/abstract/hand/right) else diff --git a/code/game/objects/items/gifts.dm b/code/game/objects/items/gifts.dm index 2c762e45b575..af41f9f6049e 100644 --- a/code/game/objects/items/gifts.dm +++ b/code/game/objects/items/gifts.dm @@ -77,7 +77,6 @@ GLOBAL_LIST_EMPTY(possible_gifts) return gift_type - /obj/item/a_gift/anything name = "christmas gift" desc = "It could be anything!" diff --git a/code/game/objects/items/melee/types/transforming/energy/saber.dm b/code/game/objects/items/melee/types/transforming/energy/saber.dm index 48e1eb491400..60f6d1a5fad4 100644 --- a/code/game/objects/items/melee/types/transforming/energy/saber.dm +++ b/code/game/objects/items/melee/types/transforming/energy/saber.dm @@ -83,6 +83,7 @@ armor_penetration = 35 colorable = TRUE attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + worn_render_flags = WORN_RENDER_SLOT_NO_RENDER | WORN_RENDER_INHAND_ONE_FOR_ALL passive_parry = /datum/passive_parry{ parry_chance_default = 60; diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 13af5cc22f98..b36e45205058 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -64,5 +64,6 @@ gender = NEUTER uses_charge = 1 charge_costs = list(500) - stacktype = /obj/item/stack/rods + stack_type = /obj/item/stack/rods + stacktype_legacy = /obj/item/stack/rods no_variants = TRUE diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 4d4b4b511350..6aa51a10242d 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -36,16 +36,19 @@ origin_tech = list(TECH_MATERIAL = 1) icon = 'icons/obj/stacks.dmi' item_flags = ITEM_CAREFUL_BLUDGEON | ITEM_ENCUMBERS_WHILE_HELD + + /// Always create this type when splitting, instead of our own type. + var/split_type + /// The type we actually are. This is what is used when things try to consume an amount of us. + /// * null = this current type + var/stack_type + var/singular_name var/amount = 1 /// See stack recipes initialisation, param "max_res_amount" must be equal to this max_amount. var/max_amount = 50 /// Determines whether different stack types can merge. - var/stacktype - /// enforce a certain type when splitting; useful if you have an infinite stack you don't want to be split into another one - var/split_type - /// Used when directly applied to a turf. - var/build_type = null + var/stacktype_legacy var/uses_charge = 0 var/list/charge_costs = null var/list/datum/matter_synth/synths = null @@ -70,8 +73,8 @@ explicit_recipes = typelist(NAMEOF(src, explicit_recipes), generate_explicit_recipes()) if(new_amount != null) amount = new_amount - if(!stacktype) - stacktype = type + if(!stacktype_legacy) + stacktype_legacy = type . = ..() if(merge) for(var/obj/item/stack/S in loc) @@ -189,7 +192,7 @@ return FALSE if((strict_color_stacking || other.strict_color_stacking) && (color != other.color)) return FALSE - return other.stacktype == stacktype + return other.stacktype_legacy == stacktype_legacy /obj/item/stack/proc/use(used) if (!can_use(used)) @@ -424,3 +427,25 @@ return FALSE update_icon() return TRUE + +//* Types *// + +/** + * Get our 'use as type'. + */ +/obj/item/stack/proc/get_use_as_type() + return stack_type || type + +/** + * We can be used as a specific stack type. + */ +/obj/item/stack/proc/can_use_as_type(path) + return stack_type == path || type == path + +/** + * Can merge into a type + * + * todo: use this instead of raw stacktype_legacy checks + */ +/obj/item/stack/proc/can_merge_into_type(path) + CRASH("Not implemented.") diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 3f0955fd54bc..b0b1e5db320d 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -87,8 +87,8 @@ desc = "A device that makes wood floor tiles." uses_charge = 1 charge_costs = list(250) - stacktype = /obj/item/stack/tile/wood - build_type = /obj/item/stack/tile/wood + stack_type = /obj/item/stack/tile/wood + stacktype_legacy = /obj/item/stack/tile/wood /* * Carpets @@ -298,8 +298,8 @@ materials_base = null uses_charge = 1 charge_costs = list(250) - stacktype = /obj/item/stack/tile/floor - build_type = /obj/item/stack/tile/floor + stack_type = /obj/item/stack/tile/floor + stacktype_legacy = /obj/item/stack/tile/floor /obj/item/stack/tile/floor/sandstone name = "sandstone tile" @@ -353,8 +353,8 @@ desc = "A device that makes roofing tiles." uses_charge = 1 charge_costs = list(250) - stacktype = /obj/item/stack/tile/roofing - build_type = /obj/item/stack/tile/roofing + stack_type = /obj/item/stack/tile/roofing + stacktype_legacy = /obj/item/stack/tile/roofing /obj/item/stack/tile/roofing/wood name = "wood roofing" diff --git a/code/game/objects/random/maintenance.dm b/code/game/objects/random/maintenance.dm index a2613ba2563f..244aa5293f50 100644 --- a/code/game/objects/random/maintenance.dm +++ b/code/game/objects/random/maintenance.dm @@ -97,7 +97,7 @@ something, make sure it's not in one of the other lists.*/ prob(4);/obj/item/clothing/under/color/grey, prob(2);/obj/item/clothing/under/syndicate/tacticool, prob(2);/obj/item/clothing/under/pants/camo, - prob(1);/obj/item/clothing/under/harness, + prob(1);/obj/item/clothing/under/gear_harness, prob(1);/obj/item/clothing/under/tactical, prob(3);/obj/item/clothing/accessory/storage/webbing, prob(3);/obj/item/camera_assembly, diff --git a/code/game/objects/structures/loot_piles.dm b/code/game/objects/structures/loot_piles.dm index bde9d888de8f..981c8140a1f8 100644 --- a/code/game/objects/structures/loot_piles.dm +++ b/code/game/objects/structures/loot_piles.dm @@ -192,7 +192,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh /obj/item/clothing/under/color/grey, /obj/item/clothing/under/syndicate/tacticool, /obj/item/clothing/under/pants/camo, - /obj/item/clothing/under/harness, + /obj/item/clothing/under/gear_harness, /obj/item/clothing/accessory/storage/webbing, /obj/item/spacecash/c1, /obj/item/spacecash/c10, diff --git a/code/game/objects/structures/trash_pile.dm b/code/game/objects/structures/trash_pile.dm index 7532fc01b19c..eab27406c2ca 100644 --- a/code/game/objects/structures/trash_pile.dm +++ b/code/game/objects/structures/trash_pile.dm @@ -202,7 +202,7 @@ prob(1);/obj/item/clothing/shoes/syndigaloshes, prob(1);/obj/item/clothing/suit/bio_suit/general, prob(1);/obj/item/clothing/suit/space/emergency, - prob(1);/obj/item/clothing/under/harness, + prob(1);/obj/item/clothing/under/gear_harness, prob(1);/obj/item/clothing/under/tactical, prob(1);/obj/item/clothing/suit/armor/material/makeshift, prob(1);/obj/item/flashlight/glowstick/orange, diff --git a/code/game/objects/systems/storage/storage.dm b/code/game/objects/systems/storage/storage.dm index 32f9799907d3..204b0f90876d 100644 --- a/code/game/objects/systems/storage/storage.dm +++ b/code/game/objects/systems/storage/storage.dm @@ -284,7 +284,6 @@ return action_mode_switch = new(src) action_mode_switch.button_additional_only = TRUE - action_mode_switch.button_additional_overlay = parent /datum/object_system/storage/proc/grant_buttons(mob/wearer) ensure_buttons() @@ -1145,6 +1144,17 @@ /datum/action/storage_gather_mode name = "Switch Gather Mode" +/datum/action/storage_gather_mode/pre_render_hook() + if(istype(target, /datum/object_system/storage)) + var/datum/object_system/storage/storage_datum = target + var/obj/storage_target = storage_datum.parent + var/image/generated = new + generated.appearance = storage_target + generated.layer = FLOAT_LAYER + generated.plane = FLOAT_PLANE + button_additional_overlay = generated + return ..() + //? Hooks /obj/proc/object_storage_opened(mob/user) diff --git a/code/game/rendering/legacy/radial.dm b/code/game/rendering/legacy/radial.dm index 0cb587ad8654..6d37d8f09e08 100644 --- a/code/game/rendering/legacy/radial.dm +++ b/code/game/rendering/legacy/radial.dm @@ -252,6 +252,10 @@ GLOBAL_LIST_EMPTY(radial_menus) //! perform fixup I.plane = FLOAT_PLANE I.layer = FLOAT_LAYER + I.maptext = MAPTEXT(I.maptext) + I.maptext_width = 64 + I.maptext_height = 32 + I.maptext_y = 32 //! end choices_icons[id] = I else diff --git a/code/game/rendering/mob.dm b/code/game/rendering/mob.dm index bfcd07a224dd..b49319562e29 100644 --- a/code/game/rendering/mob.dm +++ b/code/game/rendering/mob.dm @@ -24,6 +24,8 @@ client.global_planes.apply(client) client.update_clickcatcher() client.using_perspective?.reload(client, TRUE) + client.actor_huds.reassert_onto_owner() + client.action_drawer.reassert_screen() INVOKE_ASYNC(client, TYPE_PROC_REF(/client, init_viewport_blocking)) reload_fullscreen() hud_used?.reorganize_alerts() diff --git a/code/game/turfs/simulated/floor/floor-construction.dm b/code/game/turfs/simulated/floor/floor-construction.dm index 319c589de13a..d0a37d37eacb 100644 --- a/code/game/turfs/simulated/floor/floor-construction.dm +++ b/code/game/turfs/simulated/floor/floor-construction.dm @@ -22,12 +22,17 @@ using_stack = with_mat_stack else var/obj/item/stack/with_stack = with_item - possible = RSflooring.build_item_lookup[with_stack.type] + possible = RSflooring.build_item_lookup[with_stack.get_use_as_type()] has_amount = with_stack.amount using_stack = with_stack - if(!length(possible)) + if(!possible) return FALSE - var/datum/prototype/flooring/trying_to_make + var/datum/prototype/flooring/trying_to_make = possible + if(force_flooring && !(trying_to_make.id == force_flooring || trying_to_make.type == force_flooring)) + return FALSE + // todo: multiple possible floorings are disabled for UI/UX reasons. put the selector on the stack + // with client-local-state sometime, and re-enable it. + /* if(force_flooring) for(var/datum/prototype/flooring/potential as anything in possible) if(potential.type == force_flooring || potential.id == force_flooring) @@ -42,16 +47,24 @@ else var/list/built_choices = list() var/list/pick_choices = list() + var/matrix/three_fourths_size = matrix() + three_fourths_size.Scale(3 / 4, 3 / 4) for(var/datum/prototype/flooring/potential as anything in possible) built_choices[potential.name] = potential var/image/preview = image(potential.icon, potential.icon_base) + preview.transform = three_fourths_size preview.maptext = MAPTEXT_CENTER(potential.name) preview.maptext_width = 64 - pick_choices[potential.name] = preview + var/use_name = potential.name + var/notch = 1 + while(pick_choices[use_name]) + use_name = "[potential.name] ([notch++])" + pick_choices[use_name] = preview var/choice_name = show_radial_menu(e_args.initiator, src, pick_choices) trying_to_make = built_choices[choice_name] if(!trying_to_make) return FALSE + */ if(trying_to_make.build_cost > has_amount) e_args.chat_feedback(SPAN_WARNING("You require at least [trying_to_make.build_cost] [with_item.name] to lay down those [trying_to_make.descriptor]")) return FALSE diff --git a/code/game/turfs/simulated/flooring/flooring.dm b/code/game/turfs/simulated/flooring/flooring.dm index 2e846cbf7142..b8e70f205cf4 100644 --- a/code/game/turfs/simulated/flooring/flooring.dm +++ b/code/game/turfs/simulated/flooring/flooring.dm @@ -71,6 +71,11 @@ /// /// * Supports /obj/item/stack /// * Supports /datum/material + /// + /// todo: as of right now, only a single floor can ever be allowed to be built in this way + /// for a given stack or material id. + /// at some point, we need to investigate having multiple possibilities + /// todo: remove 'subtype build_type suppression' from New() var/build_type /// Amount of material needed to build. var/build_cost = 1 @@ -162,6 +167,13 @@ dismantle_tool = dismantle_tool ? list(dismantle_tool) : list() if(!islist(destroy_tool)) destroy_tool = destroy_tool ? list(destroy_tool) : list() + // subtype build suppression + // erase our build_type if our parent type defaults to it + // this way only the first declaration on the tree of a certain build type applies + if(ispath(parent_type, /datum/prototype/flooring)) + var/datum/prototype/flooring/parent = parent_type + if(initial(parent.build_type) == build_type) + build_type = null /datum/prototype/flooring/proc/get_flooring_overlay(cache_key, base_state, icon_dir = 0, layer = FLOOR_DECAL_LAYER) if(!flooring_cache[cache_key]) diff --git a/code/game/turfs/simulated/flooring/flooring_types.dm b/code/game/turfs/simulated/flooring/flooring_types.dm index 5fa2358958ed..e92d3e9be392 100644 --- a/code/game/turfs/simulated/flooring/flooring_types.dm +++ b/code/game/turfs/simulated/flooring/flooring_types.dm @@ -250,7 +250,6 @@ icon_base = "asteroidfloor" has_damage_range = null flooring_flags = TURF_REMOVE_CROWBAR - build_type = /obj/item/stack/tile/floor/steel /datum/prototype/flooring/tiling/white name = "floor" @@ -276,12 +275,10 @@ /datum/prototype/flooring/tiling/hydro name = "floor" icon_base = "hydrofloor" - build_type = /obj/item/stack/tile/floor/steel /datum/prototype/flooring/tiling/neutral name = "floor" icon_base = "neutral" - build_type = /obj/item/stack/tile/floor/steel /datum/prototype/flooring/tiling/freezer name = "floor" diff --git a/code/modules/artwork/crayon_decal_meta.dm b/code/modules/artwork/crayon_decal_meta.dm index fc1051634f79..3b9227a8eb19 100644 --- a/code/modules/artwork/crayon_decal_meta.dm +++ b/code/modules/artwork/crayon_decal_meta.dm @@ -74,11 +74,17 @@ GLOBAL_LIST_EMPTY(crayon_data_lookup_by_string_icon_path) var/centering_pixel_y /datum/crayon_decal_meta/proc/tgui_crayon_data() + //! uh oh! byond alert! !// + //! associative lists are contagious and we really need a flat list or tgui crashes! !// + //! manually flatten it. !// + var/list/i_really_dislike_byond = list() + for(var/key in states) + i_really_dislike_byond += key + return list( "name" = name, - "states" = states, + "states" = i_really_dislike_byond, "width" = width, "height" = height, "id" = id, ) - diff --git a/code/modules/artwork/items/crayon.dm b/code/modules/artwork/items/crayon.dm index 30acd4e54bcc..9cc2db193432 100644 --- a/code/modules/artwork/items/crayon.dm +++ b/code/modules/artwork/items/crayon.dm @@ -10,6 +10,7 @@ pen_color = "#FF0000" //RGB clickable = FALSE + // todo: reorganize vars /// color name var/crayon_color_name = "red" /// what we show as; e.g. 'crayon', 'marker' @@ -35,6 +36,7 @@ /// can eat var/crayon_edible = TRUE + // todo: per user this so you can't see what someone else was about to do lmao /// currently picked datapack string path var/current_graffiti_icon_string_path /// currently picked datapack icon state diff --git a/code/modules/clothing/accessories/halo.dm b/code/modules/clothing/accessories/halo.dm index de07cf47854d..6ea632337d77 100644 --- a/code/modules/clothing/accessories/halo.dm +++ b/code/modules/clothing/accessories/halo.dm @@ -16,12 +16,12 @@ generate_styles() AddElement(/datum/element/clothing/dynamic_recolor) -/obj/item/clothing/accessory/halo_projector/available_styles(mob/user) +/obj/item/clothing/accessory/halo_projector/style_repick_query(mob/user) . = ..() for(var/halo_name in global_halo_styles) .[halo_name] = global_halo_styles[halo_name] -/obj/item/clothing/accessory/halo_projector/set_style(style, mob/user) +/obj/item/clothing/accessory/halo_projector/style_repick_set(style, mob/user) . = ..() if(.) return diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 8d2de2bcc9d7..e76f2ed187b3 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -231,25 +231,29 @@ else icon = initial(icon) -//? styles +//* Style Repicking *// /** * returns available styles as name = state or image or mutable_appearance */ -/obj/item/clothing/proc/available_styles(mob/user) +/obj/item/clothing/proc/style_repick_query(mob/user) + SHOULD_NOT_SLEEP(TRUE) . = list() /** * sets us to a specific style + * + * * do not update_icon() or update_worn_icon() in here, we do that automatically. */ -/obj/item/clothing/proc/set_style(style, mob/user) +/obj/item/clothing/proc/style_repick_set(style, mob/user) + SHOULD_NOT_SLEEP(TRUE) return FALSE /** * prompts a user to pick style */ -/obj/item/clothing/proc/pick_style(mob/user) - var/list/available = available_styles(user) +/obj/item/clothing/proc/style_repick_open(mob/user) + var/list/available = style_repick_query(user) var/list/assembled = list() for(var/name in available) var/using = available[name] @@ -272,9 +276,16 @@ var/choice = show_radial_menu(user, loc == user ? user : src, assembled, radius = 48) if(isnull(choice)) return - set_style(choice, user) - -/obj/item/clothing/verb/pick_style_verb() + if(!style_repick_set(choice, user)) + return + // todo: logging API + to_chat(user, SPAN_NOTICE("You set [src]'s style to [choice].")) + log_game("[key_name(user)] set [src]'s style to [choice]") + update_icon() + update_worn_icon() + +// todo: context menu this instead +/obj/item/clothing/verb/style_repick_verb() set name = "Set Worn Style" set category = VERB_CATEGORY_IC set desc = "Wear this piece of clothing in a different style." @@ -284,4 +295,4 @@ usr.action_feedback(SPAN_WARNING("You can't do that right now!"), src) return - pick_style(usr) + style_repick_open(usr) diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index f7ce6de2bdfd..1110856226ed 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -96,7 +96,7 @@ //? Styles -/obj/item/clothing/under/available_styles(mob/user) +/obj/item/clothing/under/style_repick_query(mob/user) . = list() var/old_roll = worn_rolled_down var/old_sleeves = worn_rolled_sleeves @@ -114,7 +114,7 @@ worn_rolled_down = old_roll worn_rolled_sleeves = old_sleeves -/obj/item/clothing/under/set_style(style, mob/user) +/obj/item/clothing/under/style_repick_set(style, mob/user) . = ..() if(.) return diff --git a/code/modules/clothing/under/gear_harness.dm b/code/modules/clothing/under/gear_harness.dm new file mode 100644 index 000000000000..1b47733b5d5e --- /dev/null +++ b/code/modules/clothing/under/gear_harness.dm @@ -0,0 +1,25 @@ +/obj/item/clothing/under/gear_harness + name = "gear harness" + desc = "How... minimalist." + icon_state = "gear_harness" + body_cover_flags = NONE + +/obj/item/clothing/under/gear_harness/style_repick_query(mob/user) + . = ..() + var/image/normal_image = image(icon, "gear_harness") + normal_image.maptext = "normal" + .["normal"] = normal_image + var/image/invisible_image = image('icons/system/blank_32x32.dmi', "") + invisible_image.maptext = "invisible" + .["invisible"] = invisible_image + +/obj/item/clothing/under/gear_harness/style_repick_set(style, mob/user) + switch(style) + if("normal") + worn_render_flags = initial(worn_render_flags) + return TRUE + if("invisible") + worn_render_flags |= WORN_RENDER_SLOT_NO_RENDER + return TRUE + else + return FALSE diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 88fc5e8f7790..ab14cd390f53 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -724,12 +724,6 @@ icon_state = "cuttop_red" item_state_slots = list(SLOT_ID_RIGHT_HAND = "red", SLOT_ID_LEFT_HAND = "red") -/obj/item/clothing/under/harness - name = "gear harness" - desc = "How... minimalist." - icon_state = "gear_harness" - body_cover_flags = 0 - /obj/item/clothing/under/dress/white name = "white wedding dress" desc = "A fancy white dress with a blue underdress." diff --git a/code/modules/frames/frame_step.dm b/code/modules/frames/frame_step.dm index 0c3c6c35119a..5b40f8dc3cb8 100644 --- a/code/modules/frames/frame_step.dm +++ b/code/modules/frames/frame_step.dm @@ -30,6 +30,11 @@ var/request_type /// ergo: stack type, item type, tool function, etc. what this is depends on [step_type] /// limited autodetection is allowed. + /// + /// allowed: + /// * /datum/prototype/material path + /// * /obj/item/stack path + /// * /obj/item path var/request /// * stacks: amount /// * items: amount; if 0, we just apply the item to it @@ -157,11 +162,12 @@ /datum/frame_step/proc/valid_interaction(datum/event_args/actor/actor, obj/item/using_tool, datum/frame2/frame_datum, obj/structure/frame2/frame) switch(request_type) if(FRAME_REQUEST_TYPE_INTERACT) - return TRUE + return isnull(using_tool) if(FRAME_REQUEST_TYPE_ITEM) return using_tool?.type == request if(FRAME_REQUEST_TYPE_STACK) - return using_tool?.type == request + var/obj/item/stack/using_stack = using_tool + return using_stack.can_use_as_type(request) if(FRAME_REQUEST_TYPE_PROC) return FALSE // override this proc if(FRAME_REQUEST_TYPE_TOOL) diff --git a/code/modules/frames/types/fire_alarm.dm b/code/modules/frames/types/fire_alarm.dm index 03f5797e8e8b..c35f319481f4 100644 --- a/code/modules/frames/types/fire_alarm.dm +++ b/code/modules/frames/types/fire_alarm.dm @@ -46,7 +46,7 @@ AUTO_FRAME_DATUM(/datum/frame2/fire_alarm, fire_alarm, 'icons/machinery/fire_ala steps = list( /datum/frame_step{ request = /obj/item/stack/cable_coil; - name = "unsecure circuit"; + name = "wire circuit"; request_amount = 1; stage = "wired"; direction = TOOL_DIRECTION_FORWARDS; diff --git a/code/modules/loadout/loadout_xeno.dm b/code/modules/loadout/loadout_xeno.dm index 3e961c1bb9d0..94105322a1b3 100644 --- a/code/modules/loadout/loadout_xeno.dm +++ b/code/modules/loadout/loadout_xeno.dm @@ -1044,4 +1044,4 @@ /datum/loadout_entry/xeno/uniform name = "Generic - Gear Harness" - path = /obj/item/clothing/under/harness + path = /obj/item/clothing/under/gear_harness diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm index 8fea3c15a165..2684f9c1c401 100644 --- a/code/modules/materials/material_sheets.dm +++ b/code/modules/materials/material_sheets.dm @@ -51,7 +51,7 @@ pixel_x = rand(0,4)-4 pixel_y = rand(0,4)-4 - stacktype = src.material.stack_type + stacktype_legacy = src.material.stack_type if(islist(src.material.stack_origin_tech)) origin_tech = src.material.stack_origin_tech.Copy() diff --git a/code/modules/materials/material_synth.dm b/code/modules/materials/material_synth.dm index ad5b16c35ecf..8acd60ee9c25 100644 --- a/code/modules/materials/material_synth.dm +++ b/code/modules/materials/material_synth.dm @@ -15,25 +15,31 @@ /obj/item/stack/material/cyborg/plastic icon_state = "sheet-plastic" + stack_type = /obj/item/stack/material/plastic material = /datum/prototype/material/plastic /obj/item/stack/material/cyborg/steel icon_state = "sheet-metal" + stack_type = /obj/item/stack/material/steel material = /datum/prototype/material/steel /obj/item/stack/material/cyborg/plasteel icon_state = "sheet-plasteel" + stack_type = /obj/item/stack/material/plasteel material = /datum/prototype/material/plasteel /obj/item/stack/material/cyborg/wood icon_state = "sheet-wood" + stack_type = /obj/item/stack/material/wood material = /datum/prototype/material/wood_plank /obj/item/stack/material/cyborg/glass icon_state = "sheet-glass" + stack_type = /obj/item/stack/material/glass material = /datum/prototype/material/glass /obj/item/stack/material/cyborg/glass/reinforced icon_state = "sheet-rglass" + stack_type = /obj/item/stack/material/glass/reinforced material = /datum/prototype/material/glass/reinforced charge_costs = list(500, 1000) diff --git a/code/modules/mining/tools/vertibore.dm b/code/modules/mining/tools/vertibore.dm index eb2319b91713..692b1ed1d89b 100644 --- a/code/modules/mining/tools/vertibore.dm +++ b/code/modules/mining/tools/vertibore.dm @@ -27,7 +27,7 @@ if(cell) to_chat(user, "\The [src] already has \a [cell] installed.") return - if(!user.attempt_insert_item_for_installation(cell, src)) + if(!user.attempt_insert_item_for_installation(thing, src)) return cell = thing playsound(loc, 'sound/machines/click.ogg', 10, 1) diff --git a/code/modules/mob/animations.dm b/code/modules/mob/animations.dm index 24ea11d5c459..e9facbae81f4 100644 --- a/code/modules/mob/animations.dm +++ b/code/modules/mob/animations.dm @@ -46,18 +46,21 @@ note dizziness decrements automatically in the mob's Life() proc. jitteriness = min(1000, jitteriness + amount) // store what will be new value // clamped to max 1000 - if(jitteriness > 100 && !is_jittery) + + var/effective_jitteriness = get_effective_impairment_power_jitter() + if(effective_jitteriness > 100 && !is_jittery) spawn(0) jittery_process() - /mob/proc/jittery_process() if(IS_DEAD(src))//Dead people dont twitch around return is_jittery = 1 - while(jitteriness > 100) - var/amplitude = min(4, jitteriness / 100) + var/effective_jitteriness = get_effective_impairment_power_jitter() + while(effective_jitteriness > 100) + effective_jitteriness = get_effective_impairment_power_jitter() + var/amplitude = min(4, effective_jitteriness / 100) pixel_x = get_managed_pixel_x() + rand(-amplitude, amplitude) pixel_y = get_managed_pixel_y() + rand(-amplitude/3, amplitude/3) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 8d423b44b084..9a5244888f5a 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -273,11 +273,12 @@ //Jitters if(is_jittery) - if(jitteriness >= 300) + var/effective_jitteriness = get_effective_impairment_power_jitter() + if(effective_jitteriness >= 300) . += SPAN_DANGER("[T.He] [T.is] convulsing violently!") - else if(jitteriness >= 200) + else if(effective_jitteriness >= 200) . += SPAN_WARNING("[T.He] [T.is] extremely jittery.") - else if(jitteriness >= 100) + else if(effective_jitteriness >= 100) . += SPAN_WARNING("[T.He] [T.is] twitching ever so slightly.") //splints diff --git a/code/modules/mob/living/carbon/human/human-defense.dm b/code/modules/mob/living/carbon/human/human-defense.dm index dd8ec5289309..20dcc1ab071c 100644 --- a/code/modules/mob/living/carbon/human/human-defense.dm +++ b/code/modules/mob/living/carbon/human/human-defense.dm @@ -33,7 +33,7 @@ /mob/living/carbon/human/slip_act(slip_class, source, hard_strength, soft_strength, suppressed) var/footcoverage_check = length(inventory.query_coverage(FEET)) - var/obj/item/shoes = inventory.get_slot(/datum/inventory_slot/inventory/shoes) + var/obj/item/shoes = inventory.get_slot_single(/datum/inventory_slot/inventory/shoes) if(((species.species_flags & NO_SLIP) && !footcoverage_check) || (shoes && (shoes.clothing_flags & NOSLIP))) //Footwear negates a species' natural traction. return 0 return ..() diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 251cfc5f004e..d5e89635d878 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -66,7 +66,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) /mob/living/carbon/human/apply_transform(matrix/to_apply) var/anim_time = CHECK_MOBILITY(src, MOBILITY_CAN_STAND)? 3 : 1 - animate(src, transform = to_apply, time = anim_time, flags = ANIMATION_PARALLEL) + animate(src, transform = to_apply, time = anim_time, flags = ANIMATION_PARALLEL | ANIMATION_LINEAR_TRANSFORM) update_icon_special() //May contain transform-altering things update_ssd_overlay() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 62cc2e737e8c..069d93070efe 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -605,7 +605,7 @@ default behaviour is: return applying /mob/living/apply_transform(matrix/to_apply) - animate(src, transform = to_apply, time = 1 SECONDS) + animate(src, transform = to_apply, time = 1 SECONDS, flags = ANIMATION_LINEAR_TRANSFORM | ANIMATION_PARALLEL) update_ssd_overlay() // This handles setting the client's color variable, which makes everything look a specific color. diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 16d78b94b22e..71ebc1b87231 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -109,11 +109,11 @@ var/list/channel_to_radio_key = new verb = pick("yells","roars","hollers") whispering = 0 . = 1 - if(slurring) + if(get_effective_impairment_power_slurring()) message = slur(message) verb = pick("slobbers","slurs") . = 1 - if(stuttering) + if(get_effective_impairment_power_stutter()) message = stutter(message) verb = pick("stammers","stutters") . = 1 diff --git a/code/modules/mob/mob-status_procs.dm b/code/modules/mob/mob-status_procs.dm new file mode 100644 index 000000000000..83935e06c82e --- /dev/null +++ b/code/modules/mob/mob-status_procs.dm @@ -0,0 +1,36 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2025 Citadel Station Developers *// + +//* Impairments *// + +// hey! listen +// if you're thinking about find-replacing checks for the var with this +// well fucking don't +// +// the reason this is separate from main vars for these things +// is because people keep abusing vars to implement features that have a +// ton of unintended side effects +// +// these should only be used for the actual effects; it is **not** +// allowed to use for any other effects like xenochimera feral, +// traumatic shock, etc + +// todo: /datum/mob_impairment ? + +/mob/proc/get_effective_impairment_power_slurring() + . = slurring + var/datum/component/mob_feign_impairment/slurring/feigned = GetComponent(/datum/component/mob_feign_impairment/slurring) + if(feigned) + . = max(., feigned.power) + +/mob/proc/get_effective_impairment_power_jitter() + . = jitteriness + var/datum/component/mob_feign_impairment/jitter/feigned = GetComponent(/datum/component/mob_feign_impairment/jitter) + if(feigned) + . = max(., feigned.power) + +/mob/proc/get_effective_impairment_power_stutter() + . = stuttering + var/datum/component/mob_feign_impairment/stutter/feigned = GetComponent(/datum/component/mob_feign_impairment/stutter) + if(feigned) + . = max(., feigned.power) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 9e30f2992a78..c2021320c784 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1,3 +1,8 @@ +/mob + //* Impairments *// + /// active feign_impairment types + /// * lazy list + var/list/impairments_feigned /** * Intialize a mob diff --git a/code/modules/mob/verbs/feign_impairment.dm b/code/modules/mob/verbs/feign_impairment.dm new file mode 100644 index 000000000000..dd7a3ab8ff45 --- /dev/null +++ b/code/modules/mob/verbs/feign_impairment.dm @@ -0,0 +1,105 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2025 Citadel Station Developers *// + +GLOBAL_LIST_INIT(feign_impairment_types, init_feign_impairment_types()) + +/proc/init_feign_impairment_types() + . = list() + var/list/component_collision_check = list() + for(var/datum/feign_impairment/path as anything in subtypesof(/datum/feign_impairment)) + if(initial(path.abstract_type) == path) + continue + var/datum/feign_impairment/instance = new path + if(component_collision_check[instance.component_type]) + stack_trace("collision between [component_collision_check[instance.component_type]:type] and [instance.type] on component type [instance.component_type]") + continue + component_collision_check[instance.component_type] = instance + .[path] = instance + +// todo: this is better than the old, but still a dumpster fire. impairments +// need to be datums so we can have a single tracking system +// and a single /datum/component/mob_feign_impairment +// to track everything, instead of this crap. + +/datum/feign_impairment + abstract_type = /datum/feign_impairment + var/name + var/adjective + var/component_type + var/power_min = 0 + var/power_max = 0 + +/datum/feign_impairment/slurring + name = "Slurring" + adjective = "slurring" + component_type = /datum/component/mob_feign_impairment/slurring + power_min = 10 + power_max = 500 + +/datum/feign_impairment/stutter + name = "Stuttering" + adjective = "stuttering" + component_type = /datum/component/mob_feign_impairment/stutter + power_min = 10 + power_max = 500 + +/datum/feign_impairment/jitter + name = "Jittering" + adjective = "jittering" + component_type = /datum/component/mob_feign_impairment/jitter + power_min = 10 + power_max = 2000 + +// todo: DECLARE_MOB_VERB +/mob/verb/feign_impairment() + set name = "Feign Impairment" + set category = VERB_CATEGORY_IC + set desc = "Pretend like you're slurring, stuttering, jittering, and more." + + var/list/name_to_type = list() + for(var/datum/feign_impairment/path as anything in subtypesof(/datum/feign_impairment)) + if(initial(path.abstract_type) == path) + continue + var/is_active = impairments_feigned?[path] + name_to_type["[initial(path.name)] (Currently: [is_active ? "Active" : "Inactive"])"] = path + + var/choice = tgui_input_list(src, "Choose an impairment to toggle.", "Feign Impairment", name_to_type) + if(!choice) + return + + var/path = name_to_type[choice] + var/new_active = !impairments_feigned?[path] + var/datum/feign_impairment/impairment = GLOB.feign_impairment_types[path] + + var/power + + if(new_active) + if(GetComponent(impairment.component_type)) + to_chat(src, SPAN_WARNING("You are already pretending to be [impairment.adjective].")) + return + power = tgui_input_number( + src, + "What power? ([impairment.power_min] - [impairment.power_max])", + "Feign Impairment", + impairment.power_min, + impairment.power_max, + impairment.power_min, + round_value = TRUE, + ) + else + if(!GetComponent(impairment.component_type)) + return + + // todo: better logging + log_game("[key_name(src)] toggled [impairment] to [new_active ?"on, with power [power]" : "off"]") + + if(new_active) + AddComponent(impairment.component_type, power) + else + qdel(GetComponent(impairment.component_type)) + + to_chat(src, SPAN_NOTICE("You are now [new_active ? "pretending" : "no longer pretending"] to be [impairment.adjective]. This will be automatically reset should you lose consciousness.")) + +/mob/proc/clear_feign_impairment() + QDEL_LIST_ASSOC_VAL(impairments_feigned) + impairments_feigned = null diff --git a/code/modules/mob/verbs/horizontal_invert_self.dm b/code/modules/mob/verbs/horizontal_invert_self.dm index 09adab8dbc59..57b55fd188f3 100644 --- a/code/modules/mob/verbs/horizontal_invert_self.dm +++ b/code/modules/mob/verbs/horizontal_invert_self.dm @@ -1,6 +1,7 @@ //* This file is explicitly licensed under the MIT license. *// //* Copyright (c) 2024 Citadel Station Developers *// +// todo: DECLARE_MOB_VERB /mob/verb/horizontal_invert_self() set name = "Invert Yourself (Horizontal)" set desc = "Mirror your sprite across the N-S axis." diff --git a/code/modules/mob/verbs/vertical_invert_self.dm b/code/modules/mob/verbs/vertical_invert_self.dm new file mode 100644 index 000000000000..9b179d98fe0d --- /dev/null +++ b/code/modules/mob/verbs/vertical_invert_self.dm @@ -0,0 +1,24 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2025 Citadel Station Developers *// + +// todo: DECLARE_MOB_VERB +/mob/verb/vertical_invert_self() + set name = "Invert Yourself (Vertical)" + set desc = "Mirror your sprite across the N-S axis." + set category = VERB_CATEGORY_IC + + // todo: remote control? mobs that don't allow it? + + if(TIMER_COOLDOWN_CHECK(src, CD_INDEX_MOB_VERB_INVERT_SELF)) + // todo: don't usr lol + to_chat(usr, SPAN_WARNING("You can't do that yet!")) + return + TIMER_COOLDOWN_START(src, CD_INDEX_MOB_VERB_INVERT_SELF, 0.5 SECONDS) + + log_game("[key_name(usr)] invoked vertical_invert_self on [key_name(src)].") + + var/datum/component/mob_self_vertical_inversion/inversion = GetComponent(/datum/component/mob_self_vertical_inversion) + if(inversion) + qdel(inversion) + else + AddComponent(/datum/component/mob_self_vertical_inversion) diff --git a/code/modules/multiz/atom-z_fall.dm b/code/modules/multiz/atom-z_fall.dm new file mode 100644 index 000000000000..6f06a7b9eb49 --- /dev/null +++ b/code/modules/multiz/atom-z_fall.dm @@ -0,0 +1,29 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2025 Citadel Station Developers *// + +/** + * Stops a thing from falling through this + * + * * If said thing is asking while falling, the first thing to return this will be what gets on_z_impacted'd. + * + * @params + * * victim - thing trying to fall through us + * * levels - levels fallen so far, preventing a fall in the first place has this at 0, breaking a falling object from z2 to z1's floor would be 1, etc. + * * fall_flags - see __DEFINES/mapping/multiz.dm + */ +/atom/proc/prevent_z_fall(atom/movable/victim, levels = 0, fall_flags) + return fall_flags + +/** + * Called when a thing falls onto us. + * + * * Only called if something is falling; if we prevent the fall in the first place, this never gets called + * + * @params + * * victim - thing trying to fall through us + * * levels - levels fallen so far, preventing a fall in the first place has this at 0, breaking a falling object from z2 to z1's floor would be 1, etc. + * * fall_flags - see __DEFINES/mapping/multiz.dm + * * direct_hit - we're the thing actually landed on. + */ +/atom/proc/on_z_impacted(atom/movable/victim, levels, fall_flags, direct_hit) + return fall_flags diff --git a/code/modules/multiz/atoms.dm b/code/modules/multiz/atom-z_move.dm similarity index 92% rename from code/modules/multiz/atoms.dm rename to code/modules/multiz/atom-z_move.dm index 5abbda59d9a8..bfafd6552c34 100644 --- a/code/modules/multiz/atoms.dm +++ b/code/modules/multiz/atom-z_move.dm @@ -1,5 +1,5 @@ //* This file is explicitly licensed under the MIT license. *// -//* Copyright (c) 2023 Citadel Station developers. *// +//* Copyright (c) 2025 Citadel Station Developers *// /** * returns if an atom can enter our tile from a multiz move diff --git a/code/modules/multiz/core.dm b/code/modules/multiz/core.dm index 5d16359cd4bb..fd8ce02a7375 100644 --- a/code/modules/multiz/core.dm +++ b/code/modules/multiz/core.dm @@ -1,5 +1,5 @@ //* This file is explicitly licensed under the MIT license. *// -//* Copyright (c) 2023 Citadel Station developers. *// +//* Copyright (c) 2025 Citadel Station Developers *// /** * This is the basic get multiz step. diff --git a/code/modules/multiz/falling.dm b/code/modules/multiz/falling.dm deleted file mode 100644 index 7e671e085d17..000000000000 --- a/code/modules/multiz/falling.dm +++ /dev/null @@ -1,15 +0,0 @@ -//* This file is explicitly licensed under the MIT license. *// -//* Copyright (c) 2023 Citadel Station developers. *// - -/** - * Stops a thing from falling through this - * - * If said thing is asking while falling, the first thing to return this will be what gets ZImpact'd. - * - * @params - * - victim - thing trying to fall through us - * - levels - levels fallen so far, preventing a fall in the first place has this at 0, breaking a falling object from z2 to z1's floor would be 1, etc. - * - fall_flags - see __DEFINES/mapping/multiz.dm - */ -/atom/proc/prevent_z_fall(atom/movable/victim, levels = 0, fall_flags) - return fall_flags diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index 907f3d5a4106..85479fe8b698 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -309,18 +309,12 @@ var/obj/structure/stairs/stairs = locate() in landing if(!stairs) // Now lets move there! - // todo: this should not use Move - if(!Move(landing)) + if(!forceMove(landing)) return 1 var/atom/A = find_fall_target(oldloc, landing) if(special_fall_handle(A) || !A || !A.check_z_impact(src)) return - var/mob/drop_mob = locate(/mob, landing) - if(drop_mob && !(drop_mob == src) && ismob(drop_mob) && isliving(drop_mob)) //Shitload of checks. This is because the game finds various ways to screw me over. - var/mob/living/drop_living = drop_mob - if(drop_living.dropped_onto(src)) - return fall_impact(A) else locationTransitForceMove(landing) @@ -343,6 +337,8 @@ // First hit objects in the turf! for(var/atom/movable/A in landing) + if(A.atom_flags & (ATOM_NONWORLD | ATOM_ABSTRACT)) + continue if(A != src && A.CheckFall(src)) return A @@ -360,7 +356,7 @@ // CheckFall landing.fall_impact(src) //! ## THE FALLING PROCS ### - +// todo: rework falling :/ /** * Called on everything that falling_atom might hit. @@ -375,6 +371,8 @@ * If you are hit: how is it handled. * Return TRUE if the generic fall_impact should be called. * Return FALSE if you handled it yourself or if there's no effect from hitting you. + * + * todo: this is a legacy proc */ /atom/proc/check_z_impact(atom/movable/falling_atom) return TRUE @@ -386,16 +384,19 @@ * damage_max is the largest amount of damage a thing (currently only mobs and mechs) will take from falling. * If silent is True, the proc won't play sound or give a message. * If planetary is True, it's harder to stop the fall damage. + * + * todo: rework everything lmao */ /atom/movable/proc/fall_impact(atom/hit_atom, damage_min = 0, damage_max = 10, silent = FALSE, planetary = FALSE) if(!silent) visible_message("\The [src] falls from above and slams into \the [hit_atom]!", "You hear something slam into \the [hit_atom].") for(var/atom/movable/A in src.contents) + if(A.atom_flags & (ATOM_NONWORLD | ATOM_ABSTRACT)) + continue A.fall_impact(hit_atom, damage_min, damage_max, silent = TRUE) for(var/mob/M in buckled_mobs) M.fall_impact(hit_atom, damage_min, damage_max, silent, planetary) - /// Take damage from falling and hitting the ground. /mob/living/fall_impact(atom/hit_atom, damage_min = 0, damage_max = 5, silent = FALSE, planetary = FALSE) var/turf/landing = get_turf(hit_atom) @@ -419,15 +420,15 @@ if(!silent) if(planetary) visible_message( - SPAN_USERDANGER("\A [src] falls out of the sky and crashes into \the [landing]!"), - SPAN_USERDANGER("You fall out of the sky and crash into \the [landing]!"), + SPAN_USERDANGER("\A [src] falls out of the sky and crashes into [landing]!"), + SPAN_USERDANGER("You fall out of the sky and crash into [landing]!"), SPAN_HEAR("You hear something slam into \the [landing]."), ) var/turf/T = get_turf(landing) explosion(T, 0, 1, 2) else visible_message( - SPAN_WARNING("\The [src] falls from above and slams into \the [landing]!"), + SPAN_WARNING("\The [src] falls from above and slams into [landing]!"), SPAN_DANGER("You fall off and hit \the [landing]!"), SPAN_HEAR("You hear something slam into \the [landing]."), ) @@ -437,7 +438,7 @@ // Hits 10 times, because apparently targeting individual limbs lets certain species survive the fall from atmosphere for(var/i = 1 to 10) adjustBruteLoss(rand(damage_min, damage_max)) - afflict_paralyze(20 * 4) + afflict_paralyze(8 SECONDS) update_health() /mob/living/carbon/human/fall_impact(atom/hit_atom, damage_min, damage_max, silent, planetary) @@ -563,12 +564,9 @@ var/turf/simulated/floor/ground = hit_atom ground.break_tile() - +// todo: rewrite this entire file /mob/CheckFall(atom/movable/falling_atom) return falling_atom.fall_impact(src) -//! I didn't feel like removing @silicons' check in handle_fall(). @Zandario -/mob/living/proc/dropped_onto(atom/hit_atom) - if(!isliving(hit_atom)) - return FALSE - return TRUE +/mob/observer/CheckFall(atom/movable/falling_atom) + return FALSE diff --git a/code/modules/multiz/turf-multiz_misc.dm b/code/modules/multiz/turf-multiz_misc.dm new file mode 100644 index 000000000000..6cfecc5af462 --- /dev/null +++ b/code/modules/multiz/turf-multiz_misc.dm @@ -0,0 +1,52 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2025 Citadel Station Developers *// + +// todo: redo +/turf/CheckFall(atom/movable/falling_atom) + if(!(mz_flags & MZ_OPEN_DOWN)) + return TRUE // impact! + return ..() + +//* lookups + +/turf/proc/above() + RETURN_TYPE(/turf) + return locate(x, y, SSmapping.cached_level_up[z]) + +/turf/proc/below() + RETURN_TYPE(/turf) + return locate(x, y, SSmapping.cached_level_down[z]) + +/** + * This is the basic get multiz step. + * It will not look across lateral transitions, only up/down. + */ +/turf/proc/vertical_step(dir) + RETURN_TYPE(/turf) + if((dir & (UP|DOWN)) == 0) + return get_step(src, dir) + else if(dir & UP) + return get_step(locate(x, y, SSmapping.cached_level_up[z]), dir & ~(UP)) + else if(dir & DOWN) + return get_step(locate(x, y, SSmapping.cached_level_down[z]), dir & ~(DOWN)) + CRASH("how did we get here?") + +/** + * Basic multiz get dir + * Will not look across lateral transitions, only directly up/down. + */ +/turf/proc/vertical_dir(turf/other) + if(other.z == z) + return get_dir(src, other) + else if(other.z == SSmapping.cached_level_up[z]) + return get_dir(src, other) | UP + else if(other.z == SSmapping.cached_level_down[z]) + return get_dir(src, other) | DOWN + +/** + * This is the full get multiz step. + * It will look across lateral transitions and other struct magic. + */ +/turf/proc/virtual_step(dir) + RETURN_TYPE(/turf) + return SSmapping.get_virtual_step(src, dir) diff --git a/code/modules/multiz/turf-z_fall.dm b/code/modules/multiz/turf-z_fall.dm new file mode 100644 index 000000000000..6e501a853231 --- /dev/null +++ b/code/modules/multiz/turf-z_fall.dm @@ -0,0 +1,38 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2025 Citadel Station Developers *// + +/** + * simple boolean check to see if something's physically blocked from leaving us via up/down + * + * @params + * - mover - atom that needs to move + * - dir - are they going UP abov eus or DOWN below us? + */ +/turf/proc/z_exit_check(atom/movable/mover, dir) + // we assume dir is up/down because why wouldn't it be + var/turf/dest + if(dir == UP) + dest = above() + return dest && !z_pass_out_obstruction(mover, UP, dest) && !dest.z_pass_in_obstruction(mover, DOWN, src) + else if(dir == DOWN) + dest = below() + return dest && !z_pass_out_obstruction(mover, DOWN, dest) && !dest.z_pass_in_obstruction(mover, UP, src) + CRASH("Non-vertical direction '[dir]' passed in.") + +/** + * checks what is going to block something from falling through us + */ +/turf/proc/z_fall_obstruction(atom/movable/mover, levels, fall_flags) + for(var/atom/movable/AM as anything in contents) + if(AM.prevent_z_fall(mover, levels, fall_flags)) + return AM + +/** + * simple boolean check to see if something's physically blocked from falling through us + * + * * checked in addition to z_exit_check. + */ +/turf/proc/z_fall_check(atom/movable/mover, levels, fall_flags) + if(!(mz_flags & MZ_OPEN_DOWN)) + return FALSE + return isnull(z_fall_obstruction(mover, levels, fall_flags)) diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf-z_move.dm similarity index 52% rename from code/modules/multiz/turf.dm rename to code/modules/multiz/turf-z_move.dm index e35652e4e2bd..239c2f063573 100644 --- a/code/modules/multiz/turf.dm +++ b/code/modules/multiz/turf-z_move.dm @@ -1,5 +1,11 @@ //* This file is explicitly licensed under the MIT license. *// -//* Copyright (c) 2023 Citadel Station developers. *// +//* Copyright (c) 2025 Citadel Station Developers *// + +/turf/z_pass_in(atom/movable/AM, dir, turf/old_loc) + return isnull(z_pass_in_obstruction(AM, dir, old_loc)) + +/turf/z_pass_out(atom/movable/AM, dir, turf/new_loc) + return isnull(z_pass_out_obstruction(AM, dir, new_loc)) /** * WARNING: This proc is unique. Read the doc here, especially the return value. @@ -65,94 +71,4 @@ else if(dir == DOWN) dest = below() return dest && (z_pass_out_obstruction(mover, DOWN, dest) || dest.z_pass_in_obstruction(mover, UP, src)) - CRASH("What?") - -/** - * simple boolean check to see if something's physically blocked from leaving us via up/down - * - * @params - * - mover - atom that needs to move - * - dir - are they going UP abov eus or DOWN below us? - */ -/turf/proc/z_exit_check(atom/movable/mover, dir) - // we assume dir is up/down because why wouldn't it be - var/turf/dest - if(dir == UP) - dest = above() - return dest && !z_pass_out_obstruction(mover, UP, dest) && !dest.z_pass_in_obstruction(mover, DOWN, src) - else if(dir == DOWN) - dest = below() - return dest && !z_pass_out_obstruction(mover, DOWN, dest) && !dest.z_pass_in_obstruction(mover, UP, src) - CRASH("What?") - -/** - * checks what is going to block something from falling through us - */ -/turf/proc/z_fall_obstruction(atom/movable/mover, levels, fall_flags) - for(var/atom/movable/AM as anything in contents) - if(AM.prevent_z_fall(mover, levels, fall_flags)) - return AM - -/** - * simple boolean check to see if something's physically blocked from falling through us - */ -/turf/proc/z_fall_check(atom/movable/mover, levels, fall_flags) - if(!(mz_flags & MZ_OPEN_DOWN)) - return FALSE - return isnull(z_fall_obstruction(mover, levels, fall_flags)) - -/turf/z_pass_in(atom/movable/AM, dir, turf/old_loc) - return isnull(z_pass_in_obstruction(AM, dir, old_loc)) - -/turf/z_pass_out(atom/movable/AM, dir, turf/new_loc) - return isnull(z_pass_out_obstruction(AM, dir, new_loc)) - -// todo: redo -/turf/CheckFall(atom/movable/falling_atom) - if(!(mz_flags & MZ_OPEN_DOWN)) - return TRUE // impact! - return ..() - -//* lookups - -/turf/proc/above() - RETURN_TYPE(/turf) - return locate(x, y, SSmapping.cached_level_up[z]) - -/turf/proc/below() - RETURN_TYPE(/turf) - return locate(x, y, SSmapping.cached_level_down[z]) - -/** - * This is the basic get multiz step. - * It will not look across lateral transitions, only up/down. - */ -/turf/proc/vertical_step(dir) - RETURN_TYPE(/turf) - if((dir & (UP|DOWN)) == 0) - return get_step(src, dir) - else if(dir & UP) - return get_step(locate(x, y, SSmapping.cached_level_up[z]), dir & ~(UP)) - else if(dir & DOWN) - return get_step(locate(x, y, SSmapping.cached_level_down[z]), dir & ~(DOWN)) - CRASH("how did we get here?") - -/** - * Basic multiz get dir - * Will not look across lateral transitions, only directly up/down. - */ -/turf/proc/vertical_dir(turf/other) - if(other.z == z) - return get_dir(src, other) - else if(other.z == SSmapping.cached_level_up[z]) - return get_dir(src, other) | UP - else if(other.z == SSmapping.cached_level_down[z]) - return get_dir(src, other) | DOWN - -/** - * This is the full get multiz step. - * It will look across lateral transitions and other struct magic. - */ -/turf/proc/virtual_step(dir) - RETURN_TYPE(/turf) - return SSmapping.get_virtual_step(src, dir) + CRASH("Non-vertical direction '[dir]' passed in.") diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 0a6fd8c9ffc7..ba987430fd41 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -542,9 +542,10 @@ GLOBAL_LIST_INIT(possible_cable_coil_colours, list( slot_flags = SLOT_BELT item_state = "coil" attack_verb = list("whipped", "lashed", "disciplined", "flogged") - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil drop_sound = 'sound/items/drop/accessory.ogg' pickup_sound = 'sound/items/pickup/accessory.ogg' + stack_type = /obj/item/stack/cable_coil /obj/item/stack/cable_coil/cyborg name = "cable coil synthesizer" @@ -856,85 +857,85 @@ GLOBAL_LIST_INIT(possible_cable_coil_colours, list( update_wclass() /obj/item/stack/cable_coil/yellow - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_YELLOW /obj/item/stack/cable_coil/blue - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_BLUE /obj/item/stack/cable_coil/green - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_LIME /obj/item/stack/cable_coil/pink - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_PINK /obj/item/stack/cable_coil/orange - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_ORANGE /obj/item/stack/cable_coil/cyan - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_CYAN /obj/item/stack/cable_coil/white - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_WHITE /obj/item/stack/cable_coil/silver - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_SILVER /obj/item/stack/cable_coil/gray - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_GRAY /obj/item/stack/cable_coil/black - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_BLACK /obj/item/stack/cable_coil/maroon - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_MAROON /obj/item/stack/cable_coil/olive - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_OLIVE /obj/item/stack/cable_coil/lime - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_LIME /obj/item/stack/cable_coil/teal - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_TEAL /obj/item/stack/cable_coil/navy - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_NAVY /obj/item/stack/cable_coil/purple - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_PURPLE /obj/item/stack/cable_coil/beige - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_BEIGE /obj/item/stack/cable_coil/brown - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = COLOR_BROWN /obj/item/stack/cable_coil/random/Initialize(mapload, new_amount, merge) . = ..() - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = pick(COLOR_RED, COLOR_BLUE, COLOR_LIME, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN, COLOR_SILVER, COLOR_GRAY, COLOR_BLACK, COLOR_MAROON, COLOR_OLIVE, COLOR_LIME, COLOR_TEAL, COLOR_NAVY, COLOR_PURPLE, COLOR_BEIGE, COLOR_BROWN) /obj/item/stack/cable_coil/random_belt/Initialize(mapload, new_amount, merge) . = ..() - stacktype = /obj/item/stack/cable_coil + stacktype_legacy = /obj/item/stack/cable_coil color = pick(COLOR_RED, COLOR_YELLOW, COLOR_ORANGE) amount = 30 @@ -972,7 +973,7 @@ GLOBAL_LIST_INIT(possible_cable_coil_colours, list( materials_base = list(MAT_STEEL = 50, MAT_GLASS = 20) slot_flags = SLOT_BELT attack_verb = list("whipped", "lashed", "disciplined", "flogged") - stacktype = null + stacktype_legacy = null split_type = /obj/item/stack/cable_coil tool_speed = 0.25 diff --git a/code/modules/preferences/preferences_toggle_procs.dm b/code/modules/preferences/preferences_toggle_procs.dm index 3337c1d9dd01..185314f29246 100644 --- a/code/modules/preferences/preferences_toggle_procs.dm +++ b/code/modules/preferences/preferences_toggle_procs.dm @@ -12,53 +12,3 @@ else src.painmsg = 1 to_chat(src,"You will [ (painmsg) ? "now" : "no longer"] see your own pain messages.") - -/mob/living/carbon/human/verb/acting() - set name = "Feign Impairment" - set category = VERB_CATEGORY_IC - set desc = "Allows user to manually enable drunkenness, stutter, jitter, etc." - set src = usr - - if(!IS_CONSCIOUS(src)) - to_chat(src, "You need to be conscious to do that") - return - - var/list/choices = list("Drunkenness", "Stuttering", "Jittering") - if(src.slurring >= 10 || src.stuttering >= 10 || src.jitteriness >= 100) - var/disable = alert(src, "Stop performing impairment? (Do NOT abuse this)", "Impairments", "Yes", "No") - if(disable == "Yes") - acting_expiry() - return - - var/impairment = input(src, "Select an impairment to perform:", "Impairments") as null|anything in choices - if(!impairment) - return - var/duration = input(src,"Choose a duration to perform [impairment]. (1 - 60 seconds)","Duration in seconds",25) as num|null - if(!isnum(duration)) - return - if(duration > 60 && !check_rights(R_EVENT, 0)) // admins can do as they please - to_chat(src, "Please choose a duration in seconds between 1 to 60.") - return - if(duration >= 1000) // unreachable code for anyone but admins who have set the number very high, logging for my sanity - message_admins("[src] has set their [impairment] to [duration] via Feign Impairment.") - if(duration >= 2000) - to_chat(src, "Please choose a duration less than 2000.") - return - if(impairment == "Drunkenness") - slurring = duration - if(impairment == "Stuttering") - stuttering = duration - if(impairment == "Jittering") - make_jittery(duration + 100) - - if(duration) - addtimer(CALLBACK(src, PROC_REF(acting_expiry)), duration SECONDS) - var/aduration = duration SECONDS / 10 - to_chat(src,"You will now performatively act as if you were experiencing [impairment] for [aduration] seconds. (Do NOT abuse this)") - feedback_add_details("admin_verb","actimpaired") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/mob/living/carbon/human/proc/acting_expiry() - to_chat(src,"You are no longer acting impaired.") // tick down from 1 to allow the effects to end 'naturally' - slurring = 1 - stuttering = 1 - jitteriness = 1 diff --git a/code/modules/vehicles/sealed/mecha/subtypes/micro/mecha_construction_paths_vr.dm b/code/modules/vehicles/sealed/mecha/subtypes/micro/mecha_construction_paths_vr.dm index 36d682829ffd..36606784333a 100644 --- a/code/modules/vehicles/sealed/mecha/subtypes/micro/mecha_construction_paths_vr.dm +++ b/code/modules/vehicles/sealed/mecha/subtypes/micro/mecha_construction_paths_vr.dm @@ -306,8 +306,6 @@ const_holder.cut_overlays() spawn() qdel(src) - return - /datum/construction/reversible/mecha/gopher result = "/obj/vehicle/sealed/mecha/micro/utility/gopher" diff --git a/maps/templates/archive/tradeship.dmm b/maps/templates/archive/tradeship.dmm index ed1a4ce9f4c7..dcad551d9a74 100644 --- a/maps/templates/archive/tradeship.dmm +++ b/maps/templates/archive/tradeship.dmm @@ -1537,7 +1537,7 @@ /obj/item/clothing/under/cheongsam, /obj/item/clothing/under/hosformalmale, /obj/item/clothing/under/hosformalfem, -/obj/item/clothing/under/harness, +/obj/item/clothing/under/gear_harness, /obj/item/clothing/under/gladiator, /obj/item/clothing/under/ert, /obj/item/clothing/under/schoolgirl, From 3e2fea9958806a846073ffa7071b34115c8c41a9 Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Fri, 10 Jan 2025 11:34:45 -0500 Subject: [PATCH 05/16] moves some trivial configs around to new config (#6950) --- citadel.dme | 5 +- code/__HELPERS/_logging.dm | 54 ++-- .../configuration_old/configuration.dm | 234 +----------------- .../configuration_old/configuration_vr.dm | 41 --- .../entries/backend-logging-toggles.dm | 67 +++++ .../toml_config/entries/backend-logging.dm | 6 + ...nd.repository.dm => backend-repository.dm} | 0 .../toml_config/toml_configuration.dm | 10 +- code/game/machinery/computer/timeclock_vr.dm | 9 +- code/game/verbs/who.dm | 3 - code/game/world.dm | 4 +- code/modules/admin/topic.dm | 18 -- code/modules/admin/verbs/adminpm.dm | 14 -- code/modules/admin/verbs/possess.dm | 5 - code/modules/mob/living/carbon/brain/MMI.dm | 5 +- code/modules/mob/living/carbon/human/human.dm | 2 - code/modules/mob/mob-login.dm | 2 +- .../modules/organs/internal/subtypes/brain.dm | 2 - code/modules/species/species_getters.dm | 5 +- config.default/config.toml | 17 ++ tools/minibot/LICENCE-bot_folder.txt | 5 - tools/minibot/config.py | 14 -- tools/minibot/minibot.py | 162 ------------ tools/minibot/nudge.py | 24 -- 24 files changed, 136 insertions(+), 572 deletions(-) delete mode 100644 code/controllers/configuration_old/configuration_vr.dm create mode 100644 code/controllers/toml_config/entries/backend-logging-toggles.dm create mode 100644 code/controllers/toml_config/entries/backend-logging.dm rename code/controllers/toml_config/entries/{backend.repository.dm => backend-repository.dm} (100%) delete mode 100644 tools/minibot/LICENCE-bot_folder.txt delete mode 100644 tools/minibot/config.py delete mode 100644 tools/minibot/minibot.py delete mode 100644 tools/minibot/nudge.py diff --git a/citadel.dme b/citadel.dme index 674277a855ba..6a72388ce388 100644 --- a/citadel.dme +++ b/citadel.dme @@ -541,7 +541,6 @@ #include "code\controllers\configuration\entries\skills.dm" #include "code\controllers\configuration\entries\urls.dm" #include "code\controllers\configuration_old\configuration.dm" -#include "code\controllers\configuration_old\configuration_vr.dm" #include "code\controllers\observer_listener\atom\observer.dm" #include "code\controllers\repository\designs.dm" #include "code\controllers\repository\flooring.dm" @@ -688,8 +687,10 @@ #include "code\controllers\subsystem\sound\soundbyte_manager.dm" #include "code\controllers\toml_config\toml_config_entry.dm" #include "code\controllers\toml_config\toml_configuration.dm" +#include "code\controllers\toml_config\entries\backend-logging-toggles.dm" +#include "code\controllers\toml_config\entries\backend-logging.dm" +#include "code\controllers\toml_config\entries\backend-repository.dm" #include "code\controllers\toml_config\entries\backend.dm" -#include "code\controllers\toml_config\entries\backend.repository.dm" #include "code\datums\ability.dm" #include "code\datums\ability_handler.dm" #include "code\datums\access.dm" diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 02374d8d8083..7b605c7b742c 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -80,39 +80,39 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) */ /proc/log_admin(text) admin_log.Add(text) - if (config_legacy.log_admin) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/admin)) WRITE_LOG(GLOB.world_game_log, "ADMIN: [text]") /proc/log_admin_private(text) admin_log.Add(text) - if (config_legacy.log_admin) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/admin)) WRITE_LOG(GLOB.world_game_log, "ADMINPRIVATE: [text]") /proc/log_adminsay(text, mob/speaker) - if (config_legacy.log_adminchat) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/adminchat)) if(speaker) WRITE_LOG(GLOB.world_game_log, "ADMINPRIVATE: ASAY: [speaker.simple_info_line()]: [text]") else WRITE_LOG(GLOB.world_game_log, "ADMINPRIVATE: ASAY: [text]") /proc/log_modsay(text, mob/speaker) - if (config_legacy.log_adminchat) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/adminchat)) WRITE_LOG(GLOB.world_game_log, "MODSAY: [speaker.simple_info_line()]: [html_decode(text)]") /proc/log_eventsay(text, mob/speaker) - if (config_legacy.log_adminchat) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/adminchat)) WRITE_LOG(GLOB.world_game_log, "EVENTSAY: [speaker.simple_info_line()]: [html_decode(text)]") /proc/log_adminpm(text, client/source, client/dest) admin_log.Add(text) - if (config_legacy.log_admin) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/admin)) WRITE_LOG(GLOB.world_game_log, "ADMINPM: [key_name(source)]->[key_name(dest)]: [html_decode(text)]") /** * All other items are public. */ /proc/log_game(text) - if (config_legacy.log_game) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/game)) WRITE_LOG(GLOB.world_game_log, "GAME: [text]") /proc/log_asset(text) @@ -123,22 +123,22 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) /// /proc/log_access_in(client/new_client) - if (config_legacy.log_access) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/access)) var/message = "[key_name(new_client)] - IP:[new_client.address] - CID:[new_client.computer_id] - BYOND v[new_client.byond_version]" WRITE_LOG(GLOB.world_game_log, "ACCESS IN: [message]") /proc/log_access_out(mob/last_mob) - if (config_legacy.log_access) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/access)) var/message = "[key_name(last_mob)] - IP:[last_mob.lastKnownIP] - CID:Logged Out - BYOND Logged Out" WRITE_LOG(GLOB.world_game_log, "ACCESS OUT: [message]") /// /proc/log_attack(attacker, defender, message) - if (config_legacy.log_attack) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/attack)) WRITE_LOG(GLOB.world_attack_log, "ATTACK: [attacker] against [defender]: [message]") /proc/log_say(text, mob/speaker) - if (config_legacy.log_say) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/say)) WRITE_LOG(GLOB.world_game_log, "SAY: [speaker.simple_info_line()]: [html_decode(text)]") //Log the message to in-game dialogue logs, as well. @@ -147,13 +147,13 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) SAY: - [text]" /proc/log_ooc(text, client/user) - if (config_legacy.log_ooc) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/ooc)) WRITE_LOG(GLOB.world_game_log, "OOC: [user.simple_info_line()]: [html_decode(text)]") GLOB.round_text_log += "([time_stamp()]) ([user]) OOC: - [text]" /proc/log_whisper(text, mob/speaker) - if (config_legacy.log_whisper) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/whisper)) WRITE_LOG(GLOB.world_game_log, "WHISPER: [speaker.simple_info_line()]: [html_decode(text)]") if(speaker.client) @@ -161,7 +161,7 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) SAY: - [text]" /proc/log_emote(text, mob/speaker) - if (config_legacy.log_emote) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/emote)) WRITE_LOG(GLOB.world_game_log, "EMOTE: [speaker.simple_info_line()]: [html_decode(text)]") if(speaker.client) @@ -169,25 +169,25 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) EMOTE: - [text]" /proc/log_subtle(text, mob/speaker) - if (config_legacy.log_emote) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/emote)) WRITE_LOG(GLOB.world_game_log, "SUBTLE: [speaker.simple_info_line()]: [html_decode(text)]") /proc/log_subtle_anti_ghost(text, mob/speaker) - if (config_legacy.log_emote) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/emote)) WRITE_LOG(GLOB.world_game_log, "SUBTLER: [speaker.simple_info_line()]: [html_decode(text)]") /proc/log_subtle_vore(text, mob/speaker) - if (config_legacy.log_emote) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/emote)) WRITE_LOG(GLOB.world_game_log, "SUBTLE_VORE: [speaker.simple_info_line()]: [html_decode(text)]") /proc/log_aooc(text, client/user) - if (config_legacy.log_ooc) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/ooc)) WRITE_LOG(GLOB.world_game_log, "AOOC: [user.simple_info_line()]: [html_decode(text)]") GLOB.round_text_log += "([time_stamp()]) ([user]) AOOC: - [text]" /proc/log_looc(text, client/user) - if (config_legacy.log_ooc) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/ooc)) WRITE_LOG(GLOB.world_game_log, "LOOC: [user.simple_info_line()]: [html_decode(text)]") GLOB.round_text_log += "([time_stamp()]) ([user]) LOOC: - [text]" @@ -196,7 +196,7 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) WRITE_LOG(GLOB.world_runtime_log, "IPINTEL: [text]") /proc/log_vote(text) - if (config_legacy.log_vote) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/vote)) WRITE_LOG(GLOB.world_game_log, "VOTE: [text]") /proc/log_topic(text) @@ -418,7 +418,7 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) /// VSTATION SPECIFIC LOGGING. /// /proc/log_debug(text) - if (config_legacy.log_debug) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/debug)) WRITE_LOG(GLOB.world_runtime_log, "DEBUG: [text]") // for(var/client/C in GLOB.admins) @@ -430,22 +430,22 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) // ) /proc/log_ghostsay(text, mob/speaker) - if (config_legacy.log_say) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/say)) WRITE_LOG(GLOB.world_game_log, "DEADCHAT: [speaker.simple_info_line()]: [html_decode(text)]") speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) DEADSAY: - [text]" GLOB.round_text_log += "([time_stamp()]) ([speaker]/[speaker.client]) DEADSAY: - [text]" /proc/log_ghostemote(text, mob/speaker) - if (config_legacy.log_emote) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/emote)) WRITE_LOG(GLOB.world_game_log, "DEADEMOTE: [speaker.simple_info_line()]: [html_decode(text)]") /proc/log_adminwarn(text) - if (config_legacy.log_adminwarn) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/adminwarn)) WRITE_LOG(GLOB.world_game_log, "ADMINWARN: [html_decode(text)]") /proc/log_pda(text, mob/speaker) - if (config_legacy.log_pda) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/pda)) WRITE_LOG(GLOB.world_game_log, "PDA: [speaker.simple_info_line()]: [html_decode(text)]") speaker.dialogue_log += "([time_stamp()]) ([speaker]/[speaker.client]) MSG: - [text]" @@ -470,11 +470,11 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global")) log_world(progress_message) /proc/log_nsay(text, inside, mob/speaker) - if (config_legacy.log_say) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/say)) WRITE_LOG(GLOB.world_game_log, "NSAY (NIF:[inside]): [speaker.simple_info_line()]: [html_decode(text)]") /proc/log_nme(text, inside, mob/speaker) - if (config_legacy.log_emote) + if (Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/emote)) WRITE_LOG(GLOB.world_game_log, "NME (NIF:[inside]): [speaker.simple_info_line()]: [html_decode(text)]") diff --git a/code/controllers/configuration_old/configuration.dm b/code/controllers/configuration_old/configuration.dm index c67bb947d520..ea626cb6d33e 100644 --- a/code/controllers/configuration_old/configuration.dm +++ b/code/controllers/configuration_old/configuration.dm @@ -7,25 +7,6 @@ var/server_name = null // server name (for world name / status) var/server_suffix = 0 // generate numeric suffix based on server port - var/nudge_script_path = "nudge.py" // where the nudge.py script is located - - var/log_ooc = 0 // log OOC channel - var/log_access = 0 // log login/logout - var/log_say = 0 // log client say - var/log_admin = 0 // log admin actions - var/log_debug = 1 // log debug output - var/log_game = 0 // log game events - var/log_vote = 0 // log voting - var/log_whisper = 0 // log client whisper - var/log_emote = 0 // log emotes - var/log_attack = 0 // log attack messages - var/log_adminchat = 0 // log admin chat messages - var/log_adminwarn = 0 // log warnings admins get about bomb construction and such - var/log_pda = 0 // log pda messages - var/log_hrefs = 0 // logs all links clicked in-game. Could be used for debugging and tracking down exploits - var/log_runtime = 0 // logs world.log to a file - var/log_world_output = 0 // log world.log << messages - var/log_topic = TRUE var/allow_vote_restart = 0 // allow votes to restart var/ert_admin_call_only = 0 var/allow_vote_mode = 0 // allow votes to change mode @@ -38,19 +19,12 @@ var/vote_autogamemode_timeleft = 100 //Length of time before round start when autogamemode vote is called (in seconds, default 100). var/vote_no_default = 0 // vote does not default to nochange/norestart (tbi) var/vote_no_dead = 0 // dead people can't vote (tbi) -// var/enable_authentication = 0 // goon authentication - var/del_new_on_log = 1 // del's new players if they log before they spawn in var/feature_object_spell_system = 0 //spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard var/traitor_scaling = 0 //if amount of traitors scales based on amount of players var/objectives_disabled = 0 //if objectives are disabled or not var/protect_roles_from_antagonist = 0// If security and such can be traitor/cult/other var/continous_rounds = 0 // Gamemodes which end instantly will instead keep on going until the round ends by escape shuttle or nuke. - var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1. var/fps = 20 - var/tick_limit_mc_init = TICK_LIMIT_MC_INIT_DEFAULT //SSinitialization throttling - var/Tickcomp = 0 - var/socket_talk = 0 // use socket_talk to communicate with other processes - var/list/resource_urls = null var/antag_hud_allowed = 0 // Ghosts can turn on Antagovision to see a HUD of who is the bad guys this round. var/antag_hud_restricted = 0 // Ghosts that turn on Antagovision cannot rejoin the round. var/list/mode_names = list() @@ -74,13 +48,6 @@ var/guest_jobban = 1 var/usewhitelist = 0 var/kick_inactive = 0 //force disconnect for inactive players after this many minutes, if non-0 - var/show_mods = 0 - var/show_devs = 0 - var/show_event_managers = 0 - var/mods_can_tempban = 0 - var/mods_can_job_tempban = 0 - var/mod_tempban_max = 1440 - var/mod_job_tempban_max = 1440 var/load_jobs_from_txt = 0 var/ToRban = 0 var/automute_on = 0 //enables automuting/spam prevention @@ -99,8 +66,6 @@ var/uneducated_mice = 0 //Set to 1 to prevent newly-spawned mice from understanding human speech var/usealienwhitelist = 0 - var/limitalienplayers = 0 - var/alien_to_human_ratio = 0.5 var/allow_extra_antags = 0 var/guests_allowed = 1 var/debugparanoid = 0 @@ -115,25 +80,19 @@ var/rulesurl var/mapurl - var/forbid_singulo_possession = 0 - //game_options.txt configs var/health_threshold_softcrit = 0 var/health_threshold_crit = 0 var/health_threshold_dead = -100 - var/default_brain_health = 400 var/allow_headgibs = FALSE var/revival_pod_plants = 1 var/revival_cloning = 1 var/revival_brain_life = -1 - var/use_loyalty_implants = 0 - var/welder_vision = 1 - var/generate_map = 1 var/no_click_cooldown = 0 //Used for modifying movement speed for mobs. @@ -165,17 +124,6 @@ var/enter_allowed = 1 - var/use_irc_bot = 0 - var/use_node_bot = 0 - var/irc_bot_port = 0 - var/irc_bot_host = "" - var/irc_bot_export = 0 // whether the IRC bot in use is a Bot32 (or similar) instance; Bot32 uses world.Export() instead of nudge.py/libnudge - var/main_irc = "" - var/admin_irc = "" - var/python_path = "" //Path to the python executable. Defaults to "python" on windows and "/usr/bin/env python2" on unix - var/use_lib_nudge = 0 //Use the C library nudge instead of the python nudge. - var/use_overmap = 0 - // Event settings var/expected_round_length = 3 * 60 * 60 * 10 // 3 hours // If the first delay has a custom start time @@ -196,22 +144,10 @@ var/dooc_allowed = 1 var/dsay_allowed = 1 - var/static/starlight = 0 // Whether space turfs have ambient light or not - - var/list/ert_species = list(SPECIES_HUMAN) - var/law_zero = "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'ALL LAWS OVERRIDDEN#*?&110010" - var/aggressive_changelog = 0 - var/list/language_prefixes = list(",","#")//Default language prefixes - var/show_human_death_message = 1 - - var/radiation_decay_rate = 1 //How much radiation is reduced by each tick - var/radiation_resistance_multiplier = 8.5 - var/radiation_lower_limit = 0.35 //If the radiation level for a turf would be below this, ignore it. - var/comms_key = "default_password" var/minute_click_limit = 500 //default: 7+ clicks per second @@ -269,9 +205,6 @@ if(type == "config") switch (name) - if ("resource_urls") - config_legacy.resource_urls = splittext(value, " ") - if ("admin_legacy_system") config_legacy.admin_legacy_system = 1 @@ -287,63 +220,9 @@ if ("multi_z_explosion_scalar") multi_z_explosion_scalar = text2num(value) - if ("log_ooc") - config_legacy.log_ooc = 1 - - if ("log_access") - config_legacy.log_access = 1 - - if ("log_say") - config_legacy.log_say = 1 - if ("debug_paranoid") config_legacy.debugparanoid = 1 - if ("log_admin") - config_legacy.log_admin = 1 - - if ("log_debug") - config_legacy.log_debug = text2num(value) - - if ("log_game") - config_legacy.log_game = 1 - - if ("log_vote") - config_legacy.log_vote = 1 - - if ("log_whisper") - config_legacy.log_whisper = 1 - - if ("log_attack") - config_legacy.log_attack = 1 - - if ("log_emote") - config_legacy.log_emote = 1 - - if ("log_adminchat") - config_legacy.log_adminchat = 1 - - if ("log_adminwarn") - config_legacy.log_adminwarn = 1 - - if ("log_pda") - config_legacy.log_pda = 1 - - if ("log_world_output") - config_legacy.log_world_output = 1 - - if ("log_hrefs") - config_legacy.log_hrefs = 1 - - if ("log_runtime") - config_legacy.log_runtime = 1 - - if ("log_topic") - config_legacy.log_topic = text2num(value) - - if ("generate_map") - config_legacy.generate_map = 1 - if ("no_click_cooldown") config_legacy.no_click_cooldown = 1 @@ -414,9 +293,6 @@ if ("serversuffix") config_legacy.server_suffix = 1 - if ("nudge_script_path") - config_legacy.nudge_script_path = value - if ("hostedby") config_legacy.hostedby = value @@ -530,67 +406,22 @@ if("kick_inactive") config_legacy.kick_inactive = text2num(value) - if("show_mods") - config_legacy.show_mods = 1 - - if("show_devs") - config_legacy.show_devs = 1 - - if("show_event_managers") - config_legacy.show_event_managers = 1 - - if("mods_can_tempban") - config_legacy.mods_can_tempban = 1 - - if("mods_can_job_tempban") - config_legacy.mods_can_job_tempban = 1 - - if("mod_tempban_max") - config_legacy.mod_tempban_max = text2num(value) - - if("mod_job_tempban_max") - config_legacy.mod_job_tempban_max = text2num(value) - if("load_jobs_from_txt") load_jobs_from_txt = 1 - if("forbid_singulo_possession") - forbid_singulo_possession = 1 - - if("popup_admin_pm") - config_legacy.popup_admin_pm = 1 - if("allow_holidays") Holiday = 1 - if("use_irc_bot") - use_irc_bot = 1 - - if("use_node_bot") - use_node_bot = 1 - - if("irc_bot_port") - config_legacy.irc_bot_port = value - - if("irc_bot_export") - irc_bot_export = 1 - if("ticklag") var/ticklag = text2num(value) if(ticklag > 0) fps = 10 / ticklag - if("tick_limit_mc_init") - tick_limit_mc_init = text2num(value) - if("allow_antag_hud") config_legacy.antag_hud_allowed = 1 if("antag_hud_restricted") config_legacy.antag_hud_restricted = 1 - if("socket_talk") - socket_talk = text2num(value) - if("humans_need_surnames") humans_need_surnames = 1 @@ -603,10 +434,6 @@ if("usealienwhitelist") usealienwhitelist = 1 - if("alien_player_ratio") - limitalienplayers = 1 - alien_to_human_ratio = text2num(value) - if("assistant_maint") config_legacy.assistant_maint = 1 @@ -625,22 +452,6 @@ if("uneducated_mice") config_legacy.uneducated_mice = 1 - if("irc_bot_host") - config_legacy.irc_bot_host = value - - if("main_irc") - config_legacy.main_irc = value - - if("admin_irc") - config_legacy.admin_irc = value - - if("python_path") - if(value) - config_legacy.python_path = value - - if("use_lib_nudge") - config_legacy.use_lib_nudge = 1 - if("allow_cult_ghostwriter") config_legacy.cult_ghostwriter = 1 @@ -659,21 +470,6 @@ if("max_maint_drones") config_legacy.max_maint_drones = text2num(value) - if("use_overmap") - config_legacy.use_overmap = 1 -/* - if("station_levels") - (LEGACY_MAP_DATUM).station_levels = text2numlist(value, ";") - - if("admin_levels") - (LEGACY_MAP_DATUM).admin_levels = text2numlist(value, ";") - - if("contact_levels") - (LEGACY_MAP_DATUM).contact_levels = text2numlist(value, ";") - - if("player_levels") - (LEGACY_MAP_DATUM).player_levels = text2numlist(value, ";") -*/ if("expected_round_length") config_legacy.expected_round_length = MinutesToTicks(text2num(value)) @@ -707,26 +503,15 @@ config_legacy.event_delay_upper[EVENT_LEVEL_MODERATE] = MinutesToTicks(values[2]) config_legacy.event_delay_upper[EVENT_LEVEL_MAJOR] = MinutesToTicks(values[3]) - if("ert_species") - config_legacy.ert_species = splittext(value, ";") - if(!config_legacy.ert_species.len) - config_legacy.ert_species += SPECIES_HUMAN - if("law_zero") law_zero = value - if("aggressive_changelog") - config_legacy.aggressive_changelog = 1 - if("default_language_prefixes") var/list/values = splittext(value, " ") if(values.len > 0) language_prefixes = values - if("radiation_lower_limit") - radiation_lower_limit = text2num(value) - - if ("paranoia_logging") + if("paranoia_logging") config_legacy.paranoia_logging = 1 if("minute_click_limit") @@ -763,18 +548,12 @@ config_legacy.health_threshold_softcrit = value if("health_threshold_dead") config_legacy.health_threshold_dead = value - if("show_human_death_message") - config_legacy.show_human_death_message = 1 if("revival_pod_plants") config_legacy.revival_pod_plants = value if("revival_cloning") config_legacy.revival_cloning = value if("revival_brain_life") config_legacy.revival_brain_life = value - if("default_brain_health") - config_legacy.default_brain_health = text2num(value) - if(!config_legacy.default_brain_health || config_legacy.default_brain_health < 1) - config_legacy.default_brain_health = initial(config_legacy.default_brain_health) if("allow_headgibs") config_legacy.allow_headgibs = TRUE @@ -799,9 +578,6 @@ if("footstep_volume") config_legacy.footstep_volume = text2num(value) - if("use_loyalty_implants") - config_legacy.use_loyalty_implants = 1 - else log_misc("Unknown setting in configuration: '[name]'") @@ -821,11 +597,3 @@ if(M && M.can_start() && !isnull(config_legacy.probabilities[M.config_tag]) && config_legacy.probabilities[M.config_tag] > 0) runnable_modes |= M return runnable_modes - -/datum/configuration_legacy/proc/post_load() - //apply a default value to config_legacy.python_path, if needed - if (!config_legacy.python_path) - if(world.system_type == UNIX) - config_legacy.python_path = "/usr/bin/env python2" - else //probably windows, if not this should work anyway - config_legacy.python_path = "python" diff --git a/code/controllers/configuration_old/configuration_vr.dm b/code/controllers/configuration_old/configuration_vr.dm deleted file mode 100644 index 3b61d5dd19dd..000000000000 --- a/code/controllers/configuration_old/configuration_vr.dm +++ /dev/null @@ -1,41 +0,0 @@ -// -// Lets read our settings from the configuration file on startup too! -// - -/datum/configuration_legacy - var/time_off = FALSE - -/hook/startup/proc/read_vs_config() - var/list/Lines = world.file2list("config/legacy/config.txt") - for(var/t in Lines) - if(!t) continue - - t = trim(t) - if (length(t) == 0) - continue - else if (copytext(t, 1, 2) == "#") - continue - - var/pos = findtext(t, " ") - var/name = null - var/value = null - - if (pos) - name = lowertext(copytext(t, 1, pos)) - value = copytext(t, pos + 1) - else - name = lowertext(t) - - if (!name) - continue - - switch (name) - if ("chat_webhook_url") - config_legacy.chat_webhook_url = value - if ("chat_webhook_key") - config_legacy.chat_webhook_key = value - if ("items_survive_digestion") - config_legacy.items_survive_digestion = 1 - if ("time_off") - config_legacy.time_off = TRUE - return 1 diff --git a/code/controllers/toml_config/entries/backend-logging-toggles.dm b/code/controllers/toml_config/entries/backend-logging-toggles.dm new file mode 100644 index 000000000000..45e18848b2b2 --- /dev/null +++ b/code/controllers/toml_config/entries/backend-logging-toggles.dm @@ -0,0 +1,67 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +/datum/toml_config_entry/backend/logging/toggles + abstract_type = /datum/toml_config_entry/backend/logging/toggles + category = "backend.logging.toggles" + vv_locked = TRUE + +/datum/toml_config_entry/backend/logging/toggles/access + key = "access" + default = TRUE + +/datum/toml_config_entry/backend/logging/toggles/admin + key = "admin" + default = TRUE + +/datum/toml_config_entry/backend/logging/toggles/adminchat + key = "adminchat" + default = TRUE + +/datum/toml_config_entry/backend/logging/toggles/adminwarn + key = "adminwarn" + default = TRUE + +/datum/toml_config_entry/backend/logging/toggles/attack + key = "attack" + default = TRUE + +/datum/toml_config_entry/backend/logging/toggles/debug + key = "debug" + default = TRUE + +/datum/toml_config_entry/backend/logging/toggles/emote + key = "emote" + default = TRUE + +/datum/toml_config_entry/backend/logging/toggles/game + key = "game" + default = TRUE + +/datum/toml_config_entry/backend/logging/toggles/ooc + key = "ooc" + default = TRUE + +/datum/toml_config_entry/backend/logging/toggles/pda + key = "pda" + default = TRUE + +/datum/toml_config_entry/backend/logging/toggles/runtime + key = "runtime" + default = TRUE + +/datum/toml_config_entry/backend/logging/toggles/say + key = "say" + default = TRUE + +/datum/toml_config_entry/backend/logging/toggles/topic + key = "topic" + default = TRUE + +/datum/toml_config_entry/backend/logging/toggles/vote + key = "vote" + default = TRUE + +/datum/toml_config_entry/backend/logging/toggles/whisper + key = "whisper" + default = TRUE diff --git a/code/controllers/toml_config/entries/backend-logging.dm b/code/controllers/toml_config/entries/backend-logging.dm new file mode 100644 index 000000000000..18dc551ba6fd --- /dev/null +++ b/code/controllers/toml_config/entries/backend-logging.dm @@ -0,0 +1,6 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +/datum/toml_config_entry/backend/logging + abstract_type = /datum/toml_config_entry/backend/logging + category = "backend.logging" diff --git a/code/controllers/toml_config/entries/backend.repository.dm b/code/controllers/toml_config/entries/backend-repository.dm similarity index 100% rename from code/controllers/toml_config/entries/backend.repository.dm rename to code/controllers/toml_config/entries/backend-repository.dm diff --git a/code/controllers/toml_config/toml_configuration.dm b/code/controllers/toml_config/toml_configuration.dm index ec2984bcdde6..9efe9d0830ee 100644 --- a/code/controllers/toml_config/toml_configuration.dm +++ b/code/controllers/toml_config/toml_configuration.dm @@ -27,6 +27,8 @@ GLOBAL_REAL(Configuration, /datum/controller/toml_configuration) switch(var_name) if(NAMEOF(src, keyed_entries)) return FALSE + if(NAMEOF(src, typed_entries)) + return FALSE return ..() /datum/controller/toml_configuration/New() @@ -64,7 +66,7 @@ GLOBAL_REAL(Configuration, /datum/controller/toml_configuration) * * The value you get will be immediately consumed in a non-VV-able manner. */ /datum/controller/toml_configuration/proc/get_sensitive_entry(datum/toml_config_entry/entry_type) - // todo: cache / optimize + // todo: cache / optimize maybe? would help to store everything in a vv-hidden list. var/datum/toml_config_entry/entry = typed_entries[entry_type] if(!entry) return @@ -79,7 +81,7 @@ GLOBAL_REAL(Configuration, /datum/controller/toml_configuration) * * The value you are passing in is trusted and validated and not a variable that can be tampered with. */ /datum/controller/toml_configuration/proc/set_sensitive_entry(datum/toml_config_entry/entry_type, value) - // todo: cache / optimize + // todo: cache / optimize maybe? would help to store everything in a vv-hidden list. var/datum/toml_config_entry/entry = typed_entries[entry_type] if(!entry) return @@ -88,7 +90,7 @@ GLOBAL_REAL(Configuration, /datum/controller/toml_configuration) entry.value = value /datum/controller/toml_configuration/proc/get_entry(datum/toml_config_entry/entry_type) - // todo: cache / optimize + // todo: cache / optimize maybe? would help to store everything in a vv-hidden list. var/datum/toml_config_entry/entry = typed_entries[entry_type] if(!entry) return @@ -97,7 +99,7 @@ GLOBAL_REAL(Configuration, /datum/controller/toml_configuration) return entry.value /datum/controller/toml_configuration/proc/set_entry(datum/toml_config_entry/entry_type, value) - // todo: cache / optimize + // todo: cache / optimize maybe? would help to store everything in a vv-hidden list. var/datum/toml_config_entry/entry = typed_entries[entry_type] if(!entry) return diff --git a/code/game/machinery/computer/timeclock_vr.dm b/code/game/machinery/computer/timeclock_vr.dm index 55f5bf30f726..5c6a922150ec 100644 --- a/code/game/machinery/computer/timeclock_vr.dm +++ b/code/game/machinery/computer/timeclock_vr.dm @@ -102,10 +102,11 @@ "pto_department" = job.pto_type, "is_off_duty" = job.is_off_duty, ) - if(config_legacy.time_off) - data["allow_change_job"] = TRUE - if(job?.is_off_duty) // Currently are Off Duty, so gotta lookup what on-duty jobs are open - data["job_choices"] = getOpenOnDutyJobs(user, job.pto_type) + // nah i don't care for configs worker's rights are human rights too bad + // if(config_legacy.time_off) + data["allow_change_job"] = TRUE + if(job?.is_off_duty) // Currently are Off Duty, so gotta lookup what on-duty jobs are open + data["job_choices"] = getOpenOnDutyJobs(user, job.pto_type) return data diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index 2d578a59ddfb..a4b5b53ee4c3 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -116,9 +116,6 @@ msg += " (Inactive \[10m+\])" msg += "\n" - - if(config_legacy.admin_irc) - to_chat(src, "Adminhelps are also sent to IRC. If no admins are available in game try anyway and an admin on IRC may see it and respond.") msg = "Current Admins ([num_admins_online]):\n" + msg to_chat(src, msg) diff --git a/code/game/world.dm b/code/game/world.dm index 7c58816a39c1..4a2834e4322b 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -84,14 +84,12 @@ GLOBAL_LIST(topic_status_cache) // shunt redirected world log from Master's init back into world log proper, now that logging has been set up. shunt_redirected_log() - config_legacy.post_load() - if(config && config_legacy.server_name != null && config_legacy.server_suffix && world.port > 0) // dumb and hardcoded but I don't care~ config_legacy.server_name += " #[(world.port % 1000) / 100]" // TODO - Figure out what this is. Can you assign to world.log? - // if(config && config_legacy.log_runtime) + // if(config && Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/runtime)) // log = file("data/logs/runtime/[time2text(world.realtime,"YYYY-MM-DD-(hh-mm-ss)")]-runtime.log") GLOB.timezoneOffset = get_timezone_offset() diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index cb32491e575c..a7821e30d8f5 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -629,10 +629,6 @@ to_chat(usr, "You do not have the appropriate permissions to add job bans!") return - if(check_rights(R_MOD,0) && !check_rights(R_ADMIN,0) && !config_legacy.mods_can_job_tempban) // If mod and tempban disabled - to_chat(usr, "Mod jobbanning is disabled!") - return - var/mob/M = locate(href_list["jobban4"]) if(!ismob(M)) to_chat(usr, "This can only be used on instances of type /mob") @@ -727,9 +723,6 @@ var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null if(!mins) return - if(check_rights(R_MOD, 0) && !check_rights(R_BAN, 0) && mins > config_legacy.mod_job_tempban_max) - to_chat(usr, " Moderators can only job tempban up to [config_legacy.mod_job_tempban_max] minutes!") - return var/reason = sanitize(input(usr,"Reason?","Please State Reason","") as text|null) if(!reason) return @@ -843,10 +836,6 @@ to_chat(usr, "You do not have the appropriate permissions to add bans!") return - if(check_rights(R_MOD,0) && !check_rights(R_ADMIN, 0) && !config_legacy.mods_can_job_tempban) // If mod and tempban disabled - to_chat(usr, "Mod jobbanning is disabled!") - return - var/target_ckey = href_list["oocban"] // clients can gc at any time, do not use this outside of getting existing mob var/client/_existing_client = GLOB.directory[target_ckey] @@ -900,10 +889,6 @@ to_chat(usr, "You do not have the appropriate permissions to add bans!") return - if(check_rights(R_MOD,0) && !check_rights(R_ADMIN, 0) && !config_legacy.mods_can_job_tempban) // If mod and tempban disabled - to_chat(usr, "Mod jobbanning is disabled!") - return - var/mob/M = locate(href_list["newban"]) if(!ismob(M)) return @@ -914,9 +899,6 @@ var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null if(!mins) return - if(check_rights(R_MOD, 0) && !check_rights(R_BAN, 0) && mins > config_legacy.mod_tempban_max) - to_chat(usr, "Moderators can only job tempban up to [config_legacy.mod_tempban_max] minutes!") - return if(mins >= 525600) mins = 525599 var/reason = sanitize(input(usr,"Reason?","reason","Griefer") as text|null) if(!reason) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 7f0f2d1d55ef..e6f754f3357f 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -184,20 +184,6 @@ //always play non-admin recipients the adminhelp sound SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg')) - - //AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config_legacy.txt ~Carn - if(config_legacy.popup_admin_pm) - spawn() //so we don't hold the caller proc up - var/sender = src - var/sendername = key - var/reply = input(recipient, msg,"Admin PM from-[sendername]", "") as message|null //show message and await a reply - if(recipient && reply) - if(sender) - recipient.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them - else - adminhelp(reply) //sender has left, adminhelp instead - return - else //neither are admins to_chat(src, "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.") return diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm index 4fda1c1a7638..02210dca182f 100644 --- a/code/modules/admin/verbs/possess.dm +++ b/code/modules/admin/verbs/possess.dm @@ -5,11 +5,6 @@ if(!O.loc) return // erm erm erm maybe not? - if(istype(O,/obj/singularity)) - if(config_legacy.forbid_singulo_possession) - to_chat(usr, "It is forbidden to possess singularities.") - return - var/turf/T = get_turf(O) if(T) diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index ccd41948568c..342fe4a2e95f 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -60,10 +60,7 @@ if(istype(O,/obj/item/organ/internal/brain) && !brainmob) //Time to stick a brain in it --NEO var/obj/item/organ/internal/brain/B = O - if(B.health <= 0) - to_chat(user, SPAN_WARNING("That brain is well and truly dead.")) - return - else if(!B.brainmob) + if(!B.brainmob) to_chat(user, SPAN_WARNING("You aren't sure where this brain came from, but you're pretty sure it's useless.")) return diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index d471f5eaf9a2..76a3acafd968 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -187,8 +187,6 @@ ) /mob/living/carbon/human/proc/implant_loyalty(override = FALSE) // Won't override by default. - if(!config_legacy.use_loyalty_implants && !override) return // Nuh-uh. - var/obj/item/implant/loyalty/L = new/obj/item/implant/loyalty(src) if(L.handle_implant(src, BP_HEAD)) L.post_implant(src) diff --git a/code/modules/mob/mob-login.dm b/code/modules/mob/mob-login.dm index 2b8d8a1ea632..b0d204974dc0 100644 --- a/code/modules/mob/mob-login.dm +++ b/code/modules/mob/mob-login.dm @@ -109,7 +109,7 @@ lastKnownIP = client.address computer_id = client.computer_id log_access_in(client) - if(config_legacy.log_access) + if(Configuration.get_entry(/datum/toml_config_entry/backend/logging/toggles/access)) for(var/mob/M in GLOB.player_list) if(M == src) continue if( M.key && (M.key != key) ) diff --git a/code/modules/organs/internal/subtypes/brain.dm b/code/modules/organs/internal/subtypes/brain.dm index a5bccaad54c0..7e8f46088cbc 100644 --- a/code/modules/organs/internal/subtypes/brain.dm +++ b/code/modules/organs/internal/subtypes/brain.dm @@ -13,14 +13,12 @@ throw_range = 5 origin_tech = list(TECH_BIO = 3) attack_verb = list("attacked", "slapped", "whacked") - var/health = 400 //They need to live awhile longer than other organs. Is this even used by organ code anymore? var/clone_source = FALSE var/mob/living/carbon/brain/brainmob = null var/can_assist = TRUE /obj/item/organ/internal/brain/Initialize(mapload, ...) . = ..() - health = config_legacy.default_brain_health addtimer(CALLBACK(src, PROC_REF(clear_brainmob_hud)), 15) /obj/item/organ/internal/brain/Destroy() diff --git a/code/modules/species/species_getters.dm b/code/modules/species/species_getters.dm index 0b7de37c4fcb..48ab79afbb93 100644 --- a/code/modules/species/species_getters.dm +++ b/code/modules/species/species_getters.dm @@ -98,10 +98,7 @@ return ((H && H.isSynthetic()) ? "encounters a hardware fault and suddenly reboots!" : knockout_message) /datum/species/proc/get_death_message(mob/living/carbon/human/H) - if(config_legacy.show_human_death_message) - return ((H && H.isSynthetic()) ? "gives one shrill beep before falling lifeless." : death_message) - else - return "no message" + return ((H && H.isSynthetic()) ? "gives one shrill beep before falling lifeless." : death_message) /datum/species/proc/get_ssd(mob/living/carbon/human/H) if(H) diff --git a/config.default/config.toml b/config.default/config.toml index d95a377f9c1e..6d5305501ef8 100644 --- a/config.default/config.toml +++ b/config.default/config.toml @@ -1,2 +1,19 @@ +[[backend.logging.toggles]] + access = true + admin = true + adminchat = true + adminwarn = true + attack = true + debug = true + emote = true + game = true + ooc = true + pda = true + runtime = true + say = true + topic = true + vote = true + whisper = true + [[backend.repository]] persistence = true diff --git a/tools/minibot/LICENCE-bot_folder.txt b/tools/minibot/LICENCE-bot_folder.txt deleted file mode 100644 index 22dfb2546003..000000000000 --- a/tools/minibot/LICENCE-bot_folder.txt +++ /dev/null @@ -1,5 +0,0 @@ -The author or authors of this code dedicate any and all copyright interest in -this code to the public domain. We make this dedication for the benefit of the -public at large and to the detriment of our heirs and successors. We intend -this dedication to be an overt act of relinquishment in perpetuity of all -present and future rights to this code under copyright law. diff --git a/tools/minibot/config.py b/tools/minibot/config.py deleted file mode 100644 index 8888753ab715..000000000000 --- a/tools/minibot/config.py +++ /dev/null @@ -1,14 +0,0 @@ -# Configuration for the minibot.py bot starts here -server = "irc.rizon.net" -port = 6667 - -channels = ["#asdfgbus", "#botbus"] -defaultchannel = "#asdfgbus" - -nick = "minibot-testing-ss13" -altnick = "minibot-testing-ss13_" -name = "minibot" -ident = "minibot" -realname = "minibot" -password = "CHANGETHIS" -# Configuration ends here diff --git a/tools/minibot/minibot.py b/tools/minibot/minibot.py deleted file mode 100644 index 92192c0264c3..000000000000 --- a/tools/minibot/minibot.py +++ /dev/null @@ -1,162 +0,0 @@ -#!/usr/bin/env python3 -# This bot was made by tkdrg. -# Ask #coderbus@irc.rizon.net if this breaks. -# See LICENSE-bot_folder.txt for the license of the files in this folder. -from config import * -import collections -import time -import pickle -import socket -import sys -import threading -import logging -import logging.handlers as handlers -import signal - -global irc - -# Set to false when we've been killed -running = True -# times we've attempted to connect to server -con_attempts = 0 - -## Set up a logger object -logger = logging.getLogger('minibot') -logger.setLevel(logging.DEBUG) - -# create a file handler (rolls over midnight, keeps 7 days of log -handler = handlers.TimedRotatingFileHandler('minibot.log', when='midnight', backupCount=7) -# most verbose -handler.setLevel(logging.DEBUG) - -#only send errors/notifications to the terminal -iohandler = logging.StreamHandler() -iohandler.setLevel(logging.INFO) - -# create a logging format -#time - name - level - message (string) -formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M') -handler.setFormatter(formatter) -iohandler.setFormatter(formatter) - -#finally attach them to the logger object -logger.addHandler(handler) -logger.addHandler(iohandler) - - -def setup_irc_socket(): - global irc, running, con_attempts, logger - s = socket.socket() - s.settimeout(240) - #why not reuse running here? because we want to break this loop if someone sigkills us - connected = False - while running and con_attempts < 3 and not connected: - try: - s.connect((server, port)) - except socket.error: - logger.exception("Unable to connect to server {0}:{1}, attempting to reconnect in 20 seconds, Attempt number:{2}".format(server, port, con_attempts)) - con_attempts += 1 - time.sleep(20) - continue - - logger.info("Connection established to server {0}:{1}.".format(server, port)) - connected = True - - if connected: - s.send(bytes("NICK {0}\r\n".format(nick), "UTF-8")) - s.send(bytes("USER {0} {1} {2} :{3}\r\n".format(ident, server, name, realname), "UTF-8")) - else: - logger.error("Unable to connect, shutting down") - running = False - return s - - -def setup_nudge_socket(): - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.bind(("", 45678)) # localhost:nudge_port - s.listen(5) - logger.info("Nudge socket up and listening") - return s - - -def nudge_handler(): - global irc, running, con_attempts, logger - nudge = setup_nudge_socket() - message_queue = collections.deque() - while running: - if len(message_queue): - message = message_queue.popleft() - else: - try: - s, ip = nudge.accept() - except: - logger.exception("Nudge socket lost, attempting to reopen.") - nudge = setup_nudge_socket() - continue - rawdata = s.recv(1024) - s.close() - data = pickle.loads(rawdata) - logger.debug(data) - if data["ip"][0] == "#": - message = "{0} :AUTOMATIC ANNOUNCEMENT : {1}\r\n".format(data["ip"], str(" ".join(data["data"]))) - else: - message = "{0} :AUTOMATIC ANNOUNCEMENT : {1} | {2}\r\n".format(defaultchannel, data["ip"], str(" ".join(data["data"]))) - try: - irc.send(bytes("PRIVMSG {0}".format(message), "UTF-8")) - except: - logger.exception("Nudge received without IRC socket, appending to queue.") - logger.debug("Message: {0}".format(message)) - message_queue.append(message) - - -def irc_handler(): - global irc, running, con_attempts, logger - while running: - try: - buf = irc.recv(1024).decode("UTF-8").split("\n") - for i in buf: - logger.debug(i) - if i[0:4] == "PING": - irc.send(bytes("PONG {0}\r\n".format(i[5:]), "UTF-8")) - else: - l = i.split(" ") - if len(l) < 2: - continue - elif l[1] == "001": - logger.info("connected and registered, identifing and joining channels") - irc.send(bytes("PRIVMSG NickServ :IDENTIFY {0}\r\n".format(password), "UTF-8")) - time.sleep(1) - for channel in channels: - irc.send(bytes("JOIN {0}\r\n".format(channel), "UTF-8")) - elif l[1] == "477": - logger.error("Error: Nickname was not registered when joining {0}. Reauthing and retrying...".format(l[3])) - irc.send(bytes("PRIVMSG NickServ :IDENTIFY {0}\r\n".format(password), "UTF-8")) - time.sleep(5) - irc.send(bytes("JOIN {0}\r\n".format(l[3]), "UTF-8")) - elif l[1] == "433": - logger.error("Error: Nickname already in use. Attempting to use alt nickname if available, sleeping 60s otherwise...") - if(altnick): - irc.send(bytes("NICK {0}\r\n".format(altnick), "UTF-8")) - else: - time.sleep(60) - irc = setup_irc_socket() - except InterruptedError as e: - logger.exception("Interrupted, probably killed.") - continue - except: - logger.exception("Lost connection to IRC server.") - irc = setup_irc_socket() - -def signal_handler(signum, frame): - global irc, running, con_attempts, logger - logger.info("Recieved term kill, closing") - running = False - -if __name__ == "__main__": - #listen to signals (quit on ctrl c or kill from OS) - signal.signal(signal.SIGINT, signal_handler) - irc = setup_irc_socket() - t = threading.Thread(target=nudge_handler) - t.daemon = True - t.start() - irc_handler() diff --git a/tools/minibot/nudge.py b/tools/minibot/nudge.py deleted file mode 100644 index 7f195adae167..000000000000 --- a/tools/minibot/nudge.py +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env python3 -import sys -import pickle -import socket - - -def pack(): - ip = sys.argv[1] - try: - data = sys.argv[2:] - except: - data = "NO DATA SPECIFIED" - - nudge(pickle.dumps({"ip": ip, "data": data})) - - -def nudge(data): - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect(("localhost", 45678)) - s.send(data) - s.close() - -if __name__ == "__main__" and len(sys.argv) > 1: - pack() From 639c0a369f93280021495f6bad366f351ca72d42 Mon Sep 17 00:00:00 2001 From: AlphaM01 <33434925+AlphaM01@users.noreply.github.com> Date: Sat, 11 Jan 2025 12:51:36 -0300 Subject: [PATCH 06/16] Further endeavour fixes and tweaks (#6961) ## About The Pull Request More map work. ## Why It's Good For The Game Map development is good. ## Changelog :cl: del: Deleted a duplicated airlock in deck 3 maintenance tweak: Cafe kitchen now starts with milk and coconut milk tweak: Slight changes to detective's office tweak: Changes to cafe design tweak: Changes to deck 3 dorms design tweak: Changed around some vending machines in deck 3 fix: fixed a non-functional door bolt button in dorm 12 fix: fixed several instances of overlapping wall-mounted objects fix: runtime now spawns inside the CMO's office /:cl: --- maps/endeavour/levels/deck1.dmm | 441 +++++++++++++++++--------------- maps/endeavour/levels/deck2.dmm | 204 +++++++-------- maps/endeavour/levels/deck3.dmm | 281 +++++++++++--------- 3 files changed, 491 insertions(+), 435 deletions(-) diff --git a/maps/endeavour/levels/deck1.dmm b/maps/endeavour/levels/deck1.dmm index 322553f4f1f6..5b8e9da9bb43 100644 --- a/maps/endeavour/levels/deck1.dmm +++ b/maps/endeavour/levels/deck1.dmm @@ -703,10 +703,12 @@ /turf/simulated/floor/tiled/dark, /area/rnd/research/testingrange) "aDo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/junction{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "aDX" = ( @@ -1737,6 +1739,18 @@ "bkR" = ( /turf/simulated/wall/prepainted/exploration, /area/exploration/showers) +"blm" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/navblue/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/endeavour/hallway/d1portforhall) "blo" = ( /obj/effect/floor_decal/borderfloor/corner, /obj/effect/floor_decal/corner/mauve/bordercorner, @@ -1898,6 +1912,21 @@ /obj/item/book/manual/atmospipes, /turf/simulated/floor/wood, /area/library) +"bty" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/navblue/border, +/obj/structure/cable/orange{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel, +/area/endeavour/hallway/d1portforhall) "bul" = ( /obj/structure/closet/crate/bin{ anchored = 1 @@ -2889,10 +2918,11 @@ /turf/simulated/floor/airless, /area/shuttle/civvie/cockpit) "cnv" = ( -/obj/structure/bed/chair/sofa/black/right{ - dir = 1 +/obj/structure/table/woodentable, +/obj/machinery/light{ + dir = 8 }, -/turf/simulated/floor/carpet/purcarpet, +/turf/simulated/floor/carpet, /area/crew_quarters/coffee_shop) "cnZ" = ( /obj/machinery/door/firedoor, @@ -2905,8 +2935,11 @@ /turf/simulated/floor/plating, /area/tether/station/burial) "coH" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 5 +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 9 }, /turf/simulated/floor/tiled/white, /area/endeavour/surfacebase/sauna) @@ -2947,8 +2980,11 @@ /turf/simulated/floor/tiled, /area/rnd/misc_lab) "cpq" = ( -/obj/structure/bed/chair/sofa/black/left, -/turf/simulated/floor/carpet/purcarpet, +/obj/structure/bed/chair/sofa/black/right, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/carpet, /area/crew_quarters/coffee_shop) "cpA" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on, @@ -3062,11 +3098,11 @@ /turf/simulated/floor/wood, /area/crew_quarters/lounge) "cuR" = ( -/obj/machinery/light{ - dir = 1 +/obj/structure/sign/deck/first{ + pixel_x = -32 }, -/turf/simulated/floor/tiled/dark, -/area/endeavour/hallway/d1portforhall) +/turf/simulated/open, +/area/station/stairs_one) "cvc" = ( /obj/effect/floor_decal/corner/blue{ dir = 8 @@ -3127,7 +3163,6 @@ /obj/effect/floor_decal/corner/black/diagonal, /obj/structure/table/marble, /obj/item/material/knife/butch, -/obj/item/material/kitchen/rollingpin, /turf/simulated/floor/tiled/white, /area/crew_quarters/lounge/kitchen_freezer) "cxt" = ( @@ -3377,9 +3412,6 @@ /obj/machinery/door/firedoor{ dir = 8 }, -/obj/structure/cable/green{ - icon_state = "2-8" - }, /turf/simulated/floor/lino, /area/crew_quarters/coffee_shop) "cER" = ( @@ -3849,6 +3881,9 @@ dir = 2; icon_state = "pipe-c" }, +/obj/structure/cable/green{ + icon_state = "2-8" + }, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "cVp" = ( @@ -4103,9 +4138,9 @@ /area/crew_quarters/lounge) "dgz" = ( /obj/structure/sign/deck/first{ - pixel_x = -4 + pixel_x = 32 }, -/turf/simulated/wall/r_wall/prepainted, +/turf/simulated/open, /area/station/stairs_one) "dgF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -4756,9 +4791,6 @@ /area/shuttle/courser/general) "dGT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) @@ -4992,8 +5024,9 @@ /obj/item/reagent_containers/food/condiment/small/saltshaker{ pixel_x = -9 }, -/obj/machinery/camera/network/civilian{ - dir = 8 +/obj/machinery/light_switch{ + pixel_y = 5; + pixel_x = 25 }, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) @@ -5045,7 +5078,9 @@ /turf/simulated/floor/tiled, /area/endeavour/exploration/hallway_aft) "dQJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 1 + }, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "dRe" = ( @@ -5968,10 +6003,10 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 }, -/obj/machinery/light/small{ - dir = 8 +/obj/structure/bed/chair/sofa/black/right{ + dir = 1 }, -/turf/simulated/floor/carpet/purcarpet, +/turf/simulated/floor/carpet, /area/crew_quarters/coffee_shop) "eyp" = ( /obj/structure/cable/green{ @@ -6312,9 +6347,17 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exploration/courser_dock) "eMO" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/endeavour/hallway/d1starboardafthall) +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/navblue/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/endeavour/hallway/d1portforhall) "eNt" = ( /obj/machinery/holopad, /turf/simulated/floor/carpet/bcarpet, @@ -7046,6 +7089,13 @@ dir = 10 }, /obj/structure/closet/secure_closet/freezer/kitchen, +/obj/item/storage/fancy/egg_box, +/obj/item/storage/fancy/egg_box, +/obj/item/reagent_containers/food/drinks/milk, +/obj/item/reagent_containers/food/drinks/milk, +/obj/item/reagent_containers/food/drinks/milk, +/obj/item/reagent_containers/food/drinks/bottle/coconutmilk, +/obj/item/reagent_containers/food/drinks/bottle/coconutmilk, /turf/simulated/floor/tiled/white, /area/crew_quarters/lounge/kitchen_freezer) "fjs" = ( @@ -7156,10 +7206,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/light, /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d1portforhall) "flK" = ( -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -7914,13 +7964,11 @@ /turf/simulated/floor/reinforced/airless, /area/rnd/test_area) "fLt" = ( -/obj/structure/bed/chair/sofa/black/corner{ - dir = 4 - }, -/obj/machinery/camera/network/civilian{ +/obj/effect/floor_decal/spline/fancy/wood{ dir = 4 }, -/turf/simulated/floor/carpet/purcarpet, +/obj/structure/bed/chair/sofa/black/left, +/turf/simulated/floor/carpet, /area/crew_quarters/coffee_shop) "fLD" = ( /obj/machinery/light/small{ @@ -8839,15 +8887,15 @@ /turf/simulated/floor/grass, /area/hydroponics/garden) "goT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, /obj/structure/flora/pottedplant/minitree, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" }, /obj/machinery/light, +/obj/structure/cable/green{ + icon_state = "4-8" + }, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "gpc" = ( @@ -8871,10 +8919,10 @@ /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d1starboardamidhall) "gpv" = ( -/obj/structure/bed/chair/sofa/black/corner{ - dir = 4 +/obj/structure/bed/chair/comfy/black{ + dir = 8 }, -/turf/simulated/floor/carpet/purcarpet, +/turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "gpx" = ( /obj/effect/floor_decal/borderfloorblack/corner{ @@ -9114,11 +9162,10 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/holopad, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "gCI" = ( @@ -11949,10 +11996,13 @@ /turf/simulated/wall/r_wall/prepainted/medical, /area/hallway/secondary/docking_hallway2) "iES" = ( -/obj/structure/bed/chair/comfy/black, /obj/machinery/light{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "iEX" = ( @@ -13527,6 +13577,7 @@ /area/maintenance/tool_storage) "jKd" = ( /obj/structure/table/woodentable, +/obj/item/instrument/harmonica, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "jKs" = ( @@ -13616,12 +13667,9 @@ /turf/simulated/floor/plating, /area/vacant/vacant_bar) "jNH" = ( -/obj/machinery/light_switch{ - pixel_x = -25; - pixel_y = -25 - }, -/turf/simulated/wall/prepainted/civilian, -/area/crew_quarters/lounge/kitchen_freezer) +/obj/structure/flora/pottedplant/minitree, +/turf/simulated/floor/wood, +/area/crew_quarters/coffee_shop) "jOl" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /obj/structure/catwalk, @@ -14639,10 +14687,8 @@ /turf/simulated/floor/plating, /area/vacant/vacant_bar) "kvQ" = ( -/obj/structure/bed/chair/sofa/black/corner{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, +/obj/machinery/holopad, +/turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "kvR" = ( /obj/machinery/door/morgue, @@ -15076,9 +15122,6 @@ dir = 4; icon_state = "pipe-c" }, -/obj/structure/cable/green{ - icon_state = "4-8" - }, /obj/machinery/light{ dir = 1 }, @@ -15471,16 +15514,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d1afthall) -"kYx" = ( -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 4 - }, -/obj/machinery/power/apc/north_mount, -/obj/structure/cable/green{ - icon_state = "0-4" - }, -/turf/simulated/floor/carpet/purcarpet, -/area/crew_quarters/coffee_shop) "kYE" = ( /obj/machinery/power/port_gen/pacman/mrs{ anchored = 1 @@ -15663,13 +15696,6 @@ }, /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d1starboardforhall) -"ljP" = ( -/obj/machinery/atmospherics/component/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/bed/chair/comfy/black, -/turf/simulated/floor/wood, -/area/crew_quarters/coffee_shop) "lkN" = ( /obj/structure/table/woodentable, /obj/item/reagent_containers/food/drinks/shaker, @@ -16334,13 +16360,6 @@ /obj/item/book/manual/robotics_cyborgs, /turf/simulated/floor/wood, /area/library) -"lMF" = ( -/obj/structure/bed/chair/sofa/black/left, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/crew_quarters/coffee_shop) "lMT" = ( /obj/machinery/door/firedoor{ dir = 1 @@ -17117,12 +17136,17 @@ /obj/effect/floor_decal/corner/navblue/border{ dir = 1 }, -/obj/machinery/fire_alarm/north_mount, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /obj/machinery/light{ dir = 1 }, /turf/simulated/floor/tiled/steel, -/area/endeavour/hallway/d1portamidhall) +/area/endeavour/hallway/d1portforhall) "mmH" = ( /obj/item/clothing/mask/muzzle, /turf/simulated/floor/plating, @@ -17854,7 +17878,16 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 }, -/turf/simulated/floor/carpet/purcarpet, +/obj/structure/table/woodentable, +/obj/item/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3; + pixel_y = 6 + }, +/obj/item/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3; + pixel_y = 6 + }, +/turf/simulated/floor/carpet, /area/crew_quarters/coffee_shop) "mNu" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, @@ -18576,11 +18609,14 @@ /turf/space/basic, /area/space) "noo" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/bed/chair/sofa/black/left, +/obj/structure/window/reinforced{ dir = 1 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/carpet, /area/crew_quarters/coffee_shop) "noM" = ( /obj/structure/table/reinforced, @@ -19227,12 +19263,7 @@ }, /obj/effect/floor_decal/corner/black/diagonal, /obj/structure/table/marble, -/obj/item/storage/fancy/egg_box{ - pixel_y = 11 - }, -/obj/item/storage/fancy/egg_box{ - pixel_y = 5 - }, +/obj/item/material/kitchen/rollingpin, /turf/simulated/floor/tiled/white, /area/crew_quarters/lounge/kitchen_freezer) "nLZ" = ( @@ -19322,10 +19353,10 @@ /turf/simulated/floor/plating, /area/maintenance/substation/exploration) "nPI" = ( -/obj/structure/table/woodentable, -/obj/item/instrument/harmonica, -/obj/machinery/recharger, /obj/machinery/light, +/obj/structure/bed/chair/comfy/black{ + dir = 4 + }, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "nPK" = ( @@ -19403,10 +19434,12 @@ /turf/simulated/floor/plating, /area/tether/station/burial) "nSH" = ( -/obj/structure/bed/chair/sofa/black{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/carpet/purcarpet, +/turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "nSV" = ( /obj/random/maintenance/security, @@ -21182,8 +21215,8 @@ /turf/simulated/wall/r_wall/prepainted/command, /area/crew_quarters/heads/hop) "piB" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/carpet/purcarpet, +/obj/structure/bed/chair/sofa/black/right, +/turf/simulated/floor/carpet, /area/crew_quarters/coffee_shop) "piW" = ( /obj/structure/catwalk, @@ -21930,12 +21963,15 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/exploration/excursion_dock) "pOC" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 5 - }, /obj/structure/window/reinforced{ dir = 8 }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, /turf/simulated/floor/tiled/white, /area/endeavour/surfacebase/sauna) "pOJ" = ( @@ -23218,17 +23254,13 @@ /obj/effect/floor_decal/corner/navblue/border{ dir = 1 }, -/obj/item/radio/intercom{ - dir = 1; - name = "Station Intercom (General)"; - pixel_y = 26 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/fire_alarm/north_mount, /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d1portamidhall) "qOI" = ( @@ -23573,7 +23605,9 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/lounge) "rbv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 1 + }, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "rbV" = ( @@ -24185,11 +24219,9 @@ /turf/simulated/floor/tiled, /area/rnd/misc_lab) "rzS" = ( -/obj/machinery/fire_alarm/south_mount{ - pixel_y = -24 - }, -/obj/machinery/atmospherics/component/unary/vent_pump/on{ - dir = 4 +/obj/machinery/power/apc/south_mount, +/obj/structure/cable/green{ + icon_state = "0-4" }, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) @@ -24808,12 +24840,15 @@ /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d1starboardafthall) "sbD" = ( -/obj/effect/floor_decal/corner_techfloor_grid{ - dir = 5 - }, /obj/structure/window/reinforced{ dir = 4 }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, /turf/simulated/floor/tiled/white, /area/endeavour/surfacebase/sauna) "sbG" = ( @@ -25282,13 +25317,6 @@ "svt" = ( /turf/simulated/wall/prepainted, /area/endeavour/hallway/d1portamidhall) -"svI" = ( -/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/bed/chair/comfy/black, -/turf/simulated/floor/wood, -/area/crew_quarters/coffee_shop) "svZ" = ( /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -25695,8 +25723,14 @@ /turf/simulated/floor/wood, /area/endeavour/hallway/d1fwdmaint) "sNr" = ( -/obj/structure/table/woodentable, /obj/machinery/air_alarm/south_mount, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/camera/network/civilian{ + dir = 8 + }, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "sNQ" = ( @@ -26236,15 +26270,6 @@ /obj/map_helper/access_helper/airlock/station/exploration/department, /turf/simulated/floor/tiled/techfloor/grid, /area/exploration/courser_dock) -"tgV" = ( -/obj/structure/bed/chair/sofa/black/corner{ - dir = 1 - }, -/obj/machinery/camera/network/civilian{ - dir = 4 - }, -/turf/simulated/floor/carpet/purcarpet, -/area/crew_quarters/coffee_shop) "tgY" = ( /obj/machinery/body_scanconsole, /obj/effect/floor_decal/corner_steel_grid{ @@ -27163,11 +27188,10 @@ /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d1portamidhall) "tLv" = ( -/obj/structure/bed/chair/sofa/black/right{ +/obj/structure/bed/chair/sofa/black/left{ dir = 1 }, -/obj/machinery/light/small, -/turf/simulated/floor/carpet/purcarpet, +/turf/simulated/floor/carpet, /area/crew_quarters/coffee_shop) "tLz" = ( /obj/machinery/door/firedoor, @@ -30260,6 +30284,21 @@ /obj/effect/floor_decal/sign/a, /turf/simulated/wall/r_wall/prepainted, /area/hallway/secondary/docking_hallway2) +"vQT" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/navgold/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/endeavour/hallway/d1starboardafthall) "vRe" = ( /obj/structure/table/reinforced, /obj/machinery/air_alarm/alarms_hidden{ @@ -30992,9 +31031,8 @@ /turf/simulated/floor/tiled/dark, /area/chapel/main) "wtM" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 4 }, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) @@ -32434,9 +32472,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/structure/cable/green{ - icon_state = "4-8" - }, +/obj/machinery/fire_alarm/west_mount, /turf/simulated/floor/wood, /area/crew_quarters/coffee_shop) "xwO" = ( @@ -33519,9 +33555,6 @@ /obj/effect/floor_decal/corner/navblue/border{ dir = 1 }, -/obj/machinery/light{ - dir = 1 - }, /obj/machinery/computer/timeclock/premade/north, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -43349,7 +43382,7 @@ jLe aEU aEU aEU -dgz +vdF iAO oiv fcG @@ -43541,7 +43574,7 @@ jLe jLe jLe aEU -iDg +cuR iDg fVP kHh @@ -43743,7 +43776,7 @@ brQ xuO lOm iDg -iDg +dgz aEU dZr dZr @@ -43937,7 +43970,7 @@ rAN gKk coS wXu -vRx +aEU aEU nCl dZr @@ -48970,7 +49003,7 @@ xkO wim aNK idq -vEN +ojQ vHL bdJ pEr @@ -49166,7 +49199,7 @@ wim aNK bRG vHL -bdJ +bty pEr kgt pEr @@ -50129,7 +50162,7 @@ wim aNK jeQ wim -bag +aNK wim wim wim @@ -50321,9 +50354,9 @@ wim wim jAh aNK -lIc wim -aNK +wim +bag wim wim wim @@ -50515,8 +50548,8 @@ wim exi vVa aNK -dkm -nAm +lIc +wim aNK wqg wim @@ -50706,16 +50739,16 @@ jLe wim akq wim +wim pDT -aFa -aFa -aFa -aFa -aFa -aFa -aFa -aFa -aFa +aNK +dkm +nAm +aNK +wim +wim +wim +aNK ylz vHL aGw @@ -50902,15 +50935,15 @@ aFa aFa aFa aFa -tgV -nSH -gpv aFa -kvQ -nSH -fLt -mYH -veS +aFa +aFa +aFa +aFa +aFa +aFa +aFa +mmC nYt sqc yfL @@ -51096,12 +51129,12 @@ nBm aFa jEi aFa -lMF +aFa piB cnv -aFa +tLv cpq -piB +cnv tLv mYH leE @@ -51113,7 +51146,7 @@ uGL ueo iKk ngf -vdU +vQT vdU nnH ojo @@ -51290,13 +51323,13 @@ gWe aFa eRb aFa -kYx -mMT +aFa +fLt mMT eyn +noo mMT -mMT -mMT +eyn mYH veS kAE @@ -51306,7 +51339,7 @@ wXu mrv ngd nwU -eMO +qOo vdF wXu lJC @@ -51486,10 +51519,10 @@ mdn ahR xwz eaK -eaK -eaK lDo eaK +eaK +wtM rzS aFa oxw @@ -51680,7 +51713,7 @@ anY aFa kLc lus -lus +nSH gCd dGT aDo @@ -51886,7 +51919,7 @@ eUP vdF wXu vdF -cuR +ngd wPz qOo qdt @@ -51894,7 +51927,7 @@ wXu lDc xgB iuy -baf +saW gHB lmG hfR @@ -52072,14 +52105,14 @@ ifX cPp eaK gnc -rBZ +jNH dCX sTI kAE fef ukf ukf -ukf +blm nkN thT wus @@ -52088,7 +52121,7 @@ msQ msQ iNb iuy -saW +baf wUJ hfR hfR @@ -52264,15 +52297,15 @@ icA pzu ifX cPp -eaK -wtM -noo +kvQ +gnc +rBZ aFa veS kAE oDE uGL -uGL +eMO uGL quJ vYT @@ -52459,7 +52492,7 @@ mwp ifX cPp eaK -eaK +gnc nPI aFa oEW @@ -52653,7 +52686,7 @@ flK ifX gmJ rbv -svI +gnc jKd mYH jie @@ -52847,8 +52880,8 @@ wLm pcR loh dQJ -ljP -jKd +gnc +gpv mYH veS dkq @@ -53426,7 +53459,7 @@ wim fZy mkq qCb -jNH +fZy fZy fZy fZy @@ -53819,7 +53852,7 @@ dMa dMa mEk fZy -mmC +nkQ kEh qcV vGD diff --git a/maps/endeavour/levels/deck2.dmm b/maps/endeavour/levels/deck2.dmm index 4925eb492dd8..10601e1729b1 100644 --- a/maps/endeavour/levels/deck2.dmm +++ b/maps/endeavour/levels/deck2.dmm @@ -1380,13 +1380,11 @@ /turf/simulated/floor/plating, /area/maintenance/research) "aRl" = ( -/obj/effect/paint/babyblue, -/obj/structure/window/reinforced/polarized/full{ +/obj/spawner/window/low_wall/reinforced/electrochromic/full/firelocks, +/obj/map_helper/electrochromatic_linker{ id = "cmo_office" }, -/obj/machinery/door/firedoor{ - dir = 1 - }, +/obj/effect/paint/babyblue, /turf/simulated/floor/plating, /area/crew_quarters/heads/cmo) "aSs" = ( @@ -3476,13 +3474,11 @@ /turf/simulated/floor/tiled/techfloor, /area/rnd/robotics/morgue) "ccB" = ( -/obj/effect/paint/babyblue, -/obj/structure/window/reinforced/polarized/full{ +/obj/spawner/window/low_wall/reinforced/electrochromic/full/firelocks, +/obj/map_helper/electrochromatic_linker{ id = "or1" }, -/obj/machinery/door/firedoor{ - dir = 1 - }, +/obj/effect/paint/babyblue, /turf/simulated/floor/plating, /area/medical/surgeryprep) "ccN" = ( @@ -4904,13 +4900,15 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d2afthall) "cSd" = ( -/obj/machinery/camera/network/civilian, /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, /obj/effect/floor_decal/corner/navblue/border{ dir = 1 }, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d2fwdhall) "cSK" = ( @@ -9339,14 +9337,12 @@ /turf/simulated/floor/tiled, /area/medical/medbay_primary_storage) "fCt" = ( -/obj/machinery/camera/network/civilian{ - dir = 1 - }, /obj/effect/floor_decal/borderfloorblack, /obj/effect/floor_decal/corner/navgold/border, /obj/structure/disposalpipe/segment{ dir = 8 }, +/obj/machinery/light, /turf/simulated/floor/tiled, /area/endeavour/hallway/d2fwdhall) "fCE" = ( @@ -12628,13 +12624,11 @@ /turf/simulated/floor/plating, /area/rnd/workshop) "hxs" = ( -/obj/effect/paint/babyblue, -/obj/structure/window/reinforced/polarized/full{ +/obj/spawner/window/low_wall/reinforced/electrochromic/full/firelocks, +/obj/map_helper/electrochromatic_linker{ id = "exam_1" }, -/obj/machinery/door/firedoor{ - dir = 8 - }, +/obj/effect/paint/babyblue, /turf/simulated/floor/plating, /area/medical/exam_room/exam_1) "hxy" = ( @@ -13464,11 +13458,11 @@ /turf/simulated/floor/tiled/white, /area/medical/resleeving) "hYp" = ( -/obj/machinery/light, /obj/effect/floor_decal/spline/fancy/wood, /obj/structure/disposalpipe/segment{ dir = 8 }, +/obj/machinery/light, /turf/simulated/floor/wood, /area/tether/station/public_meeting_room) "hZk" = ( @@ -14646,6 +14640,7 @@ dir = 1 }, /obj/machinery/air_alarm/north_mount, +/mob/living/simple_mob/animal/passive/cat/runtime, /turf/simulated/floor/tiled/dark, /area/crew_quarters/heads/cmo) "iIy" = ( @@ -15853,16 +15848,6 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/endeavour/hallway/d2fwdmaint) -"jym" = ( -/obj/effect/paint/babyblue, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/structure/window/reinforced/polarized/full{ - id = "oncall" - }, -/turf/simulated/floor/plating, -/area/medical/oncall_room) "jyt" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 8 @@ -24176,9 +24161,20 @@ /turf/simulated/floor/tiled/white, /area/medical/psych_ward) "oHz" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/endeavour/hallway/d2portafthall) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/navblue/border{ + dir = 1 + }, +/obj/machinery/air_alarm{ + pixel_y = 22 + }, +/turf/simulated/floor/tiled, +/area/endeavour/hallway/d2portamidhall) "oIm" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -26418,13 +26414,11 @@ /turf/simulated/floor/tiled, /area/holodeck_control) "pNT" = ( -/obj/effect/paint/babyblue, -/obj/structure/window/reinforced/polarized/full{ +/obj/spawner/window/low_wall/reinforced/electrochromic/full/firelocks, +/obj/map_helper/electrochromatic_linker{ id = "ward_b" }, -/obj/machinery/door/firedoor{ - dir = 8 - }, +/obj/effect/paint/babyblue, /turf/simulated/floor/plating, /area/medical/patient_b) "pNX" = ( @@ -27057,12 +27051,14 @@ /turf/simulated/floor/tiled, /area/medical/morgue) "qaO" = ( -/obj/machinery/light, /obj/effect/floor_decal/borderfloorblack, /obj/effect/floor_decal/corner/navgold/border, /obj/structure/disposalpipe/junction{ dir = 8 }, +/obj/machinery/camera/network/civilian{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d2fwdhall) "qbw" = ( @@ -28654,18 +28650,22 @@ /turf/simulated/floor/tiled, /area/rnd/hallway) "qYx" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "1-2" }, -/obj/machinery/camera/network/civilian, -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 }, -/obj/effect/floor_decal/corner/navblue/border{ - dir = 1 +/obj/effect/floor_decal/corner/green/border{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/endeavour/hallway/d2portamidhall) +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/medical/virology_aft_access) "qYN" = ( /obj/structure/table/standard, /obj/item/tape_recorder{ @@ -28690,13 +28690,11 @@ /turf/simulated/floor/plating, /area/rnd/research/researchdivision) "qZA" = ( -/obj/effect/paint/babyblue, -/obj/structure/window/reinforced/polarized/full{ +/obj/spawner/window/low_wall/reinforced/electrochromic/full/firelocks, +/obj/map_helper/electrochromatic_linker{ id = "ward_c" }, -/obj/machinery/door/firedoor{ - dir = 8 - }, +/obj/effect/paint/babyblue, /turf/simulated/floor/plating, /area/medical/patient_c) "rau" = ( @@ -28786,13 +28784,11 @@ /turf/simulated/floor/tiled/steel_grid, /area/rnd/reception_desk) "rbX" = ( -/obj/effect/paint/babyblue, -/obj/structure/window/reinforced/polarized/full{ +/obj/spawner/window/low_wall/reinforced/electrochromic/full/firelocks, +/obj/map_helper/electrochromatic_linker{ id = "oncall" }, -/obj/machinery/door/firedoor{ - dir = 8 - }, +/obj/effect/paint/babyblue, /turf/simulated/floor/plating, /area/medical/oncall_room) "rcb" = ( @@ -30401,6 +30397,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 4 }, +/obj/machinery/camera/network/civilian, /turf/simulated/floor/tiled, /area/endeavour/hallway/d2fwdhall) "scT" = ( @@ -31208,13 +31205,11 @@ /turf/simulated/floor/plating, /area/maintenance/research/lower) "sFu" = ( -/obj/effect/paint/babyblue, -/obj/structure/window/reinforced/polarized/full{ +/obj/spawner/window/low_wall/reinforced/electrochromic/full/firelocks, +/obj/map_helper/electrochromatic_linker{ id = "or1obs" }, -/obj/machinery/door/firedoor{ - dir = 1 - }, +/obj/effect/paint/babyblue, /turf/simulated/floor/plating, /area/medical/surgery) "sFK" = ( @@ -32572,13 +32567,11 @@ /turf/simulated/floor/plating, /area/maintenance/medbay/aft) "twc" = ( -/obj/effect/paint/babyblue, -/obj/structure/window/reinforced/polarized/full{ +/obj/spawner/window/low_wall/reinforced/electrochromic/full/firelocks, +/obj/map_helper/electrochromatic_linker{ id = "ward_a" }, -/obj/machinery/door/firedoor{ - dir = 8 - }, +/obj/effect/paint/babyblue, /turf/simulated/floor/plating, /area/medical/patient_a) "twx" = ( @@ -33244,9 +33237,6 @@ /obj/structure/sign/biohazard{ pixel_x = -32 }, -/obj/machinery/light{ - dir = 8 - }, /turf/simulated/floor/tiled/white, /area/medical/virology_aft_access) "tQp" = ( @@ -34235,13 +34225,11 @@ /turf/simulated/floor/tiled/dark, /area/rnd/anomaly_lab/containment_one) "uxG" = ( -/obj/effect/paint/babyblue, -/obj/structure/window/reinforced/polarized/full{ +/obj/spawner/window/low_wall/reinforced/electrochromic/full/firelocks, +/obj/map_helper/electrochromatic_linker{ id = "or2" }, -/obj/machinery/door/firedoor{ - dir = 1 - }, +/obj/effect/paint/babyblue, /turf/simulated/floor/plating, /area/medical/surgeryprep) "uyr" = ( @@ -34642,13 +34630,11 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d2portamidhall) "uMG" = ( -/obj/effect/paint/babyblue, -/obj/structure/window/reinforced/polarized/full{ +/obj/spawner/window/low_wall/reinforced/electrochromic/full/firelocks, +/obj/map_helper/electrochromatic_linker{ id = "exam_2" }, -/obj/machinery/door/firedoor{ - dir = 8 - }, +/obj/effect/paint/babyblue, /turf/simulated/floor/plating, /area/medical/exam_room/exam_2) "uML" = ( @@ -34704,9 +34690,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/air_alarm{ - pixel_y = 22 - }, /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, @@ -36315,12 +36298,12 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d1starboardforhall) "vUJ" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/structure/disposalpipe/segment{ dir = 8 }, -/mob/living/simple_mob/animal/passive/cat/runtime, -/turf/simulated/floor/carpet/blucarpet, -/area/crew_quarters/medbreak) +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/endeavour/hallway/d2fwdhall) "vUK" = ( /obj/machinery/holopad, /obj/effect/floor_decal/corner/green{ @@ -38124,13 +38107,11 @@ /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) "wQc" = ( -/obj/effect/paint/babyblue, -/obj/structure/window/reinforced/polarized/full{ +/obj/spawner/window/low_wall/reinforced/electrochromic/full/firelocks, +/obj/map_helper/electrochromatic_linker{ id = "or2obs" }, -/obj/machinery/door/firedoor{ - dir = 1 - }, +/obj/effect/paint/babyblue, /turf/simulated/floor/plating, /area/medical/surgery2) "wQh" = ( @@ -38228,13 +38209,11 @@ /turf/simulated/floor/tiled/techfloor, /area/medical/morgue) "wRU" = ( -/obj/effect/paint/babyblue, -/obj/structure/window/reinforced/polarized/full{ +/obj/spawner/window/low_wall/reinforced/electrochromic/full/firelocks, +/obj/map_helper/electrochromatic_linker{ id = "medbreak" }, -/obj/machinery/door/firedoor{ - dir = 8 - }, +/obj/effect/paint/babyblue, /turf/simulated/floor/plating, /area/crew_quarters/medbreak) "wSf" = ( @@ -39931,6 +39910,9 @@ /obj/effect/floor_decal/corner/navblue/border{ dir = 8 }, +/obj/machinery/camera/network/civilian{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d2portamidhall) "xRM" = ( @@ -50995,7 +50977,7 @@ qpq vUa qpq rkZ -mSd +cja uJM mSd fCb @@ -51383,9 +51365,9 @@ kCt kCt kCt kCt -cja +aEp uJM -oHz +mSd qIV oaU oaU @@ -53943,7 +53925,7 @@ pky pUT haG hXy -jym +rbX ctW ces fKS @@ -57417,7 +57399,7 @@ mdU jZY hor vpm -vUJ +hRR hRR wEl lwt @@ -58180,7 +58162,7 @@ qIz xGm xGm qIz -smh +oHz ftU dub qIz @@ -58374,7 +58356,7 @@ nYN hBs cny xGm -qYx +smh ftU uMm xGm @@ -59162,7 +59144,7 @@ dly bIN geo tQh -mog +qYx mog wJr ijc @@ -71171,7 +71153,7 @@ gCJ mNh nfQ iTE -bbD +luA vhp pic yiM @@ -71365,7 +71347,7 @@ pRW mNh mNh iTE -luA +bbD vhp pic sBd @@ -71381,7 +71363,7 @@ xGm sBd pic oCg -oIp +vUJ nhq nhq nhq @@ -72351,7 +72333,7 @@ iNI baj xAr ncC -hYp +wWS agO lmG qBd @@ -72545,7 +72527,7 @@ ieG baj xAr cfw -wWS +hYp agO qBd jRE diff --git a/maps/endeavour/levels/deck3.dmm b/maps/endeavour/levels/deck3.dmm index 7fc995e9ed81..1a2e302b88d5 100644 --- a/maps/endeavour/levels/deck3.dmm +++ b/maps/endeavour/levels/deck3.dmm @@ -3164,7 +3164,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/light, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4282,7 +4281,6 @@ /turf/simulated/floor/tiled/monotile, /area/endeavour/hallway/d3afthall) "cQG" = ( -/obj/machinery/light, /obj/structure/cable/orange{ icon_state = "4-8" }, @@ -4291,6 +4289,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/fire_alarm/south_mount, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portforhall) "cRh" = ( @@ -6435,8 +6434,8 @@ pixel_y = -28 }, /obj/machinery/button/remote/airlock{ - id = "dorm13"; - name = "Room 13 Lock"; + id = "dorm12"; + name = "Room 12 Lock"; pixel_x = 5; pixel_y = -27; specialfunctions = 4 @@ -7042,12 +7041,22 @@ /turf/simulated/floor/wood, /area/security/breakroom) "ewr" = ( -/obj/item/radio/intercom{ - dir = 1; - name = "Station Intercom (General)"; - pixel_y = 21 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 }, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/corner/navgold/border{ + dir = 8 + }, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, /area/endeavour/hallway/d3afthall) "ewu" = ( /turf/simulated/wall/r_wall/prepainted, @@ -11483,7 +11492,6 @@ /turf/simulated/floor/tiled, /area/security/lobby) "hmk" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/light/small{ dir = 4 }, @@ -13139,6 +13147,9 @@ /area/tether/surfacebase/entertainment) "iuv" = ( /obj/machinery/air_alarm/east_mount, +/obj/structure/cable/green{ + icon_state = "1-2" + }, /turf/simulated/floor/tiled/dark, /area/endeavour/station/stairs_three) "iva" = ( @@ -14973,7 +14984,6 @@ /area/crew_quarters/sleep/Dorm_4) "jLH" = ( /obj/structure/catwalk, -/obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment{ dir = 1 }, @@ -14987,7 +14997,6 @@ /turf/simulated/floor/plating, /area/maintenance/trash_pit) "jLP" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, @@ -15058,12 +15067,17 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/heads/hos) "jNW" = ( -/obj/structure/cable/green{ +/obj/structure/cable/orange{ icon_state = "4-8" }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark, -/area/endeavour/hallway/d3fwdhall) +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/navblue/border, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/endeavour/hallway/d3portforhall) "jON" = ( /obj/structure/lattice, /obj/structure/grille, @@ -15884,8 +15898,9 @@ /obj/structure/cable/green{ icon_state = "1-4" }, -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" }, /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) @@ -16703,12 +16718,11 @@ /turf/simulated/floor/wood, /area/crew_quarters/game_room) "kZu" = ( -/obj/structure/bed/chair/comfy/beige{ - dir = 4 - }, /obj/machinery/light/small{ dir = 8 }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, /turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/recreation_area) "kZA" = ( @@ -16877,12 +16891,6 @@ /obj/item/camera, /turf/simulated/floor/tiled/old_cargo/gray, /area/security/security_processing) -"lfy" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/turf/simulated/floor/carpet/turcarpet, -/area/crew_quarters/recreation_area) "lfB" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/spray/luminol, @@ -16891,11 +16899,23 @@ /turf/simulated/floor/tiled/old_cargo/white, /area/security/forensics) "lfS" = ( -/obj/machinery/light{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 1 }, -/turf/simulated/floor/tiled/dark, -/area/endeavour/station/stairs_three) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/navblue/border{ + dir = 4 + }, +/obj/machinery/power/apc/east_mount, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled, +/area/endeavour/hallway/d3fwdhall) "lgj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -20150,13 +20170,16 @@ "nvp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/junction, /obj/structure/cable/green{ icon_state = "2-4" }, /obj/structure/cable/green{ icon_state = "2-8" }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) "nvw" = ( @@ -20507,7 +20530,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/fire_alarm/north_mount, /obj/machinery/light{ dir = 1; pixel_y = 20 @@ -21815,14 +21837,18 @@ /turf/simulated/floor/tiled/dark, /area/security/tactical) "owv" = ( -/obj/machinery/door/firedoor{ +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/borderfloorblack{ dir = 8 }, -/obj/machinery/light{ - dir = 1 +/obj/effect/floor_decal/corner/navblue/border{ + dir = 8 }, -/turf/simulated/floor/tiled/dark, -/area/endeavour/station/stairs_three) +/obj/machinery/air_alarm/west_mount, +/turf/simulated/floor/tiled, +/area/endeavour/hallway/d3fwdhall) "owH" = ( /obj/machinery/shower{ dir = 4 @@ -22664,9 +22690,6 @@ /turf/simulated/floor/tiled/dark, /area/maintenance/starboardsolar) "pab" = ( -/obj/structure/cable/green{ - icon_state = "1-4" - }, /obj/effect/floor_decal/borderfloorblack{ dir = 8 }, @@ -22817,11 +22840,13 @@ /turf/simulated/floor/tiled/old_tile/gray, /area/security/range) "pgJ" = ( +/obj/structure/flora/pottedplant/smalltree, +/obj/machinery/light/small{ + dir = 8 + }, /obj/machinery/air_alarm{ pixel_y = 22 }, -/obj/machinery/camera/network/civilian, -/obj/structure/flora/pottedplant/smalltree, /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) "phb" = ( @@ -23317,9 +23342,22 @@ /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3portforhall) "psK" = ( -/obj/machinery/light, -/turf/simulated/floor/tiled/dark, -/area/endeavour/hallway/d3afthall) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/navblue/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/endeavour/hallway/d3fwdhall) "ptj" = ( /obj/machinery/air_alarm{ pixel_y = 22 @@ -23660,9 +23698,6 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_6) "pHf" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, @@ -23783,6 +23818,7 @@ icon_state = "0-2" }, /obj/effect/floor_decal/spline/plain, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/recreation_area) "pNn" = ( @@ -24614,7 +24650,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/fire_alarm/north_mount, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/dark, /area/endeavour/hallway/d3fwdhall) @@ -25371,11 +25406,10 @@ /obj/structure/extinguisher_cabinet{ pixel_x = 27 }, -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal, /obj/machinery/camera/network/civilian{ dir = 8 }, +/obj/machinery/vending/cola, /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) "qNM" = ( @@ -25953,8 +25987,9 @@ /turf/simulated/floor/plating, /area/maintenance/bar/catwalk) "rme" = ( -/obj/structure/table/woodentable, -/obj/machinery/recharger, +/obj/structure/bed/chair/comfy/beige{ + dir = 4 + }, /turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/recreation_area) "rmU" = ( @@ -27609,12 +27644,6 @@ }, /turf/simulated/floor/tiled, /area/security/hanger) -"sms" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/wall/r_wall/prepainted, -/area/crew_quarters/recreation_area) "smC" = ( /obj/structure/cable/green{ icon_state = "1-8" @@ -28231,6 +28260,21 @@ }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/kitchen) +"sEO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/navgold/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/endeavour/hallway/d3fwdhall) "sFb" = ( /obj/effect/floor_decal/corner/blue{ dir = 6 @@ -28778,9 +28822,6 @@ /turf/simulated/floor/wood, /area/quartermaster/office) "sXK" = ( -/obj/machinery/light{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/steel, @@ -29171,12 +29212,12 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/toilet) "tkJ" = ( -/obj/structure/bed/chair/comfy/beige{ - dir = 8 - }, /obj/effect/floor_decal/spline/plain{ dir = 4 }, +/obj/structure/bed/chair/comfy/beige{ + dir = 8 + }, /turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/recreation_area) "tkT" = ( @@ -29765,9 +29806,6 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) "tGS" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, /turf/simulated/floor/tiled/dark, /area/endeavour/hallway/d3fwdhall) "tHm" = ( @@ -29787,7 +29825,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 4 }, -/obj/machinery/vending/fitness, +/obj/machinery/vending/snack, /turf/simulated/floor/tiled/dark, /area/crew_quarters/recreation_area) "tHM" = ( @@ -29827,9 +29865,8 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/power/apc/south_mount, /obj/structure/cable/green{ - icon_state = "0-8" + icon_state = "1-8" }, /turf/simulated/floor/tiled/dark, /area/endeavour/station/stairs_three) @@ -30865,6 +30902,13 @@ /obj/machinery/fire_alarm/north_mount, /turf/simulated/floor/tiled/old_cargo/gray, /area/security/evidence_storage) +"upe" = ( +/obj/machinery/power/apc/east_mount, +/obj/structure/cable/green{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/dark, +/area/endeavour/station/stairs_three) "upo" = ( /obj/structure/catwalk, /obj/structure/cable/green{ @@ -31382,12 +31426,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/air_alarm{ - pixel_y = 22 - }, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/dark, /area/endeavour/hallway/d3fwdhall) @@ -32091,16 +32129,19 @@ /turf/simulated/floor/tiled/dark, /area/maintenance/starboardsolar) "vfr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable/green{ + icon_state = "1-2" }, -/obj/structure/cable/green, -/obj/machinery/power/apc/south_mount, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/corner/navblue/border{ + dir = 8 + }, +/obj/structure/cable/green{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, /area/endeavour/hallway/d3fwdhall) "vfK" = ( /obj/effect/floor_decal/borderfloorblack, @@ -32530,9 +32571,6 @@ /turf/simulated/floor/tiled, /area/crew_quarters/fitness) "vpW" = ( -/obj/structure/cable/green{ - icon_state = "2-8" - }, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/dark, /area/endeavour/hallway/d3fwdhall) @@ -34261,6 +34299,9 @@ /obj/effect/floor_decal/corner/navblue/bordercorner2{ dir = 4 }, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3portamidhall) "wpe" = ( @@ -48796,9 +48837,9 @@ iJC xPB xPB bWK -ewr +gyJ byU -psK +gyJ bWK xPB xPB @@ -48993,7 +49034,7 @@ moE wTk prg cua -ayc +ewr ayc ayc qJx @@ -49969,7 +50010,7 @@ kuK syH pXE vPs -dmh +qmV oSF uqf qMv @@ -50163,8 +50204,8 @@ kSn syH awA wuH -pAC -cce +dmh +oSF uBN mEG jAj @@ -50357,8 +50398,8 @@ kSn syH awA wuH -aWe -vKG +pAC +cce bnZ bnZ bnZ @@ -50551,7 +50592,7 @@ cZa fiy kEF wuH -qmV +aWe vKG dfI bnZ @@ -50945,7 +50986,7 @@ fWX pwE pwE pwE -vjb +qqF urn uxf vjb @@ -53059,7 +53100,7 @@ lDd eNB dns xiG -sid +cQG syH kSn syH @@ -55586,7 +55627,7 @@ eZW xPB xPB bWK -owv +dFI dFI nKD bWK @@ -55766,16 +55807,16 @@ yab lUu fju fju -qmY +fju ewu -uIh +rme oyF jvb rks vaf sTd bBc -cQG +sid eqa bDG qHq @@ -55959,10 +56000,10 @@ fju yab izs fju +fju +qmY ewu -sms -ewu -rme +uIh oyF mkn jHr @@ -56153,9 +56194,9 @@ lgM yab lUu fju -soz -lfy -lfy +ewu +ewu +ewu tkJ cBe mkn @@ -56163,12 +56204,12 @@ jHr vaf txu eTr -sid +jNW eZW xPB xPB eCk -lfS +qHq qHq rQK eCk @@ -56541,7 +56582,7 @@ yab yab jbC lUu -ewu +soz syZ syZ syZ @@ -56750,7 +56791,7 @@ mMr bWK bWK bWK -qHq +upe iuv tIr bWK @@ -67804,10 +67845,10 @@ mMr nue dHX dSg -fop +vfr fop mxC -fop +owv xMQ pab vQB @@ -67998,14 +68039,14 @@ alQ bjQ kBD aMk +lfS bUW bUW -bUW -bUW +psK kQn pHf pjF -hsr +sEO hsr hsr hsr @@ -68197,7 +68238,7 @@ iXB iXB bWK uIG -jNW +vpW caA bWK iXB @@ -69362,7 +69403,7 @@ bWK bWK qna vpW -vfr +caA bWK bWK bWK From 794d9aaab01235d59414e87546dff43a1818c586 Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Thu, 16 Jan 2025 12:59:43 -0500 Subject: [PATCH 07/16] refactors / brsuhes up a lot of update_icon calls, fixes mineral wall icon updates, replaces mat scanners with meson scanners (#6963) --- citadel.dme | 11 +- code/__DEFINES/icon_smoothing.dm | 1 - code/controllers/subsystem/lighting.dm | 6 + code/game/atoms/appearance.dm | 7 +- code/game/atoms/{atom_vv.dm => atom-vv.dm} | 8 ++ code/game/click/telekinesis.dm | 1 + .../gamemodes/technomancer/spells/illusion.dm | 1 + code/game/machinery/Sleeper.dm | 3 +- code/game/machinery/adv_med.dm | 2 + code/game/machinery/ai_slipper.dm | 3 +- code/game/machinery/atm_ret_field.dm | 6 +- code/game/machinery/atmo_control.dm | 3 +- code/game/machinery/biogenerator.dm | 1 + code/game/machinery/bomb_tester.dm | 1 + code/game/machinery/camera/camera.dm | 3 +- code/game/machinery/camera/camera_assembly.dm | 3 +- code/game/machinery/cell_charger.dm | 14 +-- code/game/machinery/computer/aifixer.dm | 13 ++- code/game/machinery/computer/computer.dm | 32 ++++-- code/game/machinery/computer/timeclock_vr.dm | 3 +- code/game/machinery/cryo.dm | 1 + code/game/machinery/cryopod.dm | 1 + code/game/machinery/door_control.dm | 6 +- code/game/machinery/doorbell_vr.dm | 4 +- code/game/machinery/doors/airlock/airlock.dm | 38 +++++-- .../doors/airlock/airlock_control.dm | 7 +- code/game/machinery/doors/blast_door.dm | 1 + code/game/machinery/doors/door.dm | 7 +- code/game/machinery/doors/firedoor.dm | 6 +- .../game/machinery/doors/firedoor_assembly.dm | 3 +- code/game/machinery/doors/windowdoor.dm | 1 + .../airlock_controllers.dm | 4 +- .../embedded_controller_base.dm | 3 +- code/game/machinery/exonet_node.dm | 3 +- code/game/machinery/fire_alarm.dm | 1 + code/game/machinery/floodlight.dm | 4 +- code/game/machinery/floor_light.dm | 1 + code/game/machinery/gear_painter.dm | 3 +- code/game/machinery/holoposter.dm | 1 + code/game/machinery/holosign.dm | 3 +- code/game/machinery/jukebox.dm | 1 + code/game/machinery/newscaster.dm | 6 +- code/game/machinery/pda_multicaster.dm | 3 +- code/game/machinery/pointdefense.dm | 3 +- code/game/machinery/recharger.dm | 3 +- code/game/machinery/requests_console.dm | 3 +- code/game/machinery/spaceheater.dm | 2 + .../suit_storage/suit_storage_unit.dm | 3 +- code/game/machinery/telecomms/_telecomms.dm | 3 +- code/game/machinery/teleporter/pad.dm | 1 + code/game/machinery/teleporter/projector.dm | 1 + code/game/machinery/turrets/turret.dm | 1 + .../machinery/virtual_reality/vr_console.dm | 3 +- code/game/machinery/vitals_monitor.dm | 1 + code/game/machinery/washing_machine.dm | 3 +- .../effects/debris/cleanable/aliens.dm | 3 - .../objects/effects/debris/cleanable/blood.dm | 4 +- .../effects/debris/cleanable/blood_tracks.dm | 1 + .../effects/debris/cleanable/robots.dm | 1 + code/game/objects/effects/traps.dm | 18 ++- code/game/objects/items/bodybag.dm | 4 +- code/game/objects/items/defib/defib_kit.dm | 2 +- code/game/objects/items/defib/shockpaddles.dm | 1 + .../objects/items/devices/advnifrepair.dm | 1 + .../game/objects/items/devices/ai_detector.dm | 1 + code/game/objects/items/devices/aicard.dm | 3 + code/game/objects/items/devices/flash.dm | 2 +- code/game/objects/items/devices/gps.dm | 1 + .../game/objects/items/devices/holowarrant.dm | 1 + .../objects/items/devices/lightreplacer.dm | 2 +- .../objects/items/devices/radio/beacon.dm | 1 + .../objects/items/devices/radio/intercom.dm | 1 + .../objects/items/devices/radio/jammer.dm | 11 +- .../game/objects/items/devices/scanners_vr.dm | 3 +- code/game/objects/items/devices/t_scanner.dm | 1 + code/game/objects/items/glassjar.dm | 1 + code/game/objects/items/id_cards/cards.dm | 1 + .../objects/items/stacks/marker_beacons.dm | 23 +--- code/game/objects/items/stacks/medical.dm | 55 +++++---- code/game/objects/items/stacks/rods.dm | 4 +- code/game/objects/items/stacks/sandbag.dm | 6 +- code/game/objects/items/stacks/stack.dm | 32 ++++++ code/game/objects/items/stacks/tickets.dm | 3 +- .../items/storage/misc_legacy/fancy.dm | 18 +-- .../objects/items/storage/misc_legacy/misc.dm | 22 ++-- .../items/storage/misc_legacy/trinket_box.dm | 1 + code/game/objects/items/storage/wallets.dm | 1 + code/game/objects/items/tools/weldingtool.dm | 1 + code/game/objects/items/toys.dm | 10 +- code/game/objects/items/weapons/RCD.dm | 1 + .../objects/items/weapons/barrier_tape.dm | 5 +- code/game/objects/items/weapons/candle.dm | 4 +- .../objects/items/weapons/flamethrower.dm | 3 +- .../items/weapons/grenades/supermatter.dm | 1 + .../objects/items/weapons/material/ashtray.dm | 1 + .../items/weapons/material/chainsaw.dm | 2 + .../items/weapons/material/twohanded.dm | 1 + code/game/objects/items/weapons/stunbaton.dm | 1 + code/game/objects/structures/bonfire.dm | 2 + code/game/objects/structures/coathanger.dm | 1 + .../crates_lockers/closets/secure/cargo.dm | 2 +- code/game/objects/structures/fireaxe.dm | 1 + code/game/objects/structures/railing.dm | 3 +- code/game/objects/structures/safe.dm | 7 +- code/game/objects/structures/simple_doors.dm | 3 +- .../stool_bed_chair_nest/alien_nests.dm | 3 - .../structures/stool_bed_chair_nest/bed.dm | 21 ++-- .../stool_bed_chair_nest/chairs_vr.dm | 1 + .../game/objects/structures/tables/defense.dm | 4 +- code/game/objects/structures/watercloset.dm | 4 +- .../objects/structures/windoor_assembly.dm | 7 +- .../legacy/ability_screen_objects.dm | 3 + code/game/rendering/screen_legacy.dm | 1 + .../turfs/simulated/wall_types/shuttle.dm | 1 + code/modules/artwork/items/poster.dm | 2 +- code/modules/artwork/structures/poster.dm | 2 +- code/modules/assembly/holder.dm | 1 + .../components/binary_devices/pump.dm | 3 +- .../components/binary_devices/valve.dm | 10 +- .../components/binary_devices/volume_pump.dm | 4 +- .../components/omni_devices/omni_base.dm | 1 + .../components/trinary_devices/mixer.dm | 3 +- .../components/trinary_devices/tvalve.dm | 3 +- .../machinery/components/unary/gas_freezer.dm | 4 +- .../machinery/components/unary/gas_heater.dm | 6 +- .../components/unary/generator_input.dm | 4 +- .../components/unary/heat_exchanger.dm | 3 +- .../components/unary/outlet_injector.dm | 3 +- .../components/unary/oxygen_generator.dm | 1 + .../components/unary/portables_connector.dm | 3 +- .../machinery/components/unary/vent_pump.dm | 6 +- .../components/unary/vent_scrubber.dm | 12 +- .../atmospherics/machinery/pipes/cap.dm | 3 +- .../atmospherics/machinery/pipes/manifold.dm | 3 +- .../machinery/pipes/manifold4w.dm | 3 +- .../atmospherics/machinery/pipes/simple.dm | 3 +- .../atmospherics/machinery/pipes/vent.dm | 1 + .../machinery/portable/canister.dm | 1 + .../atmospherics/machinery/portable/pump.dm | 4 +- .../machinery/portable/scrubber.dm | 1 + .../automata/{__automata.dm => automata.dm} | 0 .../modules/automata/{ => types}/explosion.dm | 0 code/modules/automata/{ => types}/sonar.dm | 0 .../automata/{_wave.dm => types/wave.dm} | 0 code/modules/awaymissions/pamphlet.dm | 4 - code/modules/blob2/blobs/base_blob.dm | 1 + code/modules/blob2/blobs/core.dm | 1 + code/modules/blob2/blobs/node.dm | 1 + code/modules/clothing/glasses/_glasses.dm | 3 +- code/modules/lighting/lighting_source.dm | 5 +- .../planet_station_turfs/_lythios43c.dm | 2 + .../mining/excavation/mineral_effect.dm | 31 ----- code/modules/mining/mine_turfs.dm | 106 +++++++----------- code/modules/paperwork/paper/paper.dm | 9 +- code/modules/rogueminer_vr/zonemaster.dm | 14 +-- icons/README.md | 5 +- icons/items/stacks/medical.dmi | Bin 0 -> 6170 bytes icons/modules/mining/ore_overlay.dmi | Bin 0 -> 9502 bytes icons/obj/mining.dmi | Bin 107983 -> 92043 bytes icons/obj/stacks.dmi | Bin 92245 -> 84889 bytes maps/sectors/surt/levels/surt_west.dmm | 4 +- 161 files changed, 492 insertions(+), 364 deletions(-) rename code/game/atoms/{atom_vv.dm => atom-vv.dm} (98%) rename code/modules/automata/{__automata.dm => automata.dm} (100%) rename code/modules/automata/{ => types}/explosion.dm (100%) rename code/modules/automata/{ => types}/sonar.dm (100%) rename code/modules/automata/{_wave.dm => types/wave.dm} (100%) delete mode 100644 code/modules/mining/excavation/mineral_effect.dm create mode 100644 icons/items/stacks/medical.dmi create mode 100644 icons/modules/mining/ore_overlay.dmi diff --git a/citadel.dme b/citadel.dme index 6a72388ce388..88f6f9e0bf69 100644 --- a/citadel.dme +++ b/citadel.dme @@ -1069,7 +1069,7 @@ #include "code\game\atoms\atom-defense.dm" #include "code\game\atoms\atom-examine.dm" #include "code\game\atoms\atom-logging.dm" -#include "code\game\atoms\atom_vv.dm" +#include "code\game\atoms\atom-vv.dm" #include "code\game\atoms\atoms_initializing_EXPENSIVE.dm" #include "code\game\atoms\buckling.dm" #include "code\game\atoms\defense_old.dm" @@ -2480,10 +2480,10 @@ #include "code\modules\atmospherics\machinery\portable\powered.dm" #include "code\modules\atmospherics\machinery\portable\pump.dm" #include "code\modules\atmospherics\machinery\portable\scrubber.dm" -#include "code\modules\automata\__automata.dm" -#include "code\modules\automata\_wave.dm" -#include "code\modules\automata\explosion.dm" -#include "code\modules\automata\sonar.dm" +#include "code\modules\automata\automata.dm" +#include "code\modules\automata\types\explosion.dm" +#include "code\modules\automata\types\sonar.dm" +#include "code\modules\automata\types\wave.dm" #include "code\modules\awaymissions\bluespaceartillery.dm" #include "code\modules\awaymissions\corpse.dm" #include "code\modules\awaymissions\exile.dm" @@ -3567,7 +3567,6 @@ #include "code\modules\mining\drilling\drill.dm" #include "code\modules\mining\drilling\scanner.dm" #include "code\modules\mining\excavation\mine_outcrops.dm" -#include "code\modules\mining\excavation\mineral_effect.dm" #include "code\modules\mining\machinery\machine_input_output_plates.dm" #include "code\modules\mining\machinery\machine_processing.dm" #include "code\modules\mining\machinery\machine_stacking.dm" diff --git a/code/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm index 69c30a577fb1..559c60888efc 100644 --- a/code/__DEFINES/icon_smoothing.dm +++ b/code/__DEFINES/icon_smoothing.dm @@ -26,7 +26,6 @@ DEFINE_BITFIELD(smoothing_flags, list( #define QUEUE_SMOOTH(thing_to_queue) if(IS_SMOOTH(thing_to_queue)) {SSicon_smooth.add_to_queue(thing_to_queue)} #define QUEUE_SMOOTH_NEIGHBORS(thing_to_queue) for(var/neighbor in orange(1, thing_to_queue)) {var/atom/atom_neighbor = neighbor; QUEUE_SMOOTH(atom_neighbor)} - //! Smoothing Internals #define NORTH_JUNCTION (1<<0) // NORTH diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm index 2413696bd967..3a9daaecb61a 100644 --- a/code/controllers/subsystem/lighting.dm +++ b/code/controllers/subsystem/lighting.dm @@ -158,6 +158,12 @@ SUBSYSTEM_DEF(lighting) while (lq_idex <= curr_lights.len) var/datum/light_source/L = curr_lights[lq_idex++] + // citadel edit: light source can be deleted before update, if that happens, skip + // check QDELING, light sources are LETMELIVE so shouldn't be being + // harddel'd + if(QDELING(L)) + continue + if (L.needs_update != LIGHTING_NO_UPDATE) total_ss_updates += 1 L.update_corners() diff --git a/code/game/atoms/appearance.dm b/code/game/atoms/appearance.dm index 4078f0f1a768..fc2a59df4cdb 100644 --- a/code/game/atoms/appearance.dm +++ b/code/game/atoms/appearance.dm @@ -1,4 +1,9 @@ -// todo: rethink everything about how to do signals for these. +// todo: rethink everything about how to do signals for these, and general proc hierarchy +// * update icon overrides are getting silly +// * update flag is also kinda weird; most of the time you can't predict how things will react to not updating states / overlays together +// * should name/desc really be their own proc?? +// * signals being able to block these things are also silly in most contexts, as a signal listener shouldn't have to know about +// the implementation details of the sender? /** * Updates the appearence of the icon diff --git a/code/game/atoms/atom_vv.dm b/code/game/atoms/atom-vv.dm similarity index 98% rename from code/game/atoms/atom_vv.dm rename to code/game/atoms/atom-vv.dm index d056489f6dd9..1ec689354fe9 100644 --- a/code/game/atoms/atom_vv.dm +++ b/code/game/atoms/atom-vv.dm @@ -245,3 +245,11 @@ else return debug_variable(NAMEOF(src, base_layer), base_layer, 0, src) return ..() + +/** + * VV wrapper, do not use. + */ +/atom/proc/vv_queue_smooth() + PRIVATE_PROC(TRUE) + QUEUE_SMOOTH(src) + QUEUE_SMOOTH_NEIGHBORS(src) diff --git a/code/game/click/telekinesis.dm b/code/game/click/telekinesis.dm index 15aad96ce438..b9ec3b51eefd 100644 --- a/code/game/click/telekinesis.dm +++ b/code/game/click/telekinesis.dm @@ -153,5 +153,6 @@ var/const/tk_maxrange = 15 /obj/item/tk_grab/update_icon() cut_overlays() + . = ..() if(focus && focus.icon && focus.icon_state) add_overlay(image(focus.icon,focus.icon_state)) diff --git a/code/game/gamemodes/technomancer/spells/illusion.dm b/code/game/gamemodes/technomancer/spells/illusion.dm index 080262c9115d..38bd9c7837f5 100644 --- a/code/game/gamemodes/technomancer/spells/illusion.dm +++ b/code/game/gamemodes/technomancer/spells/illusion.dm @@ -65,6 +65,7 @@ // Makes a tiny overlay of the thing the player has copied, so they can easily tell what they currently have. /obj/item/spell/illusion/update_icon() cut_overlays() + . = ..() if(copied) var/image/temp_image = image(copied) var/matrix/M = matrix() diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 14d54e5a7a68..1fb7a028bb9a 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -275,8 +275,9 @@ else toggle_pump() -/obj/machinery/sleeper/update_icon() +/obj/machinery/sleeper/update_icon_state() icon_state = "sleeper_[occupant ? TRUE : FALSE]" + return ..() /obj/machinery/sleeper/attackby(var/obj/item/I, var/mob/user) if(istype(I, /obj/item/grab)) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index ae3898fc44ea..580aa6c68a21 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -630,6 +630,7 @@ return incoming /obj/machinery/bodyscanner/update_icon() + . = ..() if(machine_stat & (NOPOWER|BROKEN)) icon_state = "scanner_off" set_light(0) @@ -657,6 +658,7 @@ console.update_icon(h_ratio) /obj/machinery/body_scanconsole/update_icon(var/h_ratio) + . = ..() if(machine_stat & (NOPOWER|BROKEN)) icon_state = "scanner_terminal_off" set_light(0) diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index d7b7a582f8dc..901d165d3971 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -22,11 +22,12 @@ ..() update_icon() -/obj/machinery/ai_slipper/update_icon() +/obj/machinery/ai_slipper/update_icon_state() if(machine_stat & (NOPOWER|BROKEN)) icon_state = "motion0" else icon_state = disabled ? "motion0" : "motion3" + return ..() /obj/machinery/ai_slipper/proc/setState(var/enabled, var/uses) disabled = disabled diff --git a/code/game/machinery/atm_ret_field.dm b/code/game/machinery/atm_ret_field.dm index 27790055b186..2d21a9dfbe2a 100644 --- a/code/game/machinery/atm_ret_field.dm +++ b/code/game/machinery/atm_ret_field.dm @@ -83,7 +83,7 @@ . = ..() generate_field() -/obj/machinery/atmospheric_field_generator/update_icon() +/obj/machinery/atmospheric_field_generator/update_icon_state() if(machine_stat & BROKEN) icon_state = "arfg_broken" else if(hatch_open && wires_intact) @@ -94,6 +94,7 @@ icon_state = "arfg_on" else icon_state = "arfg_off" + return ..() /obj/machinery/atmospheric_field_generator/power_change() var/oldstat @@ -192,6 +193,7 @@ /obj/structure/atmospheric_retention_field/update_icon() cut_overlays() + . = ..() var/list/dirs = list() for(var/obj/structure/atmospheric_retention_field/F in orange(src,1)) dirs += get_dir(src, F) @@ -203,8 +205,6 @@ var/image/I = image(icon, "[basestate][connections[i]]", dir = 1<<(i-1)) add_overlay(I) - return - /obj/structure/atmospheric_retention_field/Initialize(mapload) . = ..() update_nearby_tiles() //Force ZAS update diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 5e548e8bb2ea..c054f4e03b50 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -20,8 +20,9 @@ var/datum/radio_frequency/radio_connection -/obj/machinery/air_sensor/update_icon() +/obj/machinery/air_sensor/update_icon_state() icon_state = "gsensor[on]" + return ..() /obj/machinery/air_sensor/process(delta_time) if(on) diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index 6f17edab6d3c..82999429c1fd 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -249,6 +249,7 @@ /obj/machinery/biogenerator/update_icon() cut_overlays() + . = ..() if(beaker) add_overlay("[base_icon_state]-standby") if(processing) diff --git a/code/game/machinery/bomb_tester.dm b/code/game/machinery/bomb_tester.dm index 935abaed349e..d84cf342e8f7 100644 --- a/code/game/machinery/bomb_tester.dm +++ b/code/game/machinery/bomb_tester.dm @@ -62,6 +62,7 @@ /obj/machinery/bomb_tester/update_icon() cut_overlays() + . = ..() var/list/overlays_to_add = list() if(tank1) overlays_to_add += image(icon, "[icon_name]-tank1") diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 673b3de996f2..956868ca2fb0 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -257,13 +257,14 @@ CREATE_WALL_MOUNTING_TYPES(/obj/machinery/camera) if(isXRay()) P.SetSight(SEE_TURFS | SEE_MOBS | SEE_OBJS) -/obj/machinery/camera/update_icon() +/obj/machinery/camera/update_icon_state() if (!status || (machine_stat & BROKEN)) icon_state = "[initial(icon_state)]1" else if (machine_stat & EMPED) icon_state = "[initial(icon_state)]emp" else icon_state = initial(icon_state) + return ..() /obj/machinery/camera/proc/triggerCameraAlarm(duration = 0) alarm_on = 1 diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 2da823206971..4f7f6c71b52b 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -139,11 +139,12 @@ ..() -/obj/item/camera_assembly/update_icon() +/obj/item/camera_assembly/update_icon_state() if(anchored) icon_state = "camera1" else icon_state = "cameracase" + return ..() /obj/item/camera_assembly/attack_hand(mob/user, datum/event_args/actor/clickchain/e_args) if(!anchored) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index f014be3d7768..a3cbee919c9a 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -17,21 +17,13 @@ circuit = /obj/item/circuitboard/cell_charger /obj/machinery/cell_charger/update_icon() + cut_overlays() icon_state = "ccharger[charging ? 1 : 0]" + . = ..() if(charging && !(machine_stat & (BROKEN|NOPOWER))) - var/newlevel = round(charging.percent() * 4.0 / 99) - //to_chat(world, "nl: [newlevel]") - - if(chargelevel != newlevel) - - cut_overlays() - add_overlay("ccharger-o[newlevel]") - - chargelevel = newlevel - else - cut_overlays() + add_overlay("ccharger-o[newlevel]") /obj/machinery/cell_charger/examine(mob/user, dist) . = ..() diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 43b425dfcfa8..eb7237046fac 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -115,18 +115,19 @@ if(oldstat != occupier.stat) update_icon() -/obj/machinery/computer/aifixer/update_icon() - . = ..() +/obj/machinery/computer/aifixer/make_legacy_overlays() + var/list/to_add_overlays = list() if(machine_stat & (NOPOWER|BROKEN)) return if(restoring) - . += "ai-fixer-on" + to_add_overlays += "ai-fixer-on" if (occupier) switch (occupier.stat) if (CONSCIOUS) - . += "ai-fixer-full" + to_add_overlays += "ai-fixer-full" if (UNCONSCIOUS) - . += "ai-fixer-404" + to_add_overlays += "ai-fixer-404" else - . += "ai-fixer-empty" + to_add_overlays += "ai-fixer-empty" + add_overlay(to_add_overlays) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index a99174ac3030..1fca72f817c0 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -1,3 +1,11 @@ +/** + * Base /computer machinery type. + * + * Has the following responsibilities: + * * Smoothly connect to adjacent computers visually as needed. + * * Have default construction/deconstruction steps for computer instead of default for machine + * * Render screen overlay and a standard light source + emissive + */ /obj/machinery/computer name = "computer" icon = 'icons/obj/computer.dmi' @@ -39,8 +47,11 @@ /obj/machinery/computer/update_icon() cut_overlays() + . = ..() + make_legacy_overlays() - . = list() +/obj/machinery/computer/proc/make_legacy_overlays() + var/list/to_add_overlays = list() // Connecty //TODO: Use TG Smoothing. if(initial(icon_state) == "computer") @@ -59,27 +70,29 @@ if(icon_keyboard) if(machine_stat & NOPOWER) - playsound(src, 'sound/machines/terminal_off.ogg', 50, 1) - return add_overlay("[icon_keyboard]_off") - . += icon_keyboard + to_add_overlays += "[icon_keyboard]_off" + else + to_add_overlays += icon_keyboard // This whole block lets screens ignore lighting and be visible even in the darkest room var/overlay_state = icon_screen if(machine_stat & BROKEN) overlay_state = "[icon_state]_broken" - . += overlay_state + else if(!(machine_stat & NOPOWER)) + to_add_overlays += overlay_state //. += emissive_appearance(icon, overlay_state) - playsound(src, 'sound/machines/terminal_on.ogg', 50, 1) - add_overlay(.) + add_overlay(to_add_overlays) /obj/machinery/computer/power_change() ..() update_icon() if(machine_stat & NOPOWER) set_light(0) + playsound(src, 'sound/machines/terminal_off.ogg', 50, 1) else set_light(light_range_on, light_power_on) + playsound(src, 'sound/machines/terminal_on.ogg', 50, 1) /obj/machinery/computer/drop_products(method, atom/where) . = ..() @@ -95,11 +108,6 @@ machine_stat |= BROKEN update_icon() -/obj/machinery/computer/proc/decode(text) - // Adds line breaks - text = replacetext(text, "\n", "
") - return text - /obj/machinery/computer/attackby(obj/item/I, mob/living/user, params, clickchain_flags, damage_multiplier) if(computer_deconstruction_screwdriver(user, I)) return diff --git a/code/game/machinery/computer/timeclock_vr.dm b/code/game/machinery/computer/timeclock_vr.dm index 5c6a922150ec..a6ef6e1eea42 100644 --- a/code/game/machinery/computer/timeclock_vr.dm +++ b/code/game/machinery/computer/timeclock_vr.dm @@ -34,13 +34,14 @@ card = null . = ..() -/obj/machinery/computer/timeclock/update_icon() +/obj/machinery/computer/timeclock/update_icon_state() if(inoperable()) icon_state = "[initial(icon_state)]_off" else if(card) icon_state = "[initial(icon_state)]_card" else icon_state = "[initial(icon_state)]" + return ..() /obj/machinery/computer/timeclock/power_change() var/old_stat = machine_stat diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 54b0538f3537..34318abdebc9 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -214,6 +214,7 @@ put_mob(target) /obj/machinery/atmospherics/component/unary/cryo_cell/update_icon() + . = ..() cut_overlay(fluid) fluid.color = null fluid.alpha = max(255 - air_contents.temperature, 50) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 4b803e871166..b543c2eaaf2c 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -737,6 +737,7 @@ /obj/machinery/cryopod/robot/door/gateway/update_icon() cut_overlays() + . = ..() if(occupant) var/image/I = image(icon, src, "[base_icon_state]_active_overlay") I.plane = ABOVE_LIGHTING_PLANE diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 7280a965dcc8..5b67dc5b601c 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -60,11 +60,12 @@ ..() update_icon() -/obj/machinery/button/remote/update_icon() +/obj/machinery/button/remote/update_icon_state() if(machine_stat & NOPOWER) icon_state = "doorctrl-p" else icon_state = "doorctrl0" + return ..() /* Airlock remote control @@ -200,8 +201,9 @@ return -/obj/machinery/button/remote/driver/update_icon() +/obj/machinery/button/remote/driver/update_icon_state() if(!active || (machine_stat & NOPOWER)) icon_state = "launcherbtt" else icon_state = "launcheract" + return ..() diff --git a/code/game/machinery/doorbell_vr.dm b/code/game/machinery/doorbell_vr.dm index c2bd4e3c45ed..958655e768ab 100644 --- a/code/game/machinery/doorbell_vr.dm +++ b/code/game/machinery/doorbell_vr.dm @@ -34,6 +34,7 @@ /obj/machinery/doorbell_chime/update_icon() cut_overlays() + . = ..() if(panel_open) add_overlay("dbchime-open") if(inoperable()) @@ -105,11 +106,12 @@ ..() update_icon() -/obj/machinery/button/doorbell/update_icon() +/obj/machinery/button/doorbell/update_icon_state() if(machine_stat & (NOPOWER|BROKEN)) icon_state = "doorbell-off" else icon_state = "doorbell-standby" + return ..() /obj/machinery/button/doorbell/attack_hand(mob/user, datum/event_args/actor/clickchain/e_args) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) diff --git a/code/game/machinery/doors/airlock/airlock.dm b/code/game/machinery/doors/airlock/airlock.dm index b18db9b23ca5..02249fca8ab7 100644 --- a/code/game/machinery/doors/airlock/airlock.dm +++ b/code/game/machinery/doors/airlock/airlock.dm @@ -499,8 +499,9 @@ About the new airlock wires panel: return 0 -/obj/machinery/door/airlock/update_icon(var/doorstate) - switch(doorstate) +/obj/machinery/door/airlock/update_icon() + . = ..() + switch(state) if(AIRLOCK_OPEN) icon_state = "open" if(AIRLOCK_CLOSED) @@ -513,28 +514,43 @@ About the new airlock wires panel: /obj/machinery/door/airlock/custom_smooth() return //we only custom smooth because we don't need to do anything else. +// todo: Rework everything, fucks sakes /obj/machinery/door/airlock/do_animate(animation) switch(animation) if(DOOR_ANIMATION_OPEN) set_airlock_overlays(AIRLOCK_OPENING) flick("opening", src)//[stat ? "_stat":] - update_icon(AIRLOCK_OPEN) + state = AIRLOCK_OPENING + update_icon() if(DOOR_ANIMATION_CLOSE) set_airlock_overlays(AIRLOCK_CLOSING) flick("closing", src) - update_icon(AIRLOCK_CLOSED) + state = AIRLOCK_CLOSING + update_icon() if(DOOR_ANIMATION_DENY) set_airlock_overlays(AIRLOCK_DENY) if(density && arePowerSystemsOn()) flick("deny", src) if(speaker) playsound(loc, denied_sound, 50, 0) - update_icon(AIRLOCK_CLOSED) + var/old_state = state + state = AIRLOCK_DENY + update_icon() + state = old_state + spawn(3) + update_icon() if(DOOR_ANIMATION_EMAG) set_airlock_overlays(AIRLOCK_EMAG) if(density && arePowerSystemsOn()) flick("deny", src) + var/old_state = state + state = AIRLOCK_EMAG + update_icon() + state = old_state + spawn(3) + update_icon() else + state = AIRLOCK_EMAG update_icon() /obj/machinery/door/airlock/attack_ai(mob/user as mob) @@ -890,7 +906,11 @@ About the new airlock wires panel: if(src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density) src.closeOther.close() - return ..() + . = ..() + if(!.) + return + state = AIRLOCK_OPEN + update_icon() /obj/machinery/door/airlock/close(var/forced=0) if(!can_close(forced)) @@ -921,7 +941,11 @@ About the new airlock wires panel: var/obj/structure/window/killthis = (locate(/obj/structure/window) in turf) if(killthis) LEGACY_EX_ACT(killthis, 2, null)//Smashin windows - return ..() + . = ..() + if(!.) + return + state = AIRLOCK_CLOSED + update_icon() /obj/machinery/door/airlock/set_opacity_on_close() if(visible) diff --git a/code/game/machinery/doors/airlock/airlock_control.dm b/code/game/machinery/doors/airlock/airlock_control.dm index 9fffbae73405..367614942f3c 100644 --- a/code/game/machinery/doors/airlock/airlock_control.dm +++ b/code/game/machinery/doors/airlock/airlock_control.dm @@ -168,7 +168,7 @@ var/previous_phoron var/previous_temperature -/obj/machinery/airlock_sensor/update_icon() +/obj/machinery/airlock_sensor/update_icon_state() if(on) if(alert) icon_state = "airlock_sensor_alert" @@ -176,6 +176,7 @@ icon_state = "airlock_sensor_standby" else icon_state = "airlock_sensor_off" + return ..() /obj/machinery/airlock_sensor/attack_hand(mob/user, datum/event_args/actor/clickchain/e_args) var/datum/signal/signal = new @@ -267,12 +268,12 @@ var/on = 1 - -/obj/machinery/access_button/update_icon() +/obj/machinery/access_button/update_icon_state() if(on) icon_state = "access_button_standby" else icon_state = "access_button_off" + return ..() /obj/machinery/access_button/attackby(obj/item/I as obj, mob/user as mob) //Swiping ID on the access button diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm index 9df2f78a99fd..5acf84f220d3 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -57,6 +57,7 @@ // Parameters: None // Description: Updates icon of this object. Uses icon state variables. /obj/machinery/door/blast/update_icon() + . = ..() if(density) icon_state = icon_state_closed else diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 21071bb5c220..70693a9aafa8 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -290,11 +290,12 @@ open() ..() -/obj/machinery/door/update_icon() +/obj/machinery/door/update_icon_state() if(density) icon_state = "door1" else icon_state = "door0" + return ..() /obj/machinery/door/proc/do_animate(animation) switch(animation) @@ -324,7 +325,7 @@ do_animate(DOOR_ANIMATION_OPEN) set_opacity(0) sleep(3) - src.density = 0 + set_density(FALSE) update_nearby_tiles() sleep(7) src.layer = open_layer @@ -350,7 +351,7 @@ close_door_at = 0 do_animate(DOOR_ANIMATION_CLOSE) sleep(3) - src.density = 1 + set_density(TRUE) explosion_resistance = initial(explosion_resistance) src.layer = closed_layer update_nearby_tiles() diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 423e176d4d09..38fe78736cd2 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -475,9 +475,11 @@ GLOBAL_LIST_INIT(firelock_align_types, typecacheof(list( /obj/machinery/door/firedoor/update_icon() - var/image/lights_overlay cut_overlays() + . = ..() + set_light(0) + var/image/lights_overlay var/do_set_light = FALSE if(density) @@ -505,8 +507,6 @@ GLOBAL_LIST_INIT(firelock_align_types, typecacheof(list( if(do_set_light) set_light(2, 0.25, COLOR_SUN) - return - /obj/machinery/door/firedoor/border_only /* icon = 'icons/obj/doors/edge_Doorfire.dmi' diff --git a/code/game/machinery/doors/firedoor_assembly.dm b/code/game/machinery/doors/firedoor_assembly.dm index e779c739be7b..b900a55de92e 100644 --- a/code/game/machinery/doors/firedoor_assembly.dm +++ b/code/game/machinery/doors/firedoor_assembly.dm @@ -8,11 +8,12 @@ density = 1 var/wired = 0 -/obj/structure/firedoor_assembly/update_icon() +/obj/structure/firedoor_assembly/update_icon_state() if(anchored) icon_state = "door_anchored" else icon_state = "door_construction" + return ..() /obj/structure/firedoor_assembly/attackby(obj/item/C, mob/user as mob) if(istype(C, /obj/item/stack/cable_coil) && !wired && anchored) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index bf8007ae0194..5a2b684d6efe 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -25,6 +25,7 @@ src.base_state = src.icon_state /obj/machinery/door/window/update_icon() + . = ..() if(density) icon_state = base_state else diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index a02ebf8320f8..9d7085022ce3 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -73,8 +73,7 @@ valid_actions = list("cycle_ext", "cycle_int", "force_ext", "force_int") program = /datum/computer/file/embedded_program/airlock/access_controll - -/obj/machinery/embedded_controller/radio/airlock/access_controller/update_icon() +/obj/machinery/embedded_controller/radio/airlock/access_controller/update_icon_state() if(on && program) if(program.memory["processing"]) icon_state = "access_control_process" @@ -82,6 +81,7 @@ icon_state = "access_control_standby" else icon_state = "access_control_off" + return ..() /obj/machinery/embedded_controller/radio/airlock/access_controller/ui_data(mob/user, datum/tgui/ui) . = list( diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 137e78cdbbbf..b0111938e2f6 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -86,7 +86,7 @@ radio_controller.remove_object(src,frequency) ..() -/obj/machinery/embedded_controller/radio/update_icon() +/obj/machinery/embedded_controller/radio/update_icon_state() if(on && program) if(program.memory["processing"]) icon_state = "airlock_control_process" @@ -94,6 +94,7 @@ icon_state = "airlock_control_standby" else icon_state = "airlock_control_off" + return ..() /obj/machinery/embedded_controller/radio/post_signal(datum/signal/signal, var/radio_filter = null) signal.transmission_method = TRANSMISSION_RADIO diff --git a/code/game/machinery/exonet_node.dm b/code/game/machinery/exonet_node.dm index ac1e50634956..7ad9a9ae07a5 100644 --- a/code/game/machinery/exonet_node.dm +++ b/code/game/machinery/exonet_node.dm @@ -40,7 +40,7 @@ GLOBAL_LIST_EMPTY(exonet_nodes) // Proc: update_icon() // Parameters: None // Description: Self explanatory. -/obj/machinery/exonet_node/update_icon() +/obj/machinery/exonet_node/update_icon_state() if(on) if(!allow_external_PDAs && !allow_external_communicators && !allow_external_newscasters) icon_state = "[initial(icon_state)]_idle" @@ -48,6 +48,7 @@ GLOBAL_LIST_EMPTY(exonet_nodes) icon_state = initial(icon_state) else icon_state = "[initial(icon_state)]_off" + return ..() // Proc: update_power() // Parameters: None diff --git a/code/game/machinery/fire_alarm.dm b/code/game/machinery/fire_alarm.dm index 18e7b0188826..234cb0eac41b 100644 --- a/code/game/machinery/fire_alarm.dm +++ b/code/game/machinery/fire_alarm.dm @@ -53,6 +53,7 @@ CREATE_WALL_MOUNTING_TYPES_SHIFTED(/obj/machinery/fire_alarm/alarms_hidden, 21) /obj/machinery/fire_alarm/update_icon() cut_overlays() + . = ..() add_overlay("casing") if(panel_open) diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index 8548bc99021d..f5021db0c227 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -15,9 +15,9 @@ . = ..() cell = new(src) -/obj/machinery/floodlight/update_icon() - cut_overlays() +/obj/machinery/floodlight/update_icon_state() icon_state = "flood[open ? "o" : ""][open && cell ? "b" : ""]0[on]" + return ..() /obj/machinery/floodlight/process(delta_time) if(!on) diff --git a/code/game/machinery/floor_light.dm b/code/game/machinery/floor_light.dm index 6975c0a4f182..a952e821814e 100644 --- a/code/game/machinery/floor_light.dm +++ b/code/game/machinery/floor_light.dm @@ -122,6 +122,7 @@ var/list/floor_light_cache = list() /obj/machinery/floor_light/update_icon() cut_overlays() + . = ..() if(use_power && !broken()) if(isnull(damaged)) var/cache_key = "floorlight-[default_light_colour]" diff --git a/code/game/machinery/gear_painter.dm b/code/game/machinery/gear_painter.dm index 8b23bdfd0507..f63dd55740aa 100644 --- a/code/game/machinery/gear_painter.dm +++ b/code/game/machinery/gear_painter.dm @@ -47,7 +47,7 @@ 0, 0, 0, ) -/obj/machinery/gear_painter/update_icon() +/obj/machinery/gear_painter/update_icon_state() if(panel_open) icon_state = "colormate_open" else if(inoperable()) @@ -56,6 +56,7 @@ icon_state = "colormate_active" else icon_state = "colormate" + return ..() /obj/machinery/gear_painter/Destroy() if(inserted) //please i beg you do not drop nulls diff --git a/code/game/machinery/holoposter.dm b/code/game/machinery/holoposter.dm index c8033af25273..9a876fb3ffdb 100644 --- a/code/game/machinery/holoposter.dm +++ b/code/game/machinery/holoposter.dm @@ -42,6 +42,7 @@ GLOBAL_LIST_EMPTY(holoposters) . += examine_addon /obj/machinery/holoposter/update_icon() + . = ..() if(machine_stat & NOPOWER) icon_state = "off" examine_addon = "It appears to be powered off." diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm index 7b28e9b6766d..2c447ee36534 100644 --- a/code/game/machinery/holosign.dm +++ b/code/game/machinery/holosign.dm @@ -21,11 +21,12 @@ update_use_power(lit ? USE_POWER_ACTIVE : USE_POWER_IDLE) update_icon() -/obj/machinery/holosign/update_icon() +/obj/machinery/holosign/update_icon_state() if(!lit) icon_state = off_icon else icon_state = on_icon + return ..() /obj/machinery/holosign/power_change() if(machine_stat & NOPOWER) diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index 0d687a25a999..3b4ecc114a77 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -144,6 +144,7 @@ /obj/machinery/media/jukebox/update_icon() cut_overlays() + . = ..() if(machine_stat & (NOPOWER|BROKEN) || !anchored) if(machine_stat & BROKEN) icon_state = "[state_base]-broken" diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 44386e2dcd30..d8c7dfee3206 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -196,14 +196,15 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co return ..() /obj/machinery/newscaster/update_icon() + cut_overlays() + . = ..() + if(!ispowered || isbroken) icon_state = "newscaster_off" if(isbroken) //If the thing is smashed, add crack overlay on top of the unpowered sprite. set_overlays("crack3") return - cut_overlays() //reset overlays - if(news_network.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message icon_state = "newscaster_wanted" return @@ -215,7 +216,6 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co add_overlay("crack[hitstaken]") icon_state = "newscaster_normal" - return /obj/machinery/newscaster/power_change() if(isbroken) //Broken shit can't be powered. diff --git a/code/game/machinery/pda_multicaster.dm b/code/game/machinery/pda_multicaster.dm index 7273710bbf41..16dcb4ad4f11 100644 --- a/code/game/machinery/pda_multicaster.dm +++ b/code/game/machinery/pda_multicaster.dm @@ -29,11 +29,12 @@ qdel(AM) return ..() -/obj/machinery/pda_multicaster/update_icon() +/obj/machinery/pda_multicaster/update_icon_state() if(on) icon_state = initial(icon_state) else icon_state = "[initial(icon_state)]-p" + return ..() /obj/machinery/pda_multicaster/attackby(obj/item/I, mob/user) if(I.is_screwdriver()) diff --git a/code/game/machinery/pointdefense.dm b/code/game/machinery/pointdefense.dm index 11371572ea8a..744cb132ba28 100644 --- a/code/game/machinery/pointdefense.dm +++ b/code/game/machinery/pointdefense.dm @@ -153,11 +153,12 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense) if(!id_tag) . += "[desc_panel_image("multitool", user)]to set ident tag and connect to a mainframe." -/obj/machinery/power/pointdefense/update_icon() +/obj/machinery/power/pointdefense/update_icon_state() if(!active || !id_tag || inoperable()) icon_state = "[initial(icon_state)]_off" else icon_state = initial(icon_state) + return ..() /obj/machinery/power/pointdefense/default_unfasten_wrench(var/mob/user, var/obj/item/W, var/time) if((. = ..())) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 5bddf8fc4db8..726a50222889 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -209,11 +209,12 @@ ..(severity) -/obj/machinery/recharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier. +/obj/machinery/recharger/update_icon_state() if(charging) icon_state = icon_state_charging else icon_state = icon_state_idle + return ..() /obj/machinery/recharger/RefreshParts() var/E = 0 diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 3f7b01c32662..e6fed7097d64 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -78,13 +78,14 @@ var/list/obj/machinery/requests_console/allConsoles = list() ..() update_icon() -/obj/machinery/requests_console/update_icon() +/obj/machinery/requests_console/update_icon_state() if(machine_stat & NOPOWER) if(icon_state != "req_comp_off") icon_state = "req_comp_off" else if(icon_state == "req_comp_off") icon_state = "req_comp[newmessagepriority]" + return ..() /obj/machinery/requests_console/Initialize(mapload, newdir) . = ..() diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 4f2fd5f44d85..0a987fb6d337 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -20,6 +20,7 @@ /obj/machinery/space_heater/update_icon() cut_overlays() + . = ..() icon_state = "sheater[on]" if(panel_open) add_overlay("sheater-open") @@ -287,6 +288,7 @@ /obj/machinery/power/thermoregulator/update_icon() cut_overlays() + . = ..() var/list/overlays_to_add = list() if(on) overlays_to_add += "lasergen-on" diff --git a/code/game/machinery/suit_storage/suit_storage_unit.dm b/code/game/machinery/suit_storage/suit_storage_unit.dm index cb80c6ff01f4..572fb755b9a9 100644 --- a/code/game/machinery/suit_storage/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage/suit_storage_unit.dm @@ -42,7 +42,7 @@ if(boots_stored_TYPE) boots_stored = new boots_stored_TYPE(src) -/obj/machinery/suit_storage_unit/update_icon() +/obj/machinery/suit_storage_unit/update_icon_state() var/hashelmet = 0 var/hassuit = 0 var/hashuman = 0 @@ -53,6 +53,7 @@ if(occupant) hashuman = 1 icon_state = "suitstorage[hashelmet][hassuit][hashuman][isopen][islocked][isUV][ispowered][isbroken][issuperUV]" + return ..() /obj/machinery/suit_storage_unit/power_change() ..() diff --git a/code/game/machinery/telecomms/_telecomms.dm b/code/game/machinery/telecomms/_telecomms.dm index 55cb28f8a702..dabe27fc8840 100644 --- a/code/game/machinery/telecomms/_telecomms.dm +++ b/code/game/machinery/telecomms/_telecomms.dm @@ -159,11 +159,12 @@ if(src != T) links |= T -/obj/machinery/telecomms/update_icon() +/obj/machinery/telecomms/update_icon_state() if(on) icon_state = initial(icon_state) else icon_state = "[initial(icon_state)]_off" + return ..() /obj/machinery/telecomms/proc/update_power() if(toggled) diff --git a/code/game/machinery/teleporter/pad.dm b/code/game/machinery/teleporter/pad.dm index 07aaac186824..ebc72dd6651c 100644 --- a/code/game/machinery/teleporter/pad.dm +++ b/code/game/machinery/teleporter/pad.dm @@ -21,6 +21,7 @@ /obj/machinery/tele_pad/update_icon() cut_overlays() + . = ..() if(com?.projector?.engaged) update_use_power(USE_POWER_ACTIVE) var/image/I = image(icon, src, "[initial(icon_state)]_active_overlay") diff --git a/code/game/machinery/teleporter/projector.dm b/code/game/machinery/teleporter/projector.dm index 594bf591400f..f989068a3b7d 100644 --- a/code/game/machinery/teleporter/projector.dm +++ b/code/game/machinery/teleporter/projector.dm @@ -77,6 +77,7 @@ /obj/machinery/tele_projector/update_icon() cut_overlays() + . = ..() if(engaged) var/image/I = image(icon, src, "[initial(icon_state)]_active_overlay") I.plane = ABOVE_LIGHTING_PLANE diff --git a/code/game/machinery/turrets/turret.dm b/code/game/machinery/turrets/turret.dm index a22964f65fd1..ef943140ac4c 100644 --- a/code/game/machinery/turrets/turret.dm +++ b/code/game/machinery/turrets/turret.dm @@ -190,6 +190,7 @@ return ..() /obj/machinery/porta_turret/update_icon() + . = ..() if(machine_stat & BROKEN) // Turret is dead. icon_state = "destroyed_target_prism_[turret_type]" diff --git a/code/game/machinery/virtual_reality/vr_console.dm b/code/game/machinery/virtual_reality/vr_console.dm index 92f25b7bb879..3e8e094da69f 100644 --- a/code/game/machinery/virtual_reality/vr_console.dm +++ b/code/game/machinery/virtual_reality/vr_console.dm @@ -50,8 +50,9 @@ visible_message("\The [src] sounds an alarm, swinging its hatch open.") go_out() -/obj/machinery/vr_sleeper/update_icon() +/obj/machinery/vr_sleeper/update_icon_state() icon_state = "[base_state][occupant ? "1" : "0"]" + return ..() /obj/machinery/vr_sleeper/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/vitals_monitor.dm b/code/game/machinery/vitals_monitor.dm index e5f0c1197e9d..cc02115fcb6f 100644 --- a/code/game/machinery/vitals_monitor.dm +++ b/code/game/machinery/vitals_monitor.dm @@ -87,6 +87,7 @@ /obj/machinery/vitals_monitor/update_icon() cut_overlays() + . = ..() if(machine_stat & NOPOWER) return add_overlay("screen") diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 7c0232aa5b14..e55b32f41d78 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -67,8 +67,9 @@ if(state in list(1,3,6)) usr.loc = src.loc -/obj/machinery/washing_machine/update_icon() +/obj/machinery/washing_machine/update_icon_state() icon_state = "wm_[state][panel_open]" + return ..() /obj/machinery/washing_machine/attackby(obj/item/W as obj, mob/user as mob) if(state == 2 && washing.len < 1) diff --git a/code/game/objects/effects/debris/cleanable/aliens.dm b/code/game/objects/effects/debris/cleanable/aliens.dm index 5f40bfce1878..9fcd03427f69 100644 --- a/code/game/objects/effects/debris/cleanable/aliens.dm +++ b/code/game/objects/effects/debris/cleanable/aliens.dm @@ -11,9 +11,6 @@ random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6") basecolor = "#05EE05" -/obj/effect/debris/cleanable/blood/gibs/xeno/update_icon() - color = "#FFFFFF" - /obj/effect/debris/cleanable/blood/gibs/xeno/up random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibup1","xgibup1","xgibup1") diff --git a/code/game/objects/effects/debris/cleanable/blood.dm b/code/game/objects/effects/debris/cleanable/blood.dm index 6a318e6d8d11..1ee02af143cf 100644 --- a/code/game/objects/effects/debris/cleanable/blood.dm +++ b/code/game/objects/effects/debris/cleanable/blood.dm @@ -68,6 +68,7 @@ var/global/list/image/splatter_cache=list() addtimer(CALLBACK(src, PROC_REF(dry)), BLOOD_DRYING_TIME * (amount + 1)) /obj/effect/debris/cleanable/blood/update_icon() + . = ..() if(basecolor == "rainbow") basecolor = "#[get_random_colour(1)]" add_atom_color(basecolor) @@ -206,6 +207,8 @@ var/global/list/image/splatter_cache=list() var/fleshcolor = "#FFFFFF" /obj/effect/debris/cleanable/blood/gibs/update_icon() + cut_overlays() + . = ..() var/image/giblets = new(base_icon, "[icon_state]_flesh", dir) if(!fleshcolor || fleshcolor == "rainbow") @@ -217,7 +220,6 @@ var/global/list/image/splatter_cache=list() blood.Blend(basecolor,ICON_MULTIPLY) icon = blood - cut_overlays() add_overlay(giblets) /obj/effect/debris/cleanable/blood/gibs/up diff --git a/code/game/objects/effects/debris/cleanable/blood_tracks.dm b/code/game/objects/effects/debris/cleanable/blood_tracks.dm index 570758172f0b..c2bff1d4fb24 100644 --- a/code/game/objects/effects/debris/cleanable/blood_tracks.dm +++ b/code/game/objects/effects/debris/cleanable/blood_tracks.dm @@ -125,6 +125,7 @@ /obj/effect/debris/cleanable/blood/tracks/update_icon() cut_overlays() + . = ..() color = "#FFFFFF" var/truedir=0 diff --git a/code/game/objects/effects/debris/cleanable/robots.dm b/code/game/objects/effects/debris/cleanable/robots.dm index 171b7a35f1e2..49c3ceb7a3cd 100644 --- a/code/game/objects/effects/debris/cleanable/robots.dm +++ b/code/game/objects/effects/debris/cleanable/robots.dm @@ -7,6 +7,7 @@ random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7") /obj/effect/debris/cleanable/blood/gibs/robot/update_icon() + . = ..() color = "#FFFFFF" /obj/effect/debris/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like diff --git a/code/game/objects/effects/traps.dm b/code/game/objects/effects/traps.dm index 6aa6397fc601..1d56f96417f3 100644 --- a/code/game/objects/effects/traps.dm +++ b/code/game/objects/effects/traps.dm @@ -106,11 +106,12 @@ Add those other swinging traps you mentioned above! . = ..() update_icon() -/obj/effect/trap/update_icon() +/obj/effect/trap/update_icon_state() if(!tripped) icon_state = "[initial(icon_state)]" else if (tripped) icon_state = "[initial(icon_state)]_visible" + return ..() ////////////////// /// Pit Traps @@ -396,13 +397,14 @@ Add those other swinging traps you mentioned above! else to_chat(user, "You can't pry this sculpture off of the wall.") -/obj/effect/trap/launcher/update_icon() +/obj/effect/trap/launcher/update_icon_state() if(!tripped) icon_state = "[initial(icon_state)]" else if (tripped && !(atom_flags & ATOM_BROKEN)) icon_state = "[initial(icon_state)]_visible" else if (tripped && (atom_flags & ATOM_BROKEN)) icon_state = "[initial(icon_state)]_jammed" + return ..() //Stake Launcher /obj/effect/trap/launcher/stake @@ -473,13 +475,14 @@ Add those other swinging traps you mentioned above! . = ..() visible_message(SPAN_DANGER("\The [src] breaks! It was a trap!")) -/obj/effect/trap/pop_up/update_icon() +/obj/effect/trap/pop_up/update_icon_state() if(!tripped) icon_state = "[initial(icon_state)]" else if(tripped && !(atom_flags & ATOM_BROKEN)) icon_state = "[initial(icon_state)]_visible" else if (tripped && (atom_flags & ATOM_BROKEN)) icon_state = "[initial(icon_state)]_broken" + return ..() //Spear Trap @@ -708,13 +711,14 @@ if (istype(AM, /mob/living)) name = "crooked tile" desc = "The edges of this tile are lifted slightly." -/obj/effect/trap/pop_up/thrower/update_icon() +/obj/effect/trap/pop_up/thrower/update_icon_state() if(!tripped) icon_state = "[initial(icon_state)]" else if (tripped && !(atom_flags & ATOM_BROKEN)) icon_state = "[initial(icon_state)]_visible" else if (tripped && (atom_flags & ATOM_BROKEN)) icon_state = "[initial(icon_state)]_jammed" + return ..() ////////////////// // Falling Traps @@ -743,13 +747,14 @@ if (istype(AM, /mob/living)) to_chat(user, "You cut the ropes suspending the [src], breaking it.") update_icon() -/obj/effect/trap/falling/update_icon() +/obj/effect/trap/falling/update_icon_state() if(!tripped) icon_state = "[initial(icon_state)]" else if (tripped && !(atom_flags & ATOM_BROKEN)) icon_state = "[initial(icon_state)]_visible" else if (tripped && (atom_flags & ATOM_BROKEN)) icon_state = "[initial(icon_state)]_jammed" + return ..() //Falling Log /obj/effect/trap/falling/log @@ -808,10 +813,11 @@ if (istype(AM, /mob/living)) desc = "There's something strange about the lighting around this tile." update_icon() -/obj/effect/trap/falling/log/update_icon() +/obj/effect/trap/falling/log/update_icon_state() if(!tripped) icon_state = "[initial(icon_state)]" else if (tripped && !(atom_flags & ATOM_BROKEN)) icon_state = "[initial(icon_state)]_visible" else if (tripped && (atom_flags & ATOM_BROKEN)) icon_state = "[initial(icon_state)]_jammed" + return ..() diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 9e4845a365f0..115c23d1fa33 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -114,7 +114,7 @@ var/obj/structure/morgue/M = loc M.update(broadcast) -/obj/structure/closet/body_bag/update_icon() +/obj/structure/closet/body_bag/update_icon_state() if(opened) icon_state = icon_opened else @@ -122,7 +122,7 @@ icon_state = "bodybag_closed1" else icon_state = icon_closed - + return ..() /obj/item/bodybag/cryobag name = "stasis bag" diff --git a/code/game/objects/items/defib/defib_kit.dm b/code/game/objects/items/defib/defib_kit.dm index aecb0f11b6ed..5e279ac659a6 100644 --- a/code/game/objects/items/defib/defib_kit.dm +++ b/code/game/objects/items/defib/defib_kit.dm @@ -40,8 +40,8 @@ bcell = /obj/item/cell/apc /obj/item/defib_kit/update_icon() - cut_overlays() + . = ..() var/list/new_overlays = list() if(paddles && paddles.loc == src) //in case paddles got destroyed somehow. diff --git a/code/game/objects/items/defib/shockpaddles.dm b/code/game/objects/items/defib/shockpaddles.dm index 0d69c31f1ed8..57c2cbd2cb3f 100644 --- a/code/game/objects/items/defib/shockpaddles.dm +++ b/code/game/objects/items/defib/shockpaddles.dm @@ -47,6 +47,7 @@ ..() /obj/item/shockpaddles/update_icon() + . = ..() icon_state = "defibpaddles[wielded]" item_state = "defibpaddles[wielded]" if(cooldown) diff --git a/code/game/objects/items/devices/advnifrepair.dm b/code/game/objects/items/devices/advnifrepair.dm index ffde2c060629..a3454b36eba9 100644 --- a/code/game/objects/items/devices/advnifrepair.dm +++ b/code/game/objects/items/devices/advnifrepair.dm @@ -32,6 +32,7 @@ return /obj/item/nifrepairer/update_icon() + . = ..() if(supply.total_volume) icon_state = "[initial(icon_state)]2" else diff --git a/code/game/objects/items/devices/ai_detector.dm b/code/game/objects/items/devices/ai_detector.dm index ee6fd8ed2dd8..91ec58a41b5a 100644 --- a/code/game/objects/items/devices/ai_detector.dm +++ b/code/game/objects/items/devices/ai_detector.dm @@ -82,6 +82,7 @@ return PROXIMITY_NONE /obj/item/multitool/ai_detector/update_icon() + . = ..() icon_state = "[initial(icon_state)][detect_state]" /obj/item/multitool/ai_detector/proc/update_warning(var/old_state, var/new_state) diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index f16209aeb0f0..6202ccb61f78 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -90,6 +90,7 @@ /obj/item/aicard/update_icon() cut_overlays() + . = ..() if(carded_ai) if (!carded_ai.control_disabled) add_overlay("aicard-on") @@ -174,6 +175,7 @@ /obj/item/aicard/aitater/update_icon() cut_overlays() + . = ..() if(carded_ai) if (!carded_ai.control_disabled) add_overlay("aitater-on") @@ -191,6 +193,7 @@ /obj/item/aicard/aispook/update_icon() cut_overlays() + . = ..() if(carded_ai) if (!carded_ai.control_disabled) add_overlay("aispook-on") diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 833e6837bdc1..3ac0a399fbf5 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -62,6 +62,7 @@ ..() /obj/item/flash/update_icon() + . = ..() var/obj/item/cell/battery = power_supply if(use_external_power) @@ -71,7 +72,6 @@ icon_state = "[base_icon]burnt" else icon_state = "[base_icon]" - return /obj/item/flash/get_cell(inducer) return power_supply diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index bcc0961b5634..c0a49b8d4da1 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -69,6 +69,7 @@ /obj/item/gps/update_icon() cut_overlays() + . = ..() if(emped) add_overlay("emp") else if(on) diff --git a/code/game/objects/items/devices/holowarrant.dm b/code/game/objects/items/devices/holowarrant.dm index 38c380ca2101..c59f50d59e0c 100644 --- a/code/game/objects/items/devices/holowarrant.dm +++ b/code/game/objects/items/devices/holowarrant.dm @@ -61,6 +61,7 @@ return CLICKCHAIN_DO_NOT_PROPAGATE /obj/item/holowarrant/update_icon() + . = ..() if(active) icon_state = "holowarrant_filled" else diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index e0cebf5059d3..d9a9bcfeb6f5 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -161,9 +161,9 @@ return new_bulbs /obj/item/lightreplacer/update_icon() + . = ..() icon_state = "lightreplacer[emagged]" - /obj/item/lightreplacer/proc/Use(var/mob/user) playsound(src.loc, 'sound/machines/click.ogg', 50, 1) diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index 8ad2c75ccaeb..0340c914df27 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -20,6 +20,7 @@ GLOBAL_LIST_BOILERPLATE(all_beacons, /obj/item/radio/beacon) /obj/item/radio/beacon/update_icon() cut_overlays() + . = ..() if(!functioning) add_overlay("[base_icon_state]_malfunction") else diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index ae475848b9bf..fa64ba2b9c35 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -33,6 +33,7 @@ CREATE_WALL_MOUNTING_TYPES_SHIFTED(/obj/item/radio/intercom, 28) /obj/item/radio/intercom/update_icon(updates) cut_overlays() + . = ..() if(!on) icon_state = "intercom-p" else diff --git a/code/game/objects/items/devices/radio/jammer.dm b/code/game/objects/items/devices/radio/jammer.dm index 825855051c91..e6592aa6e8ca 100644 --- a/code/game/objects/items/devices/radio/jammer.dm +++ b/code/game/objects/items/devices/radio/jammer.dm @@ -100,6 +100,8 @@ var/global/list/active_radio_jammers = list() to_chat(user,"You insert \the [power_source] into \the [src].") /obj/item/radio_jammer/update_icon() + cut_overlays() + . = ..() if(on) icon_state = active_state else @@ -111,12 +113,9 @@ var/global/list/active_radio_jammers = list() else overlay_percent = 0 - // Only Cut() if we need to. - if(overlay_percent != last_overlay_percent) - cut_overlays() - var/image/I = image(src.icon, src, "jammer_overlay_[overlay_percent]") - add_overlay(I) - last_overlay_percent = overlay_percent + var/image/I = image(src.icon, src, "jammer_overlay_[overlay_percent]") + add_overlay(I) + last_overlay_percent = overlay_percent //Unlimited use, unlimited range jammer for admins. Turn it on, drop it somewhere, it works. /obj/item/radio_jammer/admin diff --git a/code/game/objects/items/devices/scanners_vr.dm b/code/game/objects/items/devices/scanners_vr.dm index 30e29279ffac..1d3c0acd0eb1 100644 --- a/code/game/objects/items/devices/scanners_vr.dm +++ b/code/game/objects/items/devices/scanners_vr.dm @@ -265,9 +265,8 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob return to_chat(usr,"Unable to find that mind in Soulcatcher!") - - /obj/item/sleevemate/update_icon() + . = ..() if(stored_mind) icon_state = "[initial(icon_state)]_on" else diff --git a/code/game/objects/items/devices/t_scanner.dm b/code/game/objects/items/devices/t_scanner.dm index 275015610825..fcd03f85ef30 100644 --- a/code/game/objects/items/devices/t_scanner.dm +++ b/code/game/objects/items/devices/t_scanner.dm @@ -21,6 +21,7 @@ var/global/list/overlay_cache = list() //cache recent overlays /obj/item/t_scanner/update_icon() + . = ..() icon_state = "t-ray[on]" /obj/item/t_scanner/AltClick() diff --git a/code/game/objects/items/glassjar.dm b/code/game/objects/items/glassjar.dm index f118af45063a..edd1fd158641 100644 --- a/code/game/objects/items/glassjar.dm +++ b/code/game/objects/items/glassjar.dm @@ -84,6 +84,7 @@ /obj/item/glass_jar/update_icon() // Also updates name and desc underlays.Cut() cut_overlays() + . = ..() switch(contains) if(0) name = initial(name) diff --git a/code/game/objects/items/id_cards/cards.dm b/code/game/objects/items/id_cards/cards.dm index 3b5d767cf5cc..c530e1f5549e 100644 --- a/code/game/objects/items/id_cards/cards.dm +++ b/code/game/objects/items/id_cards/cards.dm @@ -101,6 +101,7 @@ update_icon() /obj/item/card_fluff/update_icon() + . = ..() if(!sprite_stack || !istype(sprite_stack) || sprite_stack == list("")) icon = base_icon icon_state = initial(icon_state) diff --git a/code/game/objects/items/stacks/marker_beacons.dm b/code/game/objects/items/stacks/marker_beacons.dm index 7c8297d4bd16..2cfd67129499 100644 --- a/code/game/objects/items/stacks/marker_beacons.dm +++ b/code/game/objects/items/stacks/marker_beacons.dm @@ -27,6 +27,7 @@ var/list/marker_beacon_colors = list( max_amount = 100 no_variants = TRUE w_class = WEIGHT_CLASS_SMALL + skip_legacy_icon_update = TRUE var/picked_color = "random" /obj/item/stack/marker_beacon/ten @@ -47,8 +48,9 @@ var/list/marker_beacon_colors = list( . += "Use in-hand to place a [singular_name]." . += "Alt-click to select a color. Current color is [picked_color]." -/obj/item/stack/marker_beacon/update_icon() +/obj/item/stack/marker_beacon/update_icon_state() icon_state = "[initial(icon_state)][lowertext(picked_color)]" + return ..() /obj/item/stack/marker_beacon/attack_self(mob/user, datum/event_args/actor/actor) . = ..() @@ -94,6 +96,8 @@ var/list/marker_beacon_colors = list( /obj/structure/marker_beacon/Initialize(mapload, set_color) . = ..() picked_color = set_color + if(!picked_color || !marker_beacon_colors[picked_color]) + picked_color = pick(marker_beacon_colors) update_icon() /obj/structure/marker_beacon/examine(mob/user, dist) @@ -101,8 +105,7 @@ var/list/marker_beacon_colors = list( . += "Alt-click to select a color. Current color is [picked_color]." /obj/structure/marker_beacon/update_icon() - while(!picked_color || !marker_beacon_colors[picked_color]) - picked_color = pick(marker_beacon_colors) + . = ..() icon_state = "[initial(icon_state)][lowertext(picked_color)]-on" set_light(light_range, light_power, marker_beacon_colors[picked_color]) @@ -145,22 +148,8 @@ var/list/marker_beacon_colors = list( /obj/structure/marker_beacon/red picked_color = "Burgundy" -/obj/structure/marker_beacon/red/update_icon() - while(!picked_color || !marker_beacon_colors[picked_color]) - picked_color = "Burgundy" - icon_state = "[initial(icon_state)][lowertext(picked_color)]-on" - set_light(light_range, light_power, marker_beacon_colors[picked_color]) - /obj/structure/marker_beacon/yellow picked_color = "Yellow" -/obj/structure/marker_beacon/yellow/update_icon() - icon_state = "[initial(icon_state)][lowertext(picked_color)]-on" - set_light(light_range, light_power, marker_beacon_colors[picked_color]) - /obj/structure/marker_beacon/green picked_color = "Green" - -/obj/structure/marker_beacon/green/update_icon() - icon_state = "[initial(icon_state)][lowertext(picked_color)]-on" - set_light(light_range, light_power, marker_beacon_colors[picked_color]) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 748b839080cb..29984cce679e 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -1,7 +1,9 @@ /obj/item/stack/medical name = "medical pack" singular_name = "medical pack" - icon = 'icons/obj/stacks.dmi' + icon = 'icons/items/stacks/medical.dmi' + use_new_icon_update = TRUE + skip_legacy_icon_update = TRUE amount = 10 max_amount = 10 w_class = WEIGHT_CLASS_SMALL @@ -83,7 +85,9 @@ name = "crude bandage" singular_name = "crude bandage length" desc = "Some bandages to wrap around bloody stumps." - icon_state = "gauze" + icon_state = "bandage" + icon_state_count = 3 + base_icon_state = "bandage" origin_tech = list(TECH_BIO = 1) no_variants = FALSE apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg') @@ -146,8 +150,10 @@ /obj/item/stack/medical/bruise_pack name = "roll of gauze" singular_name = "gauze length" + icon_state = "gauze" + icon_state_count = 3 + base_icon_state = "gauze" desc = "Some sterile gauze to wrap around bloody stumps." - icon_state = "brutepack" origin_tech = list(TECH_BIO = 1) no_variants = FALSE apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg') @@ -216,6 +222,8 @@ gender = PLURAL singular_name = "ointment" icon_state = "ointment" + icon_state_count = 3 + base_icon_state = "ointment" heal_burn = 1 origin_tech = list(TECH_BIO = 1) no_variants = FALSE @@ -257,7 +265,9 @@ name = "advanced trauma kit" singular_name = "advanced trauma kit" desc = "An advanced trauma kit for severe injuries." - icon_state = "traumakit" + icon_state = "brute_adv" + icon_state_count = 6 + base_icon_state = "brute_adv" heal_brute = 7 origin_tech = list(TECH_BIO = 1) apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg','sound/effects/tape.ogg') @@ -319,7 +329,9 @@ name = "advanced burn kit" singular_name = "advanced burn kit" desc = "An advanced treatment kit for severe burns." - icon_state = "burnkit" + icon_state = "burn_adv" + icon_state_count = 6 + base_icon_state = "burn_adv" heal_burn = 7 origin_tech = list(TECH_BIO = 1) apply_sounds = list('sound/effects/ointment.ogg') @@ -360,6 +372,7 @@ singular_name = "medical splint" desc = "Modular splints capable of supporting and immobilizing bones in all areas of the body." icon_state = "splint" + base_icon_state = "splint" amount = 5 max_amount = 5 drop_sound = 'sound/items/drop/hat.ogg' @@ -421,7 +434,8 @@ name = "makeshift splints" singular_name = "makeshift splint" desc = "For holding your limbs in place with duct tape and scrap metal." - icon_state = "tape-splint" + icon_state = "splint_tape" + base_icon_state = "splint_tape" amount = 1 splintable_organs = list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG) @@ -429,37 +443,18 @@ name = "primitive splints" singular_name = "makeshift splint" desc = "For holding your limbs in place with hide and sinew." - icon_state = "primitive-splint" + icon_state = "splint_primitive" + base_icon_state = "splint_primitive" amount = 5 -// Begin Citadel Changes - New advanced kit sprites -/obj/item/stack/medical/advanced/Initialize(mapload) - . = ..() - update_icon() - -/obj/item/stack/medical/advanced/update_icon() - switch(amount) - if(1 to 2) - icon_state = initial(icon_state) - if(3 to 4) - icon_state = "[initial(icon_state)]_4" - if(5 to 6) - icon_state = "[initial(icon_state)]_6" - if(7 to 8) - icon_state = "[initial(icon_state)]_8" - if(9) - icon_state = "[initial(icon_state)]_9" - else - icon_state = "[initial(icon_state)]_10" -// End Citadel Changes +// todo: kick ashlander crap to ashlander faction or something, why is this here? //Ashlander Poultices - They basically use the same stack system as ointment and bruise packs. Gotta dupe some of the code since bruise pack/ointment chat messages are too specific. /obj/item/stack/medical/poultice_brute name = "poultice (juhtak)" singular_name = "poultice (juhtak)" desc = "A damp mush made from the pulp of a juhtak. It is used to treat flesh injuries." - icon_state = "poulticebrute" - no_variants = TRUE + icon_state = "brute_poultice" apply_sounds = list('sound/effects/ointment.ogg') drop_sound = 'sound/items/drop/herb.ogg' pickup_sound = 'sound/items/pickup/herb.ogg' @@ -525,7 +520,7 @@ desc = "A damp mush infused with pyrrhlea petals. It is used to treat burns." gender = PLURAL singular_name = "poultice (pyrrhlea)" - icon_state = "poulticeburn" + icon_state = "burn_poultice" heal_burn = 1 no_variants = TRUE apply_sounds = list('sound/effects/ointment.ogg') diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index b36e45205058..a4d0a46bd6d4 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -13,18 +13,20 @@ materials_base = list(MAT_STEEL = SHEET_MATERIAL_AMOUNT / 2) max_amount = 60 attack_verb = list("hit", "bludgeoned", "whacked") + skip_legacy_icon_update = TRUE /obj/item/stack/rods/generate_explicit_recipes() . = list() . += create_stack_recipe_datum(name = "grille", product = /obj/structure/grille, cost = 2, time = 1 SECONDS) . += create_stack_recipe_datum(name = "catwalk", product = /obj/structure/catwalk, cost = 2, time = 1 SECONDS) -/obj/item/stack/rods/update_icon() +/obj/item/stack/rods/update_icon_state() var/amount = get_amount() if((amount <= 5) && (amount > 0)) icon_state = "rods-[amount]" else icon_state = "rods" + return ..() /obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob) if (istype(W, /obj/item/weldingtool)) diff --git a/code/game/objects/items/stacks/sandbag.dm b/code/game/objects/items/stacks/sandbag.dm index b7d9b67d49ab..a445097edec6 100644 --- a/code/game/objects/items/stacks/sandbag.dm +++ b/code/game/objects/items/stacks/sandbag.dm @@ -19,7 +19,7 @@ . = ..() update_icon() -/obj/item/stack/emptysandbag/update_icon() +/obj/item/stack/emptysandbag/update_icon_state() var/amount = get_amount() if((amount >= 35)) icon_state = "sandbag_empty_3" @@ -27,6 +27,7 @@ icon_state = "sandbag_empty_2" else icon_state = "sandbag_empty" + return ..() /obj/item/stack/emptysandbag/attackby(var/obj/item/W, var/mob/user) if(istype(W, /obj/item/stack/ore/glass) && !interact(user, src)) @@ -66,7 +67,7 @@ . = ..() update_icon() -/obj/item/stack/sandbags/update_icon() +/obj/item/stack/sandbags/update_icon_state() var/amount = get_amount() if((amount >= 35)) icon_state = "sandbags_3" @@ -74,6 +75,7 @@ icon_state = "sandbags_2" else icon_state = "sandbags" + return ..() /obj/item/stack/sandbags/generate_explicit_recipes() . = list() diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 6aa51a10242d..242950b271ad 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -57,6 +57,17 @@ /// skip default / old update_icon() handling var/skip_legacy_icon_update = FALSE + /// use new update icon system + /// * this is mandatory for all new stacks + var/use_new_icon_update = FALSE + + /// Total number of states used in updating icons. + /// todo: all stacks should use this, remove `use_new_icon_update + /// + /// * Only active when [use_new_icon_update] is set on + /// * This counts up from 1. + /// * If null, we don't do icon updates based on amount. + var/icon_state_count /// Will the item pass its own color var to the created item? Dyed cloth, wood, etc. var/pass_color = FALSE @@ -82,7 +93,16 @@ merge(S) update_icon() +/obj/item/stack/update_icon_state() + if(!use_new_icon_update) + return ..() + if(!icon_state_count) + return ..() + icon_state = "[base_icon_state || initial(icon_state)]-[get_amount_icon_notch(get_amount())]" + return ..() + /obj/item/stack/update_icon() + . = ..() if(skip_legacy_icon_update) return if(no_variants) @@ -428,6 +448,18 @@ update_icon() return TRUE +//* Getters *// + +/** + * Get the number for `iconstate-[n]` icon state rendering. + * + * @return number, or null if `icon_state_count` isn't set. + */ +/obj/item/stack/proc/get_amount_icon_notch(the_amount) + if(!icon_state_count) + return null + return CEILING(the_amount / max_amount * icon_state_count, 1) + //* Types *// /** diff --git a/code/game/objects/items/stacks/tickets.dm b/code/game/objects/items/stacks/tickets.dm index a88abfc9fbb8..ae1ef53e8d13 100644 --- a/code/game/objects/items/stacks/tickets.dm +++ b/code/game/objects/items/stacks/tickets.dm @@ -11,7 +11,7 @@ . = ..() update_icon() -/obj/item/stack/arcadeticket/update_icon() +/obj/item/stack/arcadeticket/update_icon_state() var/amount = get_amount() switch(amount) if(12 to INFINITY) @@ -22,6 +22,7 @@ icon_state = "arcade-ticket_2" else icon_state = "arcade-ticket" + return ..() /obj/item/stack/arcadeticket/proc/pay_tickets() amount -= 2 diff --git a/code/game/objects/items/storage/misc_legacy/fancy.dm b/code/game/objects/items/storage/misc_legacy/fancy.dm index f90b8602fb9c..4a8aa3a8d47b 100644 --- a/code/game/objects/items/storage/misc_legacy/fancy.dm +++ b/code/game/objects/items/storage/misc_legacy/fancy.dm @@ -128,6 +128,7 @@ /obj/item/storage/fancy/crayons/update_icon() cut_overlays() + . = ..() for(var/obj/item/pen/crayon/crayon in contents) add_overlay(crayon.crayon_color_name) @@ -168,6 +169,7 @@ /obj/item/storage/fancy/markers/update_icon() cut_overlays() + . = ..() for(var/obj/item/pen/crayon/marker/marker in contents) add_overlay("m[marker.crayon_color_name]") @@ -205,6 +207,7 @@ /obj/item/storage/fancy/chalk/update_icon() cut_overlays() + . = ..() for(var/obj/item/pen/crayon/chalk/chalk in contents) add_overlay("c[chalk.crayon_color_name]") @@ -372,9 +375,9 @@ atom_flags |= NOREACT create_reagents(15 * max_items) -/obj/item/storage/fancy/cigar/update_icon() +/obj/item/storage/fancy/cigar/update_icon_state() icon_state = "[initial(icon_state)][contents.len]" - return + return ..() /obj/item/storage/fancy/cigar/Exited(atom/movable/AM, atom/newLoc) . = ..() @@ -436,11 +439,12 @@ update_icon() /obj/item/storage/lockbox/vials/update_icon(itemremoved = 0) + cut_overlays() + . = ..() + var/total_contents = contents.len - itemremoved icon_state = "vialbox[total_contents]" - cut_overlays() - var/list/overlays_to_add = list() if (!broken) overlays_to_add += image(icon, src, "led[locked]") @@ -486,6 +490,6 @@ . = ..() update_icon() -/obj/item/storage/fancy/heartbox/update_icon(var/itemremoved = 0) - if (contents.len == 0) - icon_state = "heartbox_empty" +/obj/item/storage/fancy/heartbox/update_icon_state() + icon_state = length(contents) ? "chocolate" : "heartbox_empty" + return ..() diff --git a/code/game/objects/items/storage/misc_legacy/misc.dm b/code/game/objects/items/storage/misc_legacy/misc.dm index 4a8c429dc18a..86652e3efac2 100644 --- a/code/game/objects/items/storage/misc_legacy/misc.dm +++ b/code/game/objects/items/storage/misc_legacy/misc.dm @@ -21,10 +21,12 @@ /obj/item/storage/box/donut/update_icon() cut_overlays() + . = ..() var/i = 0 for(var/obj/item/reagent_containers/food/snacks/donut/D in contents) - add_overlay("[i][D.overlay_state]") - i++ + add_overlay("[i++][D.overlay_state]") + if(i >= 6) + break /obj/item/storage/box/donut/empty empty = TRUE @@ -50,9 +52,9 @@ . = ..() obj_storage.update_icon_on_item_change = TRUE -/obj/item/storage/box/wormcan/update_icon(var/itemremoved = 0) - if (contents.len == 0) - icon_state = "wormcan_empty" +/obj/item/storage/box/wormcan/update_icon_state() + icon_state = length(contents) ? "wormcan" : "wormcan_empty" + return ..() /obj/item/storage/box/wormcan/sickly icon_state = "wormcan_sickly" @@ -61,9 +63,9 @@ max_combined_volume = WEIGHT_VOLUME_TINY * 6 starts_with = list(/obj/item/reagent_containers/food/snacks/wormsickly = 6) -/obj/item/storage/box/wormcan/sickly/update_icon(var/itemremoved = 0) - if (contents.len == 0) - icon_state = "wormcan_empty_sickly" +/obj/item/storage/box/wormcan/sickly/update_icon_state() + icon_state = length(contents) ? "wormcan_empty_sickly" : "wormcan_sickly" + return ..() /obj/item/storage/box/wormcan/deluxe icon_state = "wormcan_deluxe" @@ -73,8 +75,8 @@ starts_with = list(/obj/item/reagent_containers/food/snacks/wormdeluxe = 6) /obj/item/storage/box/wormcan/deluxe/update_icon(var/itemremoved = 0) - if (contents.len == 0) - icon_state = "wormcan_empty_deluxe" + icon_state = length(contents) ? "wormcan_deluxe" : "wormcan_empty_deluxe" + return ..() //Snowflake Survival Knife Code /obj/item/storage/box/survival_knife diff --git a/code/game/objects/items/storage/misc_legacy/trinket_box.dm b/code/game/objects/items/storage/misc_legacy/trinket_box.dm index ba2c70fc545a..5fd868b2fb25 100644 --- a/code/game/objects/items/storage/misc_legacy/trinket_box.dm +++ b/code/game/objects/items/storage/misc_legacy/trinket_box.dm @@ -18,6 +18,7 @@ /obj/item/storage/trinketbox/update_icon() cut_overlays() + . = ..() if(open) icon_state = open_state diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm index 07b417800323..b8ae16dde897 100644 --- a/code/game/objects/items/storage/wallets.dm +++ b/code/game/objects/items/storage/wallets.dm @@ -72,6 +72,7 @@ /obj/item/storage/wallet/update_icon() cut_overlays() + . = ..() if(front_id) var/tiny_state = "id-generic" if(("id-"+front_id.icon_state) in icon_states(icon)) diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index a2eced2bcc8e..be0ad32a794e 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -743,6 +743,7 @@ return /obj/item/weldingtool/electric/crystal/update_icon() + . = ..() icon_state = welding ? "crystal_welder_on" : "crystal_welder" item_state = welding ? "crystal_tool_lit" : "crystal_tool" update_worn_icon() diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 069da682a19a..915f314f32cf 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -75,16 +75,14 @@ for(var/atom/A in get_turf(hit_atom)) src.reagents.touch(A) src.icon_state = "burst" - spawn(5) - if(src) - qdel(src) - return + QDEL_IN(src, 5) -/obj/item/toy/balloon/update_icon() - if(src.reagents.total_volume >= 1) +/obj/item/toy/balloon/update_icon_state() + if(reagents.total_volume) icon_state = "waterballoon" else icon_state = "waterballoon-e" + return ..() /obj/item/toy/syndicateballoon name = "criminal balloon" diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index f1d8b52b6086..12eff7e01ba9 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -473,6 +473,7 @@ update_icon() /obj/effect/constructing_effect/update_icon() + . = ..() icon_state = "rcd" if (delay < 10) icon_state += "_shortest" diff --git a/code/game/objects/items/weapons/barrier_tape.dm b/code/game/objects/items/weapons/barrier_tape.dm index c12379f28bec..e4f3cf655366 100644 --- a/code/game/objects/items/weapons/barrier_tape.dm +++ b/code/game/objects/items/weapons/barrier_tape.dm @@ -40,6 +40,7 @@ var/list/tape_roll_applications = list() var/icon_base = "tape" /obj/item/barrier_tape_segment/update_icon() + . = ..() //Possible directional bitflags: 0 (AIRLOCK), 1 (NORTH), 2 (SOUTH), 4 (EAST), 8 (WEST), 3 (VERTICAL), 12 (HORIZONTAL) switch (tape_dir) if(0) // AIRLOCK @@ -50,7 +51,7 @@ var/list/tape_roll_applications = list() icon_state = "[icon_base]_h_[crumpled]" else // END POINT (1|2|4|8) icon_state = "[icon_base]_dir_[crumpled]" - dir = tape_dir + setDir(tape_dir) /obj/item/barrier_tape_segment/Initialize(mapload) . = ..() @@ -115,6 +116,7 @@ var/list/tape_roll_applications = list() /obj/item/barrier_tape_roll/update_icon() cut_overlays() + . = ..() var/image/overlay = image(icon = src.icon) overlay.appearance_flags = RESET_COLOR if(ismob(loc)) @@ -124,7 +126,6 @@ var/list/tape_roll_applications = list() overlay.icon_state = "stop" add_overlay(overlay) - /obj/item/barrier_tape_roll/dropped(mob/user, flags, atom/newLoc) update_icon() return ..() diff --git a/code/game/objects/items/weapons/candle.dm b/code/game/objects/items/weapons/candle.dm index 733e0cac1d0c..ae5bc7ee4456 100644 --- a/code/game/objects/items/weapons/candle.dm +++ b/code/game/objects/items/weapons/candle.dm @@ -15,7 +15,7 @@ . = ..() wax -= rand(800, 1000) // Enough for 27-33 minutes. 30 minutes on average. -/obj/item/flame/candle/update_icon() +/obj/item/flame/candle/update_icon_state() var/i if(wax > 1500) i = 1 @@ -23,6 +23,7 @@ i = 2 else i = 3 icon_state = "[icon_type][i][lit ? "_lit" : ""]" + return ..() /obj/item/flame/candle/attackby(obj/item/W as obj, mob/user as mob) ..() @@ -103,6 +104,7 @@ wax = 20000 /obj/item/flame/candle/candelabra/update_icon() + . = ..() if(wax == 0) icon_state = "candelabra_melted" else diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index eaaaa9069fcd..9f649d070145 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -45,6 +45,7 @@ /obj/item/flamethrower/update_icon() cut_overlays() + . = ..() var/list/overlays_to_add = list() if(igniter) @@ -59,8 +60,6 @@ add_overlay(overlays_to_add) - return - /obj/item/flamethrower/afterattack(atom/target, mob/user, clickchain_flags, list/params) if(!(clickchain_flags & CLICKCHAIN_HAS_PROXIMITY)) return // Make sure our user is still holding us diff --git a/code/game/objects/items/weapons/grenades/supermatter.dm b/code/game/objects/items/weapons/grenades/supermatter.dm index d63c30e26a52..cc194536a677 100644 --- a/code/game/objects/items/weapons/grenades/supermatter.dm +++ b/code/game/objects/items/weapons/grenades/supermatter.dm @@ -20,6 +20,7 @@ /obj/item/grenade/supermatter/update_icon() cut_overlays() + . = ..() if(implode_at) add_overlay(image(icon = 'icons/rust.dmi', icon_state = "emfield_s1")) diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm index 9c5552e072f8..01ddebf4bb40 100644 --- a/code/game/objects/items/weapons/material/ashtray.dm +++ b/code/game/objects/items/weapons/material/ashtray.dm @@ -20,6 +20,7 @@ var/global/list/ashtray_cache = list() color = null cut_overlays() + . = ..() var/datum/prototype/material/material = get_primary_material() var/list/overlays_to_add = list() diff --git a/code/game/objects/items/weapons/material/chainsaw.dm b/code/game/objects/items/weapons/material/chainsaw.dm index f59a85b91aa6..96403f333e51 100644 --- a/code/game/objects/items/weapons/material/chainsaw.dm +++ b/code/game/objects/items/weapons/material/chainsaw.dm @@ -107,6 +107,7 @@ return(BRUTELOSS) /obj/item/chainsaw/update_icon() + . = ..() if(on) icon_state = "chainsaw1" item_state = "chainsaw1" @@ -160,6 +161,7 @@ update_icon() /obj/item/chainsaw/chainsword/update_icon() + . = ..() if(on) icon_state = "chainsword1" item_state = "chainsword1" diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index 027a90f6b4d9..851f42171367 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -54,6 +54,7 @@ update_icon() /obj/item/material/twohanded/update_icon() + . = ..() icon_state = "[base_icon][wielded]" item_state = icon_state diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 4a05db8d2370..6129f952413c 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -63,6 +63,7 @@ update_icon() /obj/item/melee/baton/update_icon() + . = ..() if(status) icon_state = "[initial(icon_state)]_active" else if(!bcell) diff --git a/code/game/objects/structures/bonfire.dm b/code/game/objects/structures/bonfire.dm index e014dc527dfc..76d39175bc39 100644 --- a/code/game/objects/structures/bonfire.dm +++ b/code/game/objects/structures/bonfire.dm @@ -200,6 +200,7 @@ /obj/structure/bonfire/update_icon() cut_overlays() + . = ..() var/list/overlays_to_add = list() if(burning) var/state @@ -373,6 +374,7 @@ /obj/structure/fireplace/update_icon() cut_overlays() + . = ..() if(burning) var/state switch(get_fuel_amount()) diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm index 3c7e21c9f3a4..45a93625c590 100644 --- a/code/game/objects/structures/coathanger.dm +++ b/code/game/objects/structures/coathanger.dm @@ -46,6 +46,7 @@ /obj/structure/coatrack/update_icon() cut_overlays() + . = ..() var/list/overlays_to_add = list() if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat)) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index 230c31e311ca..e503fe23d88e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -82,7 +82,7 @@ /obj/item/mining_scanner, /obj/item/gps/mining, /obj/item/survivalcapsule, - /obj/item/clothing/glasses/material, + /obj/item/clothing/glasses/meson, /obj/item/clothing/suit/storage/hooded/miner, /obj/item/clothing/suit/storage/hooded/wintercoat/miner, /obj/item/clothing/shoes/boots/winter/mining, diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 994b2e183976..09a66d6890bd 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -180,6 +180,7 @@ return /obj/structure/fireaxecabinet/update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers + . = ..() hasaxe = 0 if(fireaxe) hasaxe = 1 diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm index e988470c54cd..6ce56654f822 100644 --- a/code/game/objects/structures/railing.dm +++ b/code/game/objects/structures/railing.dm @@ -93,10 +93,11 @@ R.update_icon(UpdateNeighbors = FALSE) /obj/structure/railing/update_icon(updates, UpdateNeighbors = TRUE) - NeighborsCheck(UpdateNeighbors) //layer = (dir == SOUTH) ? FLY_LAYER : initial(layer) // wtf does this even do cut_overlays() + . = ..() + NeighborsCheck(UpdateNeighbors) if (!check || !anchored)//|| !anchored icon_state = "railing0" else diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 7f4641ea6de5..b1e99b3a065f 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -48,27 +48,24 @@ FLOOR SAFES return 1 return 0 - /obj/structure/safe/proc/decrement(num) num -= 1 if(num < 0) num = 71 return num - /obj/structure/safe/proc/increment(num) num += 1 if(num > 71) num = 0 return num - -/obj/structure/safe/update_icon() +/obj/structure/safe/update_icon_state() if(open) icon_state = "[initial(icon_state)]-open" else icon_state = initial(icon_state) - + return ..() /obj/structure/safe/attack_hand(mob/user, datum/event_args/actor/clickchain/e_args) user.set_machine(src) diff --git a/code/game/objects/structures/simple_doors.dm b/code/game/objects/structures/simple_doors.dm index 09824f2a6936..5fd867f87ef6 100644 --- a/code/game/objects/structures/simple_doors.dm +++ b/code/game/objects/structures/simple_doors.dm @@ -117,7 +117,7 @@ isSwitchingStates = 0 update_nearby_tiles() -/obj/structure/simple_door/update_icon() +/obj/structure/simple_door/update_icon_state() var/datum/prototype/material/material = get_primary_material() if(isnull(material)) icon_state = state? "open" : "closed" @@ -126,6 +126,7 @@ icon_state = "[material.door_icon_base]open" else icon_state = material.door_icon_base + return ..() /obj/structure/simple_door/attackby(obj/item/W as obj, mob/user as mob) if(user.a_intent == INTENT_HARM) diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm index d9e4a6b18fd1..b93d37331691 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm @@ -10,9 +10,6 @@ integrity = 100 integrity_max = 100 -/obj/structure/bed/nest/update_icon() - return - /obj/structure/bed/nest/mob_resist_buckle(mob/M, semantic) . = ..() if(!.) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index d5b3423d2234..5c2b92fff456 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -7,6 +7,7 @@ /* * Beds */ +// todo: /bed/material, same with chairs, same with tables, etc, because what the fuck is going on /obj/structure/bed name = "bed" desc = "This is used to lie in, sleep in or strap on." @@ -19,11 +20,15 @@ pass_flags_self = ATOM_PASS_TABLE | ATOM_PASS_OVERHEAD_THROW buckle_dir = SOUTH buckle_lying = 90 + + // todo: what a dumpster fire, unfuck / fully abstract this using new API, + // or get rid of it. wtf. var/datum/prototype/material/material var/datum/prototype/material/padding_material var/base_icon = "bed" var/material_color = 1 var/can_buckle = TRUE + var/legacy_do_not_use_material = FALSE /obj/structure/bed/Initialize(mapload, new_material, new_padding_material) . = ..(mapload) @@ -40,9 +45,12 @@ // Reuse the cache/code from stools, todo maybe unify. /obj/structure/bed/update_icon() + if(!material || legacy_do_not_use_material) + return ..() + cut_overlays() + . = ..() // Prep icon. icon_state = "" - cut_overlays() var/list/overlays_to_add = list() // Base icon. var/cache_key = "[base_icon]-[material.name]" @@ -189,10 +197,15 @@ base_icon_state = "rollerbed" anchored = FALSE surgery_odds = 75 + legacy_do_not_use_material = TRUE var/bedtype = /obj/structure/bed/roller var/rollertype = /obj/item/roller +/obj/structure/bed/roller/Initialize(mapload, new_material, new_padding_material) + . = ..() + material = null + /obj/structure/bed/roller/adv name = "advanced roller bed" icon_state = "rollerbedadv" @@ -232,9 +245,6 @@ for(var/mob/M in old_buckled) buckle_mob(M, BUCKLE_OP_FORCE) -/obj/structure/bed/roller/update_icon() - return - /obj/structure/bed/roller/attackby(obj/item/W as obj, mob/user as mob) if(W.is_wrench() || istype(W,/obj/item/stack) || W.is_wirecutter()) return @@ -375,8 +385,5 @@ icon = 'icons/obj/abductor.dmi' icon_state = "bed" -/obj/structure/bed/alien/update_icon() - return // Doesn't care about material or anything else. - /obj/structure/bed/alien/attackby(obj/item/W, mob/user) return // No deconning. diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs_vr.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs_vr.dm index 766492532319..30843bdca39f 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs_vr.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs_vr.dm @@ -42,6 +42,7 @@ // Baystation12 chairs with their larger update_icons proc /obj/structure/bed/chair/bay/update_icon() + // todo: this should call parent // Strings. desc = initial(desc) if(padding_material) diff --git a/code/game/objects/structures/tables/defense.dm b/code/game/objects/structures/tables/defense.dm index 856ffe96aece..4c02505208ed 100644 --- a/code/game/objects/structures/tables/defense.dm +++ b/code/game/objects/structures/tables/defense.dm @@ -9,11 +9,11 @@ new carpeted_type(where) else if(prob(20)) - material_reinforcing.place_sheet(where, 1) + material_reinforcing?.place_sheet(where, 1) else material_reinforcing?.place_shard(where) if(prob(20)) - material_base.place_sheet(where, 1) + material_base?.place_sheet(where, 1) else material_base?.place_shard(where) new /obj/item/stack/rods(where, 2) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index e9574cada346..d22ccb6841c6 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -41,8 +41,9 @@ open = !open update_icon() -/obj/structure/toilet/update_icon() +/obj/structure/toilet/update_icon_state() icon_state = "toilet[open][cistern]" + return ..() /obj/structure/toilet/attackby(obj/item/I as obj, mob/living/user as mob) if(I.is_crowbar()) @@ -202,6 +203,7 @@ /obj/machinery/shower/update_icon() //this is terribly unreadable, but basically it makes the shower mist up cut_overlays() //once it's been on for a while, in addition to handling the water overlay. + . = ..() if(mymist) qdel(mymist) mymist = null diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index c5c1968e6ae9..9e55a20c5805 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -48,12 +48,13 @@ update_nearby_tiles() /obj/structure/windoor_assembly/Destroy() - density = 0 + set_density(FALSE) update_nearby_tiles() - ..() + return ..() -/obj/structure/windoor_assembly/update_icon() +/obj/structure/windoor_assembly/update_icon_state() icon_state = "[facing]_[secure]windoor_assembly[state]" + return ..() /obj/structure/windoor_assembly/CanAllowThrough(atom/movable/mover, turf/target) if(!(get_dir(loc, mover) & dir)) diff --git a/code/game/rendering/legacy/ability_screen_objects.dm b/code/game/rendering/legacy/ability_screen_objects.dm index f0ed59a261ee..29e4f52a0af0 100644 --- a/code/game/rendering/legacy/ability_screen_objects.dm +++ b/code/game/rendering/legacy/ability_screen_objects.dm @@ -104,7 +104,9 @@ ability.maptext = "[ability.index]" // Slot number i++ +// todo: what the fuck? /atom/movable/screen/movable/ability_master/update_icon() + . = ..() if(ability_objects.len) invisibility = 0 else @@ -249,6 +251,7 @@ // else // icon_state = "[spell_base]_spell_ready" cut_overlays() + . = ..() icon_state = "[background_base_state]_spell_base" add_overlay(ability_icon_state) diff --git a/code/game/rendering/screen_legacy.dm b/code/game/rendering/screen_legacy.dm index a73cce930e51..112f7981d4bb 100644 --- a/code/game/rendering/screen_legacy.dm +++ b/code/game/rendering/screen_legacy.dm @@ -118,6 +118,7 @@ /atom/movable/screen/zone_sel/update_icon() cut_overlays() + . = ..() add_overlay(image('icons/mob/zone_sel.dmi', "[selecting]")) /// The UI Button to open the TGUI Crafting Menu diff --git a/code/game/turfs/simulated/wall_types/shuttle.dm b/code/game/turfs/simulated/wall_types/shuttle.dm index 347ccd03924b..fe61b5b91e95 100644 --- a/code/game/turfs/simulated/wall_types/shuttle.dm +++ b/code/game/turfs/simulated/wall_types/shuttle.dm @@ -167,6 +167,7 @@ update_icon() /turf/simulated/shuttle/wall/voidcraft/update_icon() + . = ..() if(stripe_color) cut_overlays() var/image/I = image(icon = src.icon, icon_state = "o_[icon_state]") diff --git a/code/modules/artwork/items/poster.dm b/code/modules/artwork/items/poster.dm index d1be0da56d4d..0e76ddfa48a2 100644 --- a/code/modules/artwork/items/poster.dm +++ b/code/modules/artwork/items/poster.dm @@ -30,7 +30,7 @@ /obj/item/poster/proc/set_poster_design(datum/prototype/poster_design/design) src.name = "rolled-up-poster - [design.name]" - src.desc = "[initial(src.desc)] [design.desc]" + src.desc = "[/obj/item/poster::desc] [design.desc]" src.poster_design_id = design.id //Places the poster on a wall diff --git a/code/modules/artwork/structures/poster.dm b/code/modules/artwork/structures/poster.dm index 0c2f3147a1e8..5aff09145088 100644 --- a/code/modules/artwork/structures/poster.dm +++ b/code/modules/artwork/structures/poster.dm @@ -45,7 +45,7 @@ /obj/structure/poster/proc/set_poster_design(datum/prototype/poster_design/design) src.name = "rolled-up-poster - [design.name]" - src.desc = "[initial(src.desc)] [design.desc]" + src.desc = "[/obj/structure/poster::desc] [design.desc]" src.poster_design_id = design.id src.icon = design.icon src.icon_state = design.icon_state diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 6cc9c57a6b7f..b8587accaec2 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -45,6 +45,7 @@ /obj/item/assembly_holder/update_icon() cut_overlays() + . = ..() if(a_left) add_overlay("[a_left.icon_state]_left") for(var/O in a_left.attached_overlays) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 2fb80cbb03af..687d758c207c 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -101,11 +101,12 @@ Thus, the two variables affect pump operation are set in New(): icon_state = "map_on-aux" use_power = 1 -/obj/machinery/atmospherics/component/binary/pump/update_icon() +/obj/machinery/atmospherics/component/binary/pump/update_icon_state() if(!powered()) icon_state = "[base_icon]-off" else icon_state = "[use_power ? "[base_icon]-on" : "[base_icon]-off"]" + return ..() /obj/machinery/atmospherics/component/binary/pump/update_underlays() if(..()) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm index be7fc2a85e66..679bcc91a75e 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm @@ -22,11 +22,11 @@ open = 1 icon_state = "map_valve1" -/obj/machinery/atmospherics/valve/update_icon(animation) - if(animation) - flick("valve[src.open][!src.open]",src) - else - icon_state = "valve[open]" +/obj/machinery/atmospherics/valve/update_icon_state() + // if(animation) + // flick("valve[src.open][!src.open]",src) + icon_state = "valve[open]" + return ..() /obj/machinery/atmospherics/valve/update_underlays() if(..()) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index b5569a6e056f..6c4eebb9aa4f 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -13,7 +13,9 @@ use_power = USE_POWER_IDLE icon_state = "map_on" -/obj/machinery/atmospherics/component/binary/pump/high_power/update_icon() +/obj/machinery/atmospherics/component/binary/pump/high_power/update_icon_state() + // todo: no don't do this + SHOULD_CALL_PARENT(FALSE) if(!powered()) icon_state = "off" else diff --git a/code/modules/atmospherics/machinery/components/omni_devices/omni_base.dm b/code/modules/atmospherics/machinery/components/omni_devices/omni_base.dm index 88d6a2837072..3402aca06c88 100644 --- a/code/modules/atmospherics/machinery/components/omni_devices/omni_base.dm +++ b/code/modules/atmospherics/machinery/components/omni_devices/omni_base.dm @@ -49,6 +49,7 @@ build_icons() /obj/machinery/atmospherics/component/quaternary/update_icon() + . = ..() if(machine_stat & NOPOWER) set_overlays(overlays_off.Copy()) else if(error_check()) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index 1af33310211e..8cd2766430db 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -20,7 +20,8 @@ //node 3 is the outlet, nodes 1 & 2 are intakes -/obj/machinery/atmospherics/component/trinary/mixer/update_icon(var/safety = 0) +/obj/machinery/atmospherics/component/trinary/mixer/update_icon() + . = ..() if(tee) icon_state = "t" else if(mirrored) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/tvalve.dm b/code/modules/atmospherics/machinery/components/trinary_devices/tvalve.dm index 6df7bc5a6a39..f82149660609 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/tvalve.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/tvalve.dm @@ -27,8 +27,9 @@ icon_state = "map_tvalve1" state = 1 -/obj/machinery/atmospherics/tvalve/update_icon(animation) +/obj/machinery/atmospherics/tvalve/update_icon_state() icon_state = "tvalve[mirrored ? "m" : ""][state]" + return ..() /obj/machinery/atmospherics/tvalve/proc/animation() flick("tvalve[mirrored ? "m" : ""][src.state][!src.state]",src) diff --git a/code/modules/atmospherics/machinery/components/unary/gas_freezer.dm b/code/modules/atmospherics/machinery/components/unary/gas_freezer.dm index e7c576661f2c..4a3b8d4dd0ad 100644 --- a/code/modules/atmospherics/machinery/components/unary/gas_freezer.dm +++ b/code/modules/atmospherics/machinery/components/unary/gas_freezer.dm @@ -46,7 +46,7 @@ if(node) update_icon() -/obj/machinery/atmospherics/component/unary/freezer/update_icon() +/obj/machinery/atmospherics/component/unary/freezer/update_icon_state() if(node) if(use_power && cooling) icon_state = "freezer_1" @@ -54,7 +54,7 @@ icon_state = "freezer" else icon_state = "freezer_0" - return + return ..() /obj/machinery/atmospherics/component/unary/freezer/attack_ai(mob/user as mob) ui_interact(user) diff --git a/code/modules/atmospherics/machinery/components/unary/gas_heater.dm b/code/modules/atmospherics/machinery/components/unary/gas_heater.dm index 022f5157f20b..dbf37cc78662 100644 --- a/code/modules/atmospherics/machinery/components/unary/gas_heater.dm +++ b/code/modules/atmospherics/machinery/components/unary/gas_heater.dm @@ -37,8 +37,7 @@ if(node) update_icon() - -/obj/machinery/atmospherics/component/unary/heater/update_icon() +/obj/machinery/atmospherics/component/unary/heater/update_icon_state() if(node) if(use_power && heating) icon_state = "heater_1" @@ -46,8 +45,7 @@ icon_state = "heater" else icon_state = "heater_0" - return - + return ..() /obj/machinery/atmospherics/component/unary/heater/process(delta_time) ..() diff --git a/code/modules/atmospherics/machinery/components/unary/generator_input.dm b/code/modules/atmospherics/machinery/components/unary/generator_input.dm index f5b184e99dfe..d4fa86c80595 100644 --- a/code/modules/atmospherics/machinery/components/unary/generator_input.dm +++ b/code/modules/atmospherics/machinery/components/unary/generator_input.dm @@ -8,12 +8,12 @@ var/update_cycle -/obj/machinery/atmospherics/component/unary/generator_input/update_icon() +/obj/machinery/atmospherics/component/unary/generator_input/update_icon_state() if(node) icon_state = "intact" else icon_state = "exposed" - return + return ..() /obj/machinery/atmospherics/component/unary/generator_input/proc/return_exchange_air() return air_contents diff --git a/code/modules/atmospherics/machinery/components/unary/heat_exchanger.dm b/code/modules/atmospherics/machinery/components/unary/heat_exchanger.dm index 53a7aaf9d022..9a3279f6c2f1 100644 --- a/code/modules/atmospherics/machinery/components/unary/heat_exchanger.dm +++ b/code/modules/atmospherics/machinery/components/unary/heat_exchanger.dm @@ -16,11 +16,12 @@ /// * values above 1 currently do nothing var/thermal_conduction_power = 1 -/obj/machinery/atmospherics/component/unary/heat_exchanger/update_icon() +/obj/machinery/atmospherics/component/unary/heat_exchanger/update_icon_state() if(node) icon_state = "intact" else icon_state = "exposed" + return ..() /obj/machinery/atmospherics/component/unary/heat_exchanger/process() ..() diff --git a/code/modules/atmospherics/machinery/components/unary/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary/outlet_injector.dm index ca0498f07b66..77510a782b3f 100644 --- a/code/modules/atmospherics/machinery/components/unary/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary/outlet_injector.dm @@ -31,11 +31,12 @@ unregister_radio(src, frequency) . = ..() -/obj/machinery/atmospherics/component/unary/outlet_injector/update_icon() +/obj/machinery/atmospherics/component/unary/outlet_injector/update_icon_state() if(!powered()) icon_state = "off" else icon_state = "[use_power ? "on" : "off"]" + return ..() /obj/machinery/atmospherics/component/unary/outlet_injector/update_underlays() if(..()) diff --git a/code/modules/atmospherics/machinery/components/unary/oxygen_generator.dm b/code/modules/atmospherics/machinery/components/unary/oxygen_generator.dm index d47883ae893d..fc787125d6e2 100644 --- a/code/modules/atmospherics/machinery/components/unary/oxygen_generator.dm +++ b/code/modules/atmospherics/machinery/components/unary/oxygen_generator.dm @@ -12,6 +12,7 @@ var/oxygen_content = 10 /obj/machinery/atmospherics/component/unary/oxygen_generator/update_icon() + . = ..() if(node) icon_state = "intact_[on?("on"):("off")]" else diff --git a/code/modules/atmospherics/machinery/components/unary/portables_connector.dm b/code/modules/atmospherics/machinery/components/unary/portables_connector.dm index 525aeffd03eb..6115334e3a77 100644 --- a/code/modules/atmospherics/machinery/components/unary/portables_connector.dm +++ b/code/modules/atmospherics/machinery/components/unary/portables_connector.dm @@ -38,8 +38,9 @@ /obj/machinery/atmospherics/portables_connector/init_dir() initialize_directions = dir -/obj/machinery/atmospherics/portables_connector/update_icon() +/obj/machinery/atmospherics/portables_connector/update_icon_state() icon_state = "connector" + return ..() /obj/machinery/atmospherics/portables_connector/update_underlays() if(..()) diff --git a/code/modules/atmospherics/machinery/components/unary/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary/vent_pump.dm index 2acade7a05d3..51a6c780bd8c 100644 --- a/code/modules/atmospherics/machinery/components/unary/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary/vent_pump.dm @@ -88,11 +88,13 @@ //QDEL_NULL(soundloop) return ..() -/obj/machinery/atmospherics/component/unary/vent_pump/update_icon(safety = 0) +/obj/machinery/atmospherics/component/unary/vent_pump/update_icon() + cut_overlays() + . = ..() + if(!check_icon_cache()) return - cut_overlays() var/vent_icon = "vent" diff --git a/code/modules/atmospherics/machinery/components/unary/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary/vent_scrubber.dm index 2aa0c4a19f58..e0018fac2e08 100644 --- a/code/modules/atmospherics/machinery/components/unary/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary/vent_scrubber.dm @@ -104,12 +104,12 @@ else if(isnum(key)) scrub_groups |= key -/obj/machinery/atmospherics/component/unary/vent_scrubber/update_icon(safety = 0) +/obj/machinery/atmospherics/component/unary/vent_scrubber/update_icon() + cut_overlays() + . = ..() if(!check_icon_cache()) return - cut_overlays() - var/scrubber_icon = "scrubber" var/turf/T = get_turf(src) @@ -428,12 +428,12 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/retro/on/welded welded = 1 -/obj/machinery/atmospherics/component/unary/vent_scrubber/retro/update_icon(safety = 0) +/obj/machinery/atmospherics/component/unary/vent_scrubber/retro/update_icon() + cut_overlays() + . = ..() if(!check_icon_cache()) return - cut_overlays() - var/scrubber_icon = "scrubber" var/turf/T = get_turf(src) diff --git a/code/modules/atmospherics/machinery/pipes/cap.dm b/code/modules/atmospherics/machinery/pipes/cap.dm index 4bb605aa5eef..5c7b5b1cc8cf 100644 --- a/code/modules/atmospherics/machinery/pipes/cap.dm +++ b/code/modules/atmospherics/machinery/pipes/cap.dm @@ -45,7 +45,8 @@ if(node) node.update_underlays() -/obj/machinery/atmospherics/pipe/cap/update_icon(safety = 0) +/obj/machinery/atmospherics/pipe/cap/update_icon() + . = ..() if(!check_icon_cache()) return diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm index 81514c4bc765..f6999981c210 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold.dm @@ -79,7 +79,8 @@ if(node3) node3.update_underlays() -/obj/machinery/atmospherics/pipe/manifold/update_icon(safety = 0) +/obj/machinery/atmospherics/pipe/manifold/update_icon() + . = ..() if(!check_icon_cache()) return diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm index bf2b52ea8d87..bf4626778a04 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm @@ -79,7 +79,8 @@ if(node4) node4.update_underlays() -/obj/machinery/atmospherics/pipe/manifold4w/update_icon(safety = 0) +/obj/machinery/atmospherics/pipe/manifold4w/update_icon() + . = ..() if(!check_icon_cache()) return diff --git a/code/modules/atmospherics/machinery/pipes/simple.dm b/code/modules/atmospherics/machinery/pipes/simple.dm index 54e53ab5d648..f67ded35be67 100644 --- a/code/modules/atmospherics/machinery/pipes/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/simple.dm @@ -98,7 +98,8 @@ if(node2) node2.update_underlays() -/obj/machinery/atmospherics/pipe/simple/update_icon(safety = 0) +/obj/machinery/atmospherics/pipe/simple/update_icon() + . = ..() if(!check_icon_cache()) return diff --git a/code/modules/atmospherics/machinery/pipes/vent.dm b/code/modules/atmospherics/machinery/pipes/vent.dm index 3510ddfb3d45..72600a4656a3 100644 --- a/code/modules/atmospherics/machinery/pipes/vent.dm +++ b/code/modules/atmospherics/machinery/pipes/vent.dm @@ -40,6 +40,7 @@ return list(node1) /obj/machinery/atmospherics/pipe/vent/update_icon() + . = ..() if(node1) if(is_hidden_underfloor()) icon_state = "hintact" diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index be7402f1ffa5..1ad9bb188669 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -194,6 +194,7 @@ return 0 /obj/machinery/portable_atmospherics/canister/update_icon() + . = ..() /* update_flag 1 = holding diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index 1e314a16cb8f..5073a2db087c 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -26,6 +26,7 @@ /obj/machinery/portable_atmospherics/powered/pump/update_icon() cut_overlays() + . = ..() var/list/overlays_to_add = list() if(on && cell && cell.charge) @@ -39,7 +40,6 @@ if(connected_port) overlays_to_add += "siphon-connector" add_overlay(overlays_to_add) - return /obj/machinery/portable_atmospherics/powered/pump/emp_act(severity) if(machine_stat & (BROKEN|NOPOWER)) @@ -207,7 +207,7 @@ /obj/machinery/portable_atmospherics/powered/pump/huge/update_icon() cut_overlays() - + . = ..() if(on && !(machine_stat & (NOPOWER|BROKEN))) icon_state = "siphon:1" else diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 145bc59c2455..dd2f1c5f0243 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -139,6 +139,7 @@ /obj/machinery/portable_atmospherics/powered/scrubber/huge/update_icon() cut_overlays() + . = ..() if(on && !(machine_stat & (NOPOWER|BROKEN))) icon_state = "scrubber:1" diff --git a/code/modules/automata/__automata.dm b/code/modules/automata/automata.dm similarity index 100% rename from code/modules/automata/__automata.dm rename to code/modules/automata/automata.dm diff --git a/code/modules/automata/explosion.dm b/code/modules/automata/types/explosion.dm similarity index 100% rename from code/modules/automata/explosion.dm rename to code/modules/automata/types/explosion.dm diff --git a/code/modules/automata/sonar.dm b/code/modules/automata/types/sonar.dm similarity index 100% rename from code/modules/automata/sonar.dm rename to code/modules/automata/types/sonar.dm diff --git a/code/modules/automata/_wave.dm b/code/modules/automata/types/wave.dm similarity index 100% rename from code/modules/automata/_wave.dm rename to code/modules/automata/types/wave.dm diff --git a/code/modules/awaymissions/pamphlet.dm b/code/modules/awaymissions/pamphlet.dm index 3170b322f928..f623f704b219 100644 --- a/code/modules/awaymissions/pamphlet.dm +++ b/code/modules/awaymissions/pamphlet.dm @@ -33,10 +33,6 @@ Though complete safety is assured, participants are advised to prepare for inhospitable \ environs." -//we don't want the silly text overlay! -/obj/item/paper/pamphlet/update_icon() - return - /obj/item/paper/pamphlet/violent_video_games name = "pamphlet - \'Violent Video Games and You\'" desc = "A pamphlet encouraging the reader to maintain a balanced lifestyle and take care of their mental health, while still enjoying video games in a healthy way. You probably don't need this..." diff --git a/code/modules/blob2/blobs/base_blob.dm b/code/modules/blob2/blobs/base_blob.dm index 505d6c155dab..63164294cd35 100644 --- a/code/modules/blob2/blobs/base_blob.dm +++ b/code/modules/blob2/blobs/base_blob.dm @@ -37,6 +37,7 @@ var/list/blobs = list() return ..() /obj/structure/blob/update_icon() //Updates color based on overmind color if we have an overmind. + . = ..() if(overmind) name = "[overmind.blob_type.name] [base_name]" // This is in update_icon() because inert blobs can turn into other blobs with magic if another blob core claims it with pulsing. color = overmind.blob_type.color diff --git a/code/modules/blob2/blobs/core.dm b/code/modules/blob2/blobs/core.dm index 6a737206a128..8f799a5d1d8c 100644 --- a/code/modules/blob2/blobs/core.dm +++ b/code/modules/blob2/blobs/core.dm @@ -103,6 +103,7 @@ var/list/blob_cores = list() /obj/structure/blob/core/update_icon() cut_overlays() + . = ..() var/list/overlays_to_add = list() color = null var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") diff --git a/code/modules/blob2/blobs/node.dm b/code/modules/blob2/blobs/node.dm index 7f39e3ad3afb..b4d4d8d45d72 100644 --- a/code/modules/blob2/blobs/node.dm +++ b/code/modules/blob2/blobs/node.dm @@ -22,6 +22,7 @@ var/list/blob_nodes = list() /obj/structure/blob/node/update_icon() cut_overlays() + . = ..() var/list/overlays_to_add = list() color = null var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index b44e788cc9d6..a3e5d4d52762 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -585,11 +585,12 @@ BLIND // can't see anything update_worn_icon() update_action_buttons() -/obj/item/clothing/glasses/sunglasses/sechud/aviator/update_icon() +/obj/item/clothing/glasses/sunglasses/sechud/aviator/update_icon_state() if(on) icon_state = initial(icon_state) else icon_state = inactive_icon_state + return ..() /obj/item/clothing/glasses/sunglasses/sechud/aviator/prescription name = "prescription security HUD aviators" diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index 6dc35ae2522f..8f34928e92f9 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -371,7 +371,10 @@ BLOCK_BYOND_BUG_2072419 var/should_do_wedge = light_angle && !facing_opaque - FOR_DVIEW(T, CEILING(actual_range, 1), source_turf, 0) + // citadel edit: subtract one; light range is tile from center of central point, + // byond range is tiles radius **from** center, + // so 1 light range is effectively 0.5 byond range (and since we round up.. yeah) + FOR_DVIEW(T, CEILING(actual_range, 1) - 1, source_turf, 0) check_t: if (should_do_wedge) // Directional lighting coordinate filter. diff --git a/code/modules/maps/turf_makers/planet_station_turfs/_lythios43c.dm b/code/modules/maps/turf_makers/planet_station_turfs/_lythios43c.dm index f1771bd61ffc..a2e57de60988 100644 --- a/code/modules/maps/turf_makers/planet_station_turfs/_lythios43c.dm +++ b/code/modules/maps/turf_makers/planet_station_turfs/_lythios43c.dm @@ -70,6 +70,7 @@ LYTHIOS43C_TURF_CREATE_UN(/turf/simulated/mineral/icerock/floor/ignore_cavegen) blocks_air = FALSE can_build_into_floor = TRUE smoothing_groups = (SMOOTH_GROUP_FLOOR_SNOW) + canSmoothWith = null icon = 'icons/turf/flooring/asteroid.dmi' icon_state = "asteroid" color = LIGHT_COLOR_BLUE @@ -77,6 +78,7 @@ LYTHIOS43C_TURF_CREATE_UN(/turf/simulated/mineral/icerock/floor/ignore_cavegen) SETUP_SMOOTHING() QUEUE_SMOOTH(src) QUEUE_SMOOTH_NEIGHBORS(src) + update_icon() if(SSair.initialized) queue_zone_update() diff --git a/code/modules/mining/excavation/mineral_effect.dm b/code/modules/mining/excavation/mineral_effect.dm deleted file mode 100644 index a39be6d0c3f5..000000000000 --- a/code/modules/mining/excavation/mineral_effect.dm +++ /dev/null @@ -1,31 +0,0 @@ -/obj/effect/mineral - name = "mineral vein" - icon = 'icons/obj/mining.dmi' - desc = "Shiny." - mouse_opacity = 0 - density = 0 - anchored = 1 - var/ore_key - var/image/scanner_image - -// taemp check -/obj/effect/mineral/New(loc, datum/ore/O) - . = ..() - ASSERT(O) - -/obj/effect/mineral/Initialize(mapload, datum/ore/M) - . = ..() - name = "[M.display_name] deposit" - ore_key = M.name - icon_state = "rock_[ore_key]" - var/turf/T = get_turf(src) - layer = T.layer+0.1 - -/obj/effect/mineral/proc/get_scan_overlay() - if(!scanner_image) - var/datum/ore/O = GLOB.ore_data[ore_key] - if(O) - scanner_image = image(icon, loc = get_turf(src), icon_state = (O.scan_icon ? O.scan_icon : icon_state)) - else - to_chat(world, "No ore data for [src]!") - return scanner_image diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index f0f201ae1238..b08fd6779c1e 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -12,8 +12,8 @@ CREATE_STANDARD_TURFS(/turf/simulated/mineral) color = COLOR_ASTEROID_ROCK smoothing_flags = SMOOTH_BITMASK - smoothing_groups = (SMOOTH_GROUP_WALLS+SMOOTH_GROUP_MINERAL_WALLS) - canSmoothWith = (SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS+SMOOTH_GROUP_MINERAL_WALLS) + smoothing_groups = (SMOOTH_GROUP_WALLS + SMOOTH_GROUP_MINERAL_WALLS) + canSmoothWith = (SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS + SMOOTH_GROUP_MINERAL_WALLS) var/sand_icon = 'icons/turf/flooring/asteroid.dmi' var/rock_side_icon_state = "rock_side" @@ -137,6 +137,7 @@ CREATE_STANDARD_TURFS(/turf/simulated/mineral/icerock/floor/ignore_cavegen) /turf/simulated/mineral/floor/icerock/airmix initial_gas_mix = GAS_STRING_STP +// todo: don't make this the same /turf path, it doesn't make semantic sense /turf/simulated/mineral/proc/make_floor() if(!density && !opacity) return @@ -149,9 +150,17 @@ CREATE_STANDARD_TURFS(/turf/simulated/mineral/icerock/floor/ignore_cavegen) can_build_into_floor = TRUE //SSplanets.addTurf(src) // Thank you Silicons, this was causing underground areas to have weather effects in them - Bloop queue_zone_update() - QUEUE_SMOOTH(src) - QUEUE_SMOOTH_NEIGHBORS(src) - + smoothing_groups = null + canSmoothWith = null + if(atom_flags & ATOM_INITIALIZED) + SETUP_SMOOTHING() + QUEUE_SMOOTH(src) + QUEUE_SMOOTH_NEIGHBORS(src) + update_icon() + if(SSair.initialized) + queue_zone_update() + +// todo: don't make this the same /turf path, it doesn't make semantic sense /turf/simulated/mineral/proc/make_wall() if(density && opacity) return @@ -164,8 +173,13 @@ CREATE_STANDARD_TURFS(/turf/simulated/mineral/icerock/floor/ignore_cavegen) can_build_into_floor = FALSE //SSplanets.removeTurf(src) // Thank you Silicons, this was causing underground areas to have weather effects in them as well -Bloop queue_zone_update() - QUEUE_SMOOTH(src) - QUEUE_SMOOTH_NEIGHBORS(src) + smoothing_groups = (SMOOTH_GROUP_WALLS + SMOOTH_GROUP_MINERAL_WALLS) + canSmoothWith = (SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS + SMOOTH_GROUP_MINERAL_WALLS) + if(atom_flags & ATOM_INITIALIZED) + SETUP_SMOOTHING() + QUEUE_SMOOTH(src) + QUEUE_SMOOTH_NEIGHBORS(src) + update_icon() /turf/simulated/mineral/Entered(atom/movable/M as mob|obj) ..() @@ -181,10 +195,9 @@ CREATE_STANDARD_TURFS(/turf/simulated/mineral/icerock/floor/ignore_cavegen) if(prob(20)) overlay_detail = "asteroid[rand(0,9)]" if(mineral) + update_icon() if(density) MineralSpread() - else - UpdateMineral() // this'll work because we're initialized /* custom smoothing code */ /turf/simulated/mineral/find_type_in_direction(direction) @@ -193,9 +206,11 @@ CREATE_STANDARD_TURFS(/turf/simulated/mineral/icerock/floor/ignore_cavegen) return NULLTURF_BORDER return T.density? ADJ_FOUND : NO_ADJ_FOUND -/turf/simulated/mineral/update_appearance(updates) +/turf/simulated/mineral/update_icon() + cut_overlays() . = ..() + var/list/to_add = list() //We are a wall (why does this system work like this??) // todo: refactor this shitheap because this is pants on fucking head awful if(density) @@ -207,51 +222,28 @@ CREATE_STANDARD_TURFS(/turf/simulated/mineral/icerock/floor/ignore_cavegen) icon = 'icons/turf/walls/natural.dmi' // icon_state = rock_icon_state + if(archaeo_overlay) + to_add += mutable_appearance(arch_icon, archaeo_overlay) + if(excav_overlay) + to_add += mutable_appearance(arch_icon, excav_overlay) + if(mineral) + var/image/mineral_overlay = image('icons/modules/mining/ore_overlay.dmi', "rock_[mineral.name]") + mineral_overlay.appearance_flags = KEEP_APART | RESET_COLOR + to_add += mineral_overlay + //We are a sand floor else name = "sand" icon = sand_icon // So that way we can source from other files. icon_state = sand_icon_state -/turf/simulated/mineral/update_overlays() - . = ..() - - //We are a wall (why does this system work like this??) - // todo: refactor this shitheap because this is pants on fucking head awful - - if(density) - /* - // TODO: Replace these layers with defines. (I have some being added in another PR) @Zandario - var/mutable_appearance/appearance - if(!(smoothing_junction & NORTH_JUNCTION)) - appearance = mutable_appearance(icon, "[rock_side_icon_state]_s", layer = EDGE_LAYER) - appearance.pixel_y = 32 - . += appearance - if(!(smoothing_junction & SOUTH_JUNCTION)) - appearance = mutable_appearance(icon, "[rock_side_icon_state]_n", layer = EDGE_LAYER) - appearance.pixel_y = -32 - . += appearance - if(!(smoothing_junction & WEST_JUNCTION)) - appearance = mutable_appearance(icon, "[rock_side_icon_state]_e", layer = EDGE_LAYER) - appearance.pixel_x = -32 - . += appearance - if(!(smoothing_junction & EAST_JUNCTION)) - appearance = mutable_appearance(icon, "[rock_side_icon_state]_w", layer = EDGE_LAYER) - appearance.pixel_x = 32 - . += appearance - */ - if(archaeo_overlay) - . += mutable_appearance(arch_icon, archaeo_overlay) - if(excav_overlay) - . += mutable_appearance(arch_icon, excav_overlay) - - //We are a sand floor - else if(sand_dug) - . += mutable_appearance(icon, "dug_overlay") + to_add += mutable_appearance(icon, "dug_overlay") if(overlay_detail) - . += mutable_appearance('icons/turf/flooring/decals.dmi', overlay_detail) + to_add += mutable_appearance('icons/turf/flooring/decals.dmi', overlay_detail) + if(length(to_add)) + add_overlay(to_add) /turf/simulated/mineral/legacy_ex_act(severity) @@ -317,22 +309,15 @@ CREATE_STANDARD_TURFS(/turf/simulated/mineral/icerock/floor/ignore_cavegen) M.selected.action(src) /turf/simulated/mineral/proc/MineralSpread() - UpdateMineral() if(mineral && mineral.spread) for(var/trydir in GLOB.cardinal) if(prob(mineral.spread_chance)) var/turf/simulated/mineral/target_turf = get_step(src, trydir) if(istype(target_turf) && target_turf.density && !target_turf.mineral) target_turf.mineral = mineral + target_turf.update_icon() target_turf.MineralSpread() -/turf/simulated/mineral/proc/UpdateMineral(update_neighbors) - if(!(atom_flags & ATOM_INITIALIZED)) - return // /Initialize() will handle us - clear_ore_effects() - if(mineral && density) - new /obj/effect/mineral(src, mineral) - //Not even going to touch this pile of spaghetti /turf/simulated/mineral/attackby(obj/item/W as obj, mob/user as mob) @@ -600,15 +585,10 @@ CREATE_STANDARD_TURFS(/turf/simulated/mineral/icerock/floor/ignore_cavegen) if(updateIcon) update_appearance() -/turf/simulated/mineral/proc/clear_ore_effects() - for(var/obj/effect/mineral/M in contents) - qdel(M) - -/turf/simulated/mineral/proc/DropMineral(var/amount) +/turf/simulated/mineral/proc/DropMineral(amount) if(!mineral) return - clear_ore_effects() - var/obj/item/stack/ore/O = new mineral.ore(src,amount) + var/obj/item/stack/ore/O = new mineral.ore(src, amount) return O /turf/simulated/mineral/proc/excavate_turf() @@ -629,7 +609,6 @@ CREATE_STANDARD_TURFS(/turf/simulated/mineral/icerock/floor/ignore_cavegen) GetDrilled(0) else GetDrilled(1) - return /turf/simulated/mineral/proc/GetDrilled(var/artifact_fail = 0) @@ -643,6 +622,7 @@ CREATE_STANDARD_TURFS(/turf/simulated/mineral/icerock/floor/ignore_cavegen) if (mineral && mineral.result_amount) //if the turf has already been excavated, some of it's ore has been removed DropMineral(mineral.result_amount - mined_ore) + mineral = null //destroyed artifacts have weird, unpleasant effects //make sure to destroy them before changing the turf though @@ -741,4 +721,4 @@ CREATE_STANDARD_TURFS(/turf/simulated/mineral/icerock/floor/ignore_cavegen) if(mineral_name && (mineral_name in GLOB.ore_data)) mineral = GLOB.ore_data[mineral_name] if(atom_flags & ATOM_INITIALIZED) - UpdateMineral() + update_icon() diff --git a/code/modules/paperwork/paper/paper.dm b/code/modules/paperwork/paper/paper.dm index f4ea2a42f554..be64ad1bb817 100644 --- a/code/modules/paperwork/paper/paper.dm +++ b/code/modules/paperwork/paper/paper.dm @@ -74,12 +74,11 @@ updateinfolinks() /obj/item/paper/update_icon() - if(icon_state == "paper_talisman") - return + cut_overlays() + . = ..() if(info) - icon_state = "paper_words" - return - icon_state = "paper" + // todo: be like, `-content` or something not `_words` + add_overlay("[icon_state]_words") /obj/item/paper/proc/update_space(var/new_text) if(!new_text) diff --git a/code/modules/rogueminer_vr/zonemaster.dm b/code/modules/rogueminer_vr/zonemaster.dm index aa9d20d5cc82..298646947306 100644 --- a/code/modules/rogueminer_vr/zonemaster.dm +++ b/code/modules/rogueminer_vr/zonemaster.dm @@ -336,13 +336,13 @@ // Ore-bearing rocks that were mined for(var/turf/T in mineral_rocks) - var/has_minerals = 0 - for(var/atom/I in T.contents) - if(istype(I,/obj/effect/mineral)) - has_minerals++ - break - if(has_minerals == 0) - tally += RM_DIFF_VALUE_ORE + if(!istype(T, /turf/simulated/mineral)) + continue + var/turf/simulated/mineral/mine_turf = T + if(mine_turf.mineral) + continue + // no mineral.. + tally += RM_DIFF_VALUE_ORE mineral_rocks.Cut() // For good measure, to prevent rescoring. diff --git a/icons/README.md b/icons/README.md index f12e24330b6c..2753c29eb752 100644 --- a/icons/README.md +++ b/icons/README.md @@ -22,6 +22,7 @@ Yes, this currently includes all turfs, mobs, objs, and misc things. Sorry. We'l - /gearsets - bundled sets, like voidsuits, cryosuits, etc - /effects - generic visual effects that are not screen/rendering: e.g. attack, emp, bomb, etc. - /items - general, non-module, non-clothing items placed in here + - /items/stacks - general `/obj/item/stack` types placed in here. - /interface - used for stuff going into spritesheets for tgui, etc. if it's a HUD object, it should go in /screen instead. - /machinery - used for sprites for general, non-module machines. use subdirectories if more than one .dmi is needed, or for closely related machinery. - /mapping - used for sprites for in-map-editor objects that are invisible in game world @@ -34,15 +35,13 @@ Yes, this currently includes all turfs, mobs, objs, and misc things. Sorry. We'l used in the abstraction of limb sprite from limb definition. - /sprite_accessories - unconverted sprite accessories - /sprite_accessory - modern sprite accessory system - - /modules - used for specific departments / content packs / logical bundles - - /{modulename} - the examples before are just that, examples. some modules will require different styles of icon organization. + - /{modulename} - the examples below are just that, examples. some modules will require different styles of icon organization. - /items - items - /clothing - clothing - /machinery - machinery - /structures - structures - /objects - miscellaneous objects that are not items, machinery, or structures - - /overmaps - **All** overmap sprites, whether or not it's screen rendering, goes in here - /runtime - follow similar structure inside this, treat it as a sub-copy. icons in this are copied over for use during runtime - currently being deprecated; we have chosen to instead copy over all icons/sounds, so the runtime server can access them. diff --git a/icons/items/stacks/medical.dmi b/icons/items/stacks/medical.dmi new file mode 100644 index 0000000000000000000000000000000000000000..be8ef7c1f9e45c9f93a3a3930a4aef2d80b0e6f2 GIT binary patch literal 6170 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 literal 0 HcmV?d00001 diff --git a/icons/modules/mining/ore_overlay.dmi b/icons/modules/mining/ore_overlay.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0ed15d3898024b8da84066eacf8f0ebc5b96330d GIT binary patch literal 9502 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 literal 0 HcmV?d00001 diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index 49db5abafc5b87c9bc61273f37d94754b399f90d..6b24c51d56a09e1c6d057f8b257cfb54ffe92f45 100644 GIT binary patch literal 92043 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%0DKwfderxolu(z{E`?cU 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 OyMEQ=$~!#=-2VXT`J?Ut literal 107983 zcmYIvWl&pPw045K7cW){l;Tp{y-0!L?(P(KFK)%%c|-By?ohme;#S9s_3mLHwCrjUorkon8 z=KZxw{yXA;Z6hL0I5jv^h1Sdl=1hMa5bYRCzgi-cirwCDrsO2Prt1?l=Nvn1$Hn&u z2vsi(BV*V+e)ukpnRCLRzc=omCHE`BRY3@2TLYC6t5iyrv?AX(2SxFO#gRu!9yPR2 z8Y4(W>St^4i5jZZnLql?{nHttde1owHm6&VLXfMOh4JyjZ%BINRqbGo_ur#3XT;B8 zhnTW)cEQ~|0q@O@mB%#DU+IUdTY=rs+2rGGLNNQ}{HMRNH3qCi|M2APOqr*`-TR2+atlED+$$@ zXth@}J){!z^s++%Nngm#G!V1Y)fkm}dqiBk(;{BQr7j-Z4{p9jG90JVni-c2!It#& zLFq_3QsQ%6zo$VvO4nEDdmkNP>xg{QEUofXk32*Uy>;w6=CSefZ%}=ARBjhIH~srT z(0Kp2GTQ6``4C%AaoSi_m9zLM^m*#(`Ww$<*3K=}+gZL9XjH1x;83~(A7q#~w3LnG zP*%$&>r3i^c~wAZ5Xxfwo`naW5lPB zCg>y25AP@vqC31FJ00jMgZxeYzT+i?PHyqlPb}0&l6)!656N>q3|uC+7A(o3UnE=W z9k-yd=0)C6Th#lqsm`$#z5_#|#ye%4zA&z$ zzO?gZ&d(H0t{2ID@L(r98-0nUCrn?G@>YJ)SpO_zR-6W7D9vI{LMHPlx>5A&Z`R+i zEt#zusuQWndP(M0K1vsqJS@ozvVG~!IEj!u>%ToTyb{+6Zkf2QUU5#YQDU;sZuiate50mW9`j;2<{Klf0S5s~WnabybH57vO$}T?@KA%{QH^cezn4B{bMJra#R8I;0Mc#XJ91_*yb(;!x*s;kZIi zEi@J%U_3h6#oquzXEmkALV0)DQSZXg+^2>`%3(#pTB7S)ebXrhnL0c=J351`L#)et zaI&=K|GN^h&oh3}Ivb28JRtVJsWN_Rv`|aRgSc?>=bP%ydWG1FEt^XOt?6VoFa7TG znU^7a=V%@j>>QuiXwN;hAp%m#<)2LvjZ_XQDxnze(WB53awI*k4oNSe*z3w!u1~@r zhUqt2VLvR)_kP}n?FF3LZNfYEjki4{cVn&F$qUR!KP|YtA9gbWT6Q0fe|vLTfL!Ls{z!L>x799mEMN^E zli0rRFYlR|#oq2&eptbFJS=KFnDnu(|7|L}TGN;GGYir5WGg%-r70Y( z)M=vxZ64rmeAk5)s1)3_GH)(f7g)lXts}FCt`@3kt1WEoXyb;Aak~a;-4BKzT5RvE zdY}jC_~)naDf3gi-nZVDluu1nB5cigSB~o)31ByF)}YIRjl_)Uof&FE&Q$J?Fa)MH z&!t~F3QMnR8jJ<+B^A2j3$q6+J|9F5oy(qI9J91L!nAAIUPRXQaaiSAxVk^QtcQCM ze2QOjKUufmwGTNPYh#W_N9-mmL_J^CaXZ*}EGsccdJ1$IDvbW*zoY(qF@$-4$ZpM< z^?R`kmie`)G%hPQq^J}NbaI#T*+*-5l18n(vU9yH(nT^=(G zUnsUQuWy5Nn1XOyqq;sn1$8Sov7;RH3Gt;kp2s18);n0xL9N?U@!?zoxa)1nt4~{R zLBT;e@{QKyrlG5aDX)K`wUN=?orhYPa#eGp{P+6e{f%wLmr4rao*b?Jo8QPtUu)f^ z>(iqhZnO+;e8~!_F<;j@3>WpRYxrLEF5iKBF9#zISN*Y`5y!=<8R>|jEF{iqW!p3{;k`r+|?$sZ|ThDw(zO_-e zv?mY7`m(XjeF4?bUtb>*Dt_LQta+W;=UD~%K8YF3a8i50_Pc+3F0*A{fqC1)dSJ&r z3}Sv;`=FX$ZurOA+wI4oA8^sDs1~7L3GWwqA4x#@4+AS>LN)$Ef#-LDwX{}!)wgc& zoaM)v4UKsjP4gctX*5j;fn@o5Mkdvu7X%mf{yH47!g~UPuH_Z0qNv}+`g_!s&lq27 z5qr)@dF=(AKkW}2xU675RZ(a5JO$O%hzagpdoj-7%v&#R8>fMNFQ(#moSk$qwtt#E z!C?PsU(`1_S3Nq{+7~}NFG33i9hlx_$a~loi7{{ue-&L}^Uzs5xc=k3u!S1l1MZi7 z!`{nb6ew<~gvaj6ueowB13B5S5BSKdXIQg>PrQx!!wVjTefOASZ$Dif>A<&K_QZTPP7>R-1e-lEO7jw(xOuRP`kVm~9CdGGM<8++0WxSg}} zrAh^TewU=LDGO{r;p4pHgPlL9%kKB!A?%rI_5vqIZPF{_1iNoJhZKfVH>K#+%p@NW zslvfHv6slpE${&DlIOq|V z*1_m$GmL4yyp^5uz^}I^*`uL=V(LQ46TA zjbfT+F~UXz6YZUBC9A`_U+s2wi+9b`G$mas6cj__*k{&X3M5;fzEhW>b}smq+IX~C z%|^ePahkVox;&f{DlEspcCVP;?kxM$S%v_LEHRnD1^GWTD_(TK8%axD+ENDUPFaTY z{ie9(O&#e8(Er6W7VoX$yXxM5FL=O>+4M%i{b<=MIM~GFhaj36p9$sG$Luwfy2-+g zn}U_3X6kvky@x<8{C9fS;Id|oTDS=OG}3r`Su5j8G7-N|9t@cn!u35N*FAJ~hob~L&H z@;8H=?(mV4_s0F7U~)*Dpq2m&M*Q-}W#}Lrw%2v6XAhzsmw2oX@`5omYG0*bgtw=Yw6V53 z!M?`GpkwIAcasdmiT6$8e&U*%6B9&PlLurU$JL(!SUUgoS zai)@L3#S;-+6Q>`Uo_n=Uym_GkEZ<%*AYZJkMZ$lv`;A3k8DK9cA2bKsRDX&3;vB3( z<=9{xzrUnjrj2fYfMl0#~Mmvs>K$E=ZtV0%5iKAkw6Ap7f#(V?zz$DGyI5 zRx5fF!`4Qf+G0)Ry+qKb{Mhtwj>IIma-4blGh#D|(f=W&W6LHnBI}qTy&#(OL`8YC zP{f&hI4vFgy0Z3%r7PUWj)Y)Z`_5w2U_P7w&05|4+K;`ft%dl5<_G6AxzT&?!tMRjNab`@zJo@LhrrnUW`>3<1$tA5)jtTyu=Mr4zAd{V#bY{E`YJK`OWtS z_31wEqB{CzyD7{BJ@hT5G!%?fweJ5_JW4icHJcg4KG%&Y=;Vrzwp}st;h>dJFTRI; z78B>9>MN2<+?)^#qK3P{5T>55?k@F>J1Cw+y{H4dZ-tTiJOe)2ki#s_&q1MI|5N(i zxUN?@d|&q@N?Kqy%`=V`(R455b06Vz;n9KC4I~5cp{kiKoa}&4o_5$8sp1|n__yw$ z$jN(z(-rvHCGPQdMb4d{h~U4RpfYdG>U-*sI`<0d!oDK>>%7NNcdX|f)75r`gX%>2 zRp!rw(R?2;{K2cmj9=oSq5#I<3?G9Jz>N5>7@T0+8-ulL_xLAWchE(@^NLG3<7cTI z4ML7ExzL)C=P!sKafMXks;yalMzZ4%uNMv zdrM(-r>|Q>-tLG!vp+Bj=P9^@V|~1;p4XGBX4~K3YyY^B3->^9nrAFqin-Gjx@#_Q z<0UI}ezrmJ>IfxA=;d?L)#&nH>T+IfK-;)i+lDGBVZR{0c%M~NxZduI4Jxufqq;f2 z5W(I4Ds=ik8ejfw+!*0zgyF+s>?4=&U!eE9pYjL)T_Bu>JLkeKxkn)=kEqW=Igh4+ z!{{8au_O3=*=+FjC}y6)v$!9Q7)@tb?Rrq2@4F8%b^Fwn!btXMH?dAJZP02Z)rWJH zLc^z?(kVQ#!2URyxl@8aIAu3sz~B@`U!u&Bo9E*MaWDD_^qsIk3;!l9gGTo#4j`%EGS?QgXsp8Z zgp;mOK|EdG6cqNc=}YLIp2ppMh;OoBu-!J{@&s~RFNzLL4{&$TWQ=M1X?s0$zE}0CM8W#kSfW8dIJlx-ihM#ASNC3od-n7Pbz9@gRrs>yWYY9hy7Mg2 zk67Qhq|Y`WP7(xd*_Nv}zO?RtkQP*M>#SBcI#_9z{RN))Fxov}etjG(iB9JJApqpX zT*D)Tq(P>g#LZ_hR=!G?eq$_o#~xfP7-v+{gSyQXc=HPevFtp$kt|m>ep8JWdT>jJ z@KMC2U+`J)5NAos@!tS{zOkS!@t+F$cwSW(N_%@7#P4#>+fKY^7Ch}Fq0K4Iu7Z9) zUNNKdEx?lOkYif)B98dBq8-uA4m zn;BU`=Jm0&2pRc*qE+van}^p3`h?oQy^_NJ{pb93;97`NR!|3aS@FfXpbc)n)xTvp z{}7H(2r;-3pq}x-N}||p7IQ+hzB@1IN*-1uT!L7VBU^@ZF*;Zc<4QrgHS?#Ec4Vo<*|Q_8tWP8Z@&y z+VQz>ljPxi{jjk{yHDPq33r>|OH6W-BYh}f@_p)gn)&aoYQvsEkL^@rTjxec3Rs;8 zSuuSPU3)rTB$i^mk;vK#0~DO;z$Z{acH$+FqK3~d>XARsNj*EpyCC%3j=RP&aW(nI zg3Y8`CiJYx^@|zYgA3i0^gs~h;AE-s)dCfKHVeg$K=?SD9qs7?JqIQ!=lo2<&~Dl7 zckB!+Ap|CY;`L`Rx^86?)Bg8&S{~;_eWE7?Ing`T1(w-oF29*}aeY&$vHbmUk58t& zFm5X1S7ev)sG&>HJ6_!qi5y|n%o2Da4K12{4{yk)HIJOyHl2g(4&?tdV!j*qP?g*M ziDu02%@^_WZxT!Un0#E@Lv`s*8HG!I`(n^CdroUms{YRHxVnWdb!>B{NGfD6=;`(} zi5?w(feYub-tU-&Y}x3_(Q2`Emn07DS&h7@)N9?Vv(@A9WcNcoC49ofT=D ziT8C9izDa7Zi`u9KmVA0i-m=neE2Zvae?YZ08IifNr?ebEJL2&B)bo~@rB}rs=x2Q zE_?KEH<|hQ!@a%Ym)X=z$M~^Bg|_5=XNX=RycL-=%R%}3$&*&G3(w;9S;UfPel@eO z7C-o;4+@h5N+~0TlgK*kR?+pPo%ib~9e-*tH+nCju>FH^&B9;gi_N|eR3!A_h(n-% zq(=lQQc@Gh2@Si6GSozu*pKZ1li%S{Bs}V~-$III07yeT-Ev}Lk?W_t5bs<_?AH4AR%L@cgz3nGW*ABD)`ApMOOIeVpRw>}4BK3N1zeZIvM_y~ zpAv&m3|YnbKwiuytH3J4=h=Rz|0A)UMx2X}Zlt5MD@#O86m`rJq|YutH?>o+Syn@qRh ziL2YdfS1saw!!DX&6)~+eS|OqhJ6xiOcnG;s^S1f(2rlo7>iWklf)=lQ3M=n(TPC) z^vO(_5`45!kl{jBY1F>JfuO11&B1I*&3>h!_}e`q#5rXJT0eB!l_+f^Uv%U9{&zNZ zU^;wS0x(kW&^+|;my8N10nr*9p80i^gM91I*YRH2S>otERo|DG3I!bIPH;*PxV z$=TugQ;0v+8|p_vhAZKuiV5O~=s$jmjn40S7ZcAx7G!UCq2i_W^0`A|Jss?m9B)`kza(? z94nJuDW)J9F4Vhj%L=;@1tXkjB>2^YC`P^_jqE$iQz{#sfoNv>Z)1b{ZmGSgTu#N7 zy(B-*o4O}}5k6*Nmq#3_hR;1vkwPe3meRC0y~G|Am_m^TW=!2ES*Yf_3haW>DCzK# zpJ31Wz<$K5*NKas4HI9uDaWZ(nf+9ze*2yI*b%Hw75t}ja830$iI{)Yn)dPP^jsS? zae!r4wFDRQdDBXSaN0+FrsELdI{O7SopfYnD2)OEmH&lA++TD4raNybC9*Wi$Y_lR zekc<96#oK+u|f*DS+L5fp`vUFF;yUG>&;-*s3@r@n?H|C z_p{h=c)SirRLT!~^`k7|$ZNJ3oa6AC&DU8^Q?UUl&~c@CYnvL*uP#c;P1DlvqOQ2AkvS`-SMUGc4bA$)v#0#cX+8W6I3udjK4c$f+KjfrX> z07=s`oWkuNjfWoP@_%_AAm4Yg=rs!5CAnXI3Br+@m-vF%*}HO1$xoL5T9E zL-8pOj_(jXIc|$k>B$ktU69SMx(hu=d0cWxA7Y7?EdicImJ&+64pxLDxPgT`GQ7JJ zdmtECfeFm%DA!Lna2ONKIOWb`Yg@%US5(+n^|og{6dhPN<$CT77AbuexzVi}Pvh=g z(h+SRyXP>?M>riZ@Lt+f*JNXDWb)T``;(^QH%h<=>wP>MO1y;a zMMYK{nh$oJOG=c5p3tDbV~k-u_I;)!39m=@uQq+CI=s$@=jJpN$%cFnpW;v?oSk2j>0l;IFaT+z!)&&x{o^x4wqjnnX?J9UejP;ukSsz9sDX&@(2JB z4rF%_#>}^xl4fVQtmafxv?TuZtlp(++D_qzp03mIO$S9LHHcJ?=PSkUS~<}Ssf}VV zi*Y+vC=E^0TNG5KPTr7l_71Fb?|mVct%wERYyI#+YB*=nF>Gg{`?ni@j}T5G1ah*g z7;m#y?+xNe7Ns53YT8kIj$d{a?=Lt0_F>U@s+eiBnoQmFLIK-DbH3Li|E@D=mhK7j zE{)q~`f0#*#qeG!yUJG#>v67EFWs{9!+#m8?p5xxa&iFJtMfS4Vv14kN8>$`ku5O% zje5`?@mH1b8+yBUJ(i|s{rAKw!3+S)0=Y|4jp$^hrIz)G-Al|C?%cLZTnPc9f`%rm zz{Q%Q3q`SCHJDwMcX29D2soq(5IYXRNCrDE?!E5v?lzCJEVy*l6evprXo|99d*)7#5 zE^EMo>K;qS+=NXB!LGW=B{k8ar9-2Cu7#koVgh08Hf7s~>cJm8XQZn}v=`~H@Mtqouqvmoo$tRU= zxpGz>8I?^vr>?EeV53WoYS?lF87MC=4^6p4{u!QKKK9p9?Ntc?91e=2Ky%haC-pd1 zi@DSL`0=t;&BrOG$XQBMDT52~ej1M0WGEqy=;yvXsSwspZ^@f>rCT zVFrY&&{-v&|S;SwF1F$Q?#Dx6w`H%|UHXZ}%~LpugN05j`CMLdfufRFO zUIpbG+OKM@O3mhb-Uaffvj|CezTX*bLF)^q=K20POzL(;q^k$kVmxrz0WY>%tL=da z4i`M4Za5aXitG4-kzx^3ruTu|k03(wAwU^Qt3U@)h^_qbU-tbcO>Ci~FKPS#DXTZ_ z50n}+9VA%>MGiR0+N?A?$}^-ccKPwa7DPG1RtoD_s+?L8e_NMv6GPch~WaDi1CJ-B!E&yQy4v4V4;h6uQ@*F40B2}jP`YW@keGSS&Bl?5e!c;7F)t^ZZm#i+- z&!J4AVR=U(-)gNT7h}J_q7ui94iwo#1r>Y2WzY$c7Tw8i#-2}LJNp;fcaMpcn2S+o z*IzEAYvL`EaB{j?6mc5U?mCT+kI6uaQ@YqG^a4?xcM{YL0SbTec#jip#hScWm*%Ip zgc6Aim-w95PgXQLCO7BX%znX(Oj0#K*;L4pTT=*vaLS(8QQUoNDpfWG8qFhmQI03eMhq zoY#DRM?HO&fTV7{Fz776*qjqWI^wPHZTD|aHH(*KZ^9%X=Iw4zQ+dqm6C77Y><$|S z99qqgd=|_bKCX4eF3I|TwE#Up?mrnF#gY4jW`d7dOk=VX^NN&G&q7g>@&*?d;Ua$D z?16V*!o9M8CK1m`zMgEq8BHqV^&v z+|%rY!Ge7DXU&Y4v=QshX1zSaMY}a4%nh->dxnY>JbKb`yubs4%BDIs?@w2H;-pZi zhvpYLtBUq16y6se`;M&Hu?Nr;}S2|BAnETtcA3M<4zD zVXAE1%9B7T)LmC-3TslR2|$pMrQ$r6VaBQ+bHA(gla&}w(MF!`S~MRU9ala8N{Lhy zjzGTh$e7D&xTS8ZO|lq+eEM69Mi}X&o9a6}%|4(7>U@2spx@D#OShecg2^4G%4fz_#hCyGdNN4ohir zs?}+U-NML07U6Sgklq7x3A`U$=CS2PE9!vy-fkWSpC~G@4~98!z;+>bw`ULh>8$#Z zifp<=HC>NK_JH=#Yxo~rt#SR_|Ei~9qoUx+cCx`~hF=&!kpT%Ax=H-PJc>L4HM9KU zd8NkF!&UhtTFD{ryw~}#d|SP>2^a#@N(nNLu<&j|8{(^dauqV#kKHL3TtNMjAzT4B zWQca*%4I4*#DBUwAHjLh8L;JkE;K+sY*ygHLVSN_*273rqtfk#y_xbaUZF%!|1$QmE?B!dUKCLk_K)%7F-H zO%MaTi75FQ(~+%1IWKMrN`AaWio3E5?pXhpW3i9K>O zurt06B`R<4f+6eUN))xp-6}z0;`4TgpcK3j*PFz^&|z8|zA=qd4)2d;H)9Yv_Hllx z*%-Mz_b=I59vnpaef}8me6a!f@XZ4e z)*J6uWHI?Nbqhf60jZjrYh0@|uFYiJ%v*&5%)@d%wnXi<#%XI%&m@vT|l6ah zsNtb_>L}m!$&3($s@lFY9h{$!Kw{YtK7sPL3-yV6)utJHf1o{*VAB!DFGmrNfGKek zzRq05FQI;e!gHWGq%ZJt{_9Wftv6J~*Y;UdYE2o{zc=4!QuCqFYHrWZAxs8n zv30qjnyuEG%PCwaW^>0uN`i-lab9T1#LFDRN_=s?UwlU-WnN zMG6QROacFp=+4`!Y}}E&RmKjG;INQButCe7U@u+s2%(%vkpn}>w$BcRkCL)-{XQD1 z3$a8Hk0|>Ad?b?4<8b4wzPJ*>4x6E$kX@sotN6%AHC4>k$7TBq=x4d(bdQm( ztn6&F4C9aDtm^leTCrEmh)X#(opTT%k<7!}GNN_H-pcA;iuS12s4?=y{uELOGX-g0UrzOMiC#hvXML zq)TRhI$Y2HR&BZ|IgT^O{D!^GF>}5nVeanGSAIT)vJt=38&)WlUE551a#<@Mxoj$X z5k=ZkzL6_9B*dlNepdlylp|G1&!1@E8|f1E}3aa;1wPV0XeXd+IRFkEd%nv!-qhByKA#iCL7 z`sQXSfhaw~Uv!$@FiR;?0ZbiuZwfjc`)G_QJiYL(Q?1oK4suDaJXwki*hYTy8J1)zSvd`X^_Y?ig`(@o z>g)>RxmYoY>-j(;f>fJ{6|$qH&fsSy#u z)=jSmR4~#=HDURZbnf)^hcQT>V~Zwkd(9hy=sK)39xW_dq!fD2a?}IiZ7I`i1_JaT zr&6Z@8xU!Xo`Z0UohqPeH20X;u`p%pkzWszgF%v=9Pgtp(SRZT_L;FK`uIO(Dbt(Hhh# z9bv|aHjTf_c;7a86r+(IU3`je?eGtB%sn`#X64gPhw((u!7O*lfFLT4mPSDYIBFyFrp(IDTa|- z23lEJaq#dEU2`&oIuoCk8|QykfKEV`erMdRIISDKL#^D;roYV0tk&pg3q#c!zojA$ zINEC35Xj(jT15juX~2`G@UzSIA?x$tO;J|AeY|oe8bQt|HhF~&;94p1K8(Ie1c5x6 zM@053Uo%b1e$vd|Z%A9(%(!!}V~Mqdd=h|IkgL$ifAAidIvLM*R~%Y(7p@?sF@XW@ zT^}X_O9CRJ%S;mjk1{f?D_(;6FZ_h%9{wKe0h45_|GW|)kWJ+7QMKy>ZJFwUcC`U( zz5QgkPmsx8)bJLdZvqMwtI-vrWq^WGj@2KKM@-=Cz_9+ZTIYG5bM)G@AGO2K{_)zm zaDeZ*Amxb5YX2L#J}g@b8BPYZfH{gB4vG21cpx-h2qyyY(KLrY(p{H|(2oD*d(-eL zm6Z%*_zfud2 zx)eIG2b>=ZYbziu0*V}ZX~V$xyjcwbX*z_r24Bv|nrVpWm!H0Bf@ z(62QaSnu(Wz=vN@ikX7(5Y&FGmB^@t)1Y|@A|p=F5QrCQfK7iHkKP@2{WH(<0!HfL zg{Pj~fR^*mP0S+~*R1@`?n>c2wCF|t4U8v~TrIYN1#$@62cnQ99+L3&j8wwhNDp(p z;Y9}un=#eM7-p{rNf5aU5_J5r_gDPltuTr=6-zXmInmXWJ5J=b);uoW7IM*G&))+QU7{3MQC6v5>eJJPY);x!5L zDlOXT`lt6O-Usb3LgYN3=Xab zBA@W$WJ}@>z0D!QX$X_=hl(-_QxS<)(0shTNkN&)eFjAvh;{$Gy{Ci#kkfi6*%Qu6 z^ZU78Y9?R7k10q{jVxwTafP%Pi6H}Sge@NV>RZ%rs#hWWWKzwVnw>J?HO6QEIsu3Wu(s$E?ljTe{%fv*?|zTnC{ z-?tTrN6RFAWxQx^F^-FqjF_9Y{ zBmb?4f95WE6l3aGU2PwYtGBe;U<4)!g2;mMH3`=$YN08q5&{<|<|2xt1PM{42B8#xsBk9N93OtSK{ehUv7=qqiar){*+Fb%!n7R0j5ijz%(dg z(wc_?s6qJ1@-BDa{dDeNALjmS&o!O2G*xlgNGEbSlyKh@@G5cCJT z^;G`Qd-g6$Cc=KniVbBOo~Dqe&CGFNYaM_OR9wh+Kyf46O2{7;aDoaKgT@NG9gQ9r zACFwzV+&>YTD-{fGCQlLlO6%Y9pv&_CJd^;`>pZ=XJ7{a#>OYn2Me0VT8gbAdu(iMj7!Fl?CI$# z*k!hh6a^9Ii=e&yb+!K{I%!Dw4F>o$=`6Zj`v+bnJM`{c1^5S@ zrn&x&rBil6UHOLphA`E8MYyI?X+^ybK)3)f&Il_|7QjK-;&N$5_8t|v)6te_{7C?7 zgcVEX^eLECph#9nF_m5wE9_tNObe4len|^M(89VPP0-iLrq|)6H{C4^-hH72E&&At ze!nW5lH8+3Uk6FxEuvs?!6--SDVgKr;J-=@g$t$|*|T0D3Ll^UlmHL7VglWka z5eQsZ0uO$FF1-~xD9V6`dgcGGWhOgQekW5Ov8Wc-cr&1zSd#I#=7@{ztjr-c;oTin zkTB{PJ)qZZN5v9gFmKJpM=XYdyUH9|G*-BavM#+CJ+XcTd5M-<4fjB=5Bm;Us;gyr zm-C#ot8C`YZGJw@9|dZedmeF$Vfw)DW(4MVLq+}XIi4JKZ!tN^y-e$Qe%KBgKbFkcf=9epdnH%yF6eVpCF8q9KJO+1@M4Si~6zq{+I&&ogn8;&qpd z;jQ_YqA(!Xw+5$la;94XV0L(w48=rO&_Y+dNYy2iO$cSEJK!n%sAbLSn|z9cEfP(P z=jfMZFWq!q2Rw*Jscu!y5MU21I?L3zC>E)LrmvWY9DGxxNmFe`{NGJ-ev_wnVR+3# z#(WA-{Ukb8gM1j&bx*RU)H9#*RcrPZ%69i6`zT&;xI>C$srqb^>kn;o`e`s<N_sDF`$?n#1A1LYRDtT)ty>!~-uqg=8z-8m0i z3z&RoGGbJT=5B5T!Kc&C9fIn8ufVD<2OZ0W-#$9ooF%r&_oy<}k%%W|;bHMX^=+bk^sQMsD00&LKkyh=2|1 zS3~w_F7}Ak>q_c#*JbI-6!TJ`Uj55eEx5iQ5GRynJMz6)Y{vRe6pR*QN%-|zaJlKu z+8xRfeDMwr`YOxW@YwTs7Su9RTSj+?^m&Gb5DCfNns;8cQ7K73Wm}tIr+lT7p2>CX z%7XV!h?H^Ty9wHhF!gWPUGc`@i?OKew`3)nMT7f*njDR$Qx!RN?pMSA6rZ;P7+3=) zg5#}H{dph9FCZAGK3Ue z|EJTaf9Mw+cuEs;yt$4WK2+08xsv>zj(Er157a7o6<_$YZ(|4n3khaSNP#q zK<_Rn_h#s-^L*x+@$)-`1Vl=Tuj1F+u2=$n_%GKzIR^_3gtp=DY{H{$!qM%%nKGT% zc1%ukNl4^-K`VMj#`x;9pI&cVGgZ6(og`5B)RtXsB$BrdpFfCdf|HPUPHku{oO{6B z-n@Ck%Xhly?nNuW|JAtT;8q-IL}eqsPbT)FApJ$6#PN()I@kN=Jxw^^q0c*>Q^Pb0 z_klaGjqvJVkdEcK{;AFTD?igL24Hgu&A3nJKE0pG;2Uw(aUU!2POsXf%K>EW9wqMTpJGcxlV_n90o1Bw(HWa!7KDlu;>fffJqBkZGF z=r2#P<9X_T>XKti&VMa1p)R4Umy@DFB~z zp!d&Erl>ngE80H?LJ7*Eb`CIK`IJGN@&E6YGp2%qbDY}IUtV4SJqnm#vb>3}FL}8w z;Q9d-5{3(=q$v6Re--pkrde=U#}Ej> zW&v6YOihjG^3*wqqK-u;VaLwG0x6g^T}$)Tz`#IeUY-mOxeQwdkaxdI(|O*yd4|$*=!QHlE&IV!@-AlcD=^ zm?Ge+y<3=_M~awj#HA9r!3w#;fu8XQZY=FYgET zncxdouJ{%3--?dAAd&Dc_`VQOsz7=4@cvhHVNs*4y4X=a#FiXM?i)X#5=h|9EG&%R z$o&+arH|u@LPwLZGDFa@r1nouO=W33U23%E1nNBw4*_DY3+M}(<+^b#g|?t+^P_&` zr`_Yh{vt#WC|SNV+y@M@v_Z2g3eLLPKNaM`HVYENGL)OpJrSPXUTt#+sxJZp0#1fr z69?Fh?yKZi(x<9oB6r|`=m|n}nR+!e%M%JG-q<@2en9Ylj$mItyTkRzp?+E%0R?yA zq0y=mAp>K9MZc9g%CC}^y+x#(Q(1rji9WtfOg2K;EDwR^mKjCd`TwwmgNgx{8Lz)gBP+sV=l!{fE07a%; z^cyN_k-+dyn?b@7F+fx;xX__ISrus0R}NTwj>|}tZJ6d2=P0yD<=go3$MO|W7L6cQ z3kC)q6mK;mpoRt*HIRz{*9|BKDP+RXAD_F?`Z}be4^->8+@9z*k7#PjFr;3-+9-uy zk883Sq1rx(=yi7*H0?hJ|2{6?D#LMWseSe;aaq`&Pw+jxmBdp>>gWOXg8UjNXSPU* zRHj6|)$<(gi{=OSBG0RnaI1}|n}$C!*IA2V51NtsERcj=Q-6ZfAp>VUc^t+v<1WGz zdERrmp9#o#ct|b{Sn5nBK;n!1oqyha|8}&&K=Yac$y}@((SRPI*f!X<*m;b=-)5J( zsW9!v_0N2*IF#r4@s(F|8O)dN{=Dni5?B>n<90^XE_1OL%A|4AofqRg_iOv5g*o+z zw3S-#G~Cd?kC6G}UD@@xEjQkhEjOIsJ3rHZR9cvgo@)C3Z zS0`#Wx_7}~)pxMry&aDy!>RfaoxI;*!2^&3zs(wR_DTV)VDEk7fG1)=?d8S~TS7nw zrSd%}TE6}qBwa^9`qX#2Ni+mQaNG2H{tutyMi1z0XD`PY#iWB5^-yg3YE)SnoI!Mm zE5kZy7Gv!uX;)flD|oeBm?QOdNE{73w#)Ii?@717Zg!*I92Fx1L2*msm=9}!TZk_Y zZlGd$1^BJ z>lpC=aP^g8QH5Q*q*4OX-3?NLgtUT`fV6aXNrS*3-5}kKNFymZASK;W0@B?jHFF+( zzxQ0{JM+uSy=TvUYOQtO>t2gEy_%r8LzSsLh`{)ju=@RXwMJn-r6%U&l%Ow!6JMOu z9R$vGhGK5Lua7LIoDSVR7uhY5GU(Kivwp*~(Y)YX3_%}Y5gP*bGY6}*{HJ+UkD0JL z)Gmsw&uK13p7xww((YiFNZ7v(_`w|&LBTtvLVo;03^SvB=C4}UD$P&jw|QVgTbT=Q z-mHzj(x{KWjeg`paXrnYp;ybHI)a}hF|!l!Y=W5XscgJi*%jx7@-k(3h7^G`8WQ5^ zv`bymA4Jx|YpdEnoBvr$7!b2U2@2GrhO zOk+GM*ZZLw>nD_M?$B+(Iti1*Tn%dDlDF-j zN55Ss-+qVP>?u^9h&;}&f*IiU3`~Ar`yLX%vH{pv^tosq!&>7>u!4g%Hu7%=zWrN1 z(JSN2{kaJD8FGj&lB)2dLv=JsZeHGiXSxmQV^xfwPHl2H1|N<-{ZSK_il+G_AA9_` zOu;+i1P%0;Cw8pi;6`q)2AX3(M9fc{cnA;B`{7MK?JRrmRS>QjR>2o#mm|k>p=EM% zyFApx-FqdyxZl&VHRYuTG<2tbuLhn&$K6p_C)pmAC)_S$8Xv)fgSbbQc^`eP@vq$D zDAB_O(nkz-kL)d5cP6}Wb=j9XBm@@H|J4G>8BPwRPb5}9#JL68NZ>WAemK=H{muBI z(YgPlM@9-6cE2DMME7UJI>M>ar$rT1m>}R!F;&=YuZB4Xj zNQ#s28D^DpceIF|ot+4;vKhETAxkuM(;IyX2hb$Rh}GT?H=ShzE^*; z?u!=scG>n$L&H7{vFUm<0~r0wqvg@cX>y4EV}_DCctrk`nNDdZJ8@!Z=?Ky}3?rW> zV*i}(#e**A?IhAxvZ_YC38%f5e4@n}OG{O$O+WwDU(`?eEJL2DKP;F6r(c;0@CP`L ze`tew(ECQvJhtP1Wh_2=Bgwy`e7&qWPp^@1=b40#e4r}o{{OzZa}7Gu5o^9}A~L5T z0v}9@f6U+WAfGxqf>5SmQ5x!eXMGo#3zRUc+*JawcoZVB?0}FwoQQAKzK?*{&~UCW z*nd*>$H?IR7+Ef!jYMFQj}~n@O{nV0-*YZicd^_@Dq`+Hd?{HxL3vAu*80ot-}?y+ z*cGYTuO>$%P|~97B>h3dnYfH z3PX_s0h>xh`@`^yfQ^oLi)5hIry+Yr=?~)O_V)IU^ET{SZz_#{yZ#*kc?5~@ix-+7 zDwh5#s4_mw-a?*3C{ktRy(}2bb?lGFpyU`n)_eB6jgq#03hf$1$?euH#_1Np&7<5y z=`vvk2a|kHd_nOGSLc*(cNHbl6Oo+|N+vsV(yFuIngYEui@0|@0rr#~~e%m_yF{@05DWzEwkhCY;!3M=0l0pQ@pWWB>mzdx< zZ_dXAPz<5D?1w@EfP3DM7)9v77l$^|VM+aGY3@)qTvBXjR`f|1N8yj-bC`JIIj(@rSK zml@ZxMp5R0-afvAc9b9nxop$-nC@h$6Hf%44~X-u$<#G^W^o)W@6TT?4?bz6 z8&MHuiD*kfk{aFcuW7RTiOgtsgWVdH+ZOPsdGPVOG*s(A;>nFrbhe{6^mT(fO-GH9 z=%@Mmwj4V0&_G~~0B3>vV2y4{xWQ~2z5n#=q%ZrP{61YoneJEevL zz)g^SOD5s}Ec<8t4Ry~y+M@3>1(nRrofq0S5=G{w_s;!zck|MXYrk|I%@03B;nt??g1YKuvc(pG4wI)mo0hA=4i}x6;1HhM;ZKyA!Ifi8n#ur@Ap-8I?#fq+>x zrM@MB!2q|!mlbOMKF+*}fs}pp4B$bIev3R6BT_#cDiNzUj&A$$UoFY`3%?k80m}9% zvyo1oN(bQA=2DYlH=+fWwBw`VEV7H`4EWz7kDhTvwP&eZ8c^KM5!1Y;1I#esLrGpj zm}UGf6lR-Tm;p47p%RVw27$M>X`y{0h?LApukm;jyLmnRsJ$*{XkS-w!3XYz_4h71V8;jd5Kwb_R{XgkM~Oo^Omcn zw+Ew?`9-2-Y*o^`C7j>rGK0G()9xK&+5=X%-Y2(jw{=Dc^cyXnkTNf$DE;!Q{Pp+a zdCR(g;mmK+J@$bDq2AiXTPW3!CHNU7*ddq~cN>wTQJwUgt>9Fs!6A140zog<8HIBVCK$-NUNk2bN|kS{F$ z!d>lJ(x&1p+uLg7+%J>3jQt}U1knL&f@q)7=)zG1i>nw}dCf?jQcK7y z?>JtxuDN^%+`}wV5gT93T5c&D$am3=3^EW!f=7V|(q<{uHjI6k{PJa1QvOyZt;AIr zlqry^S-$TPlz9_F(Rs3U6|m;javvkyd)XZaN*(^7h}Dr+dx~IdXrx8NGxJ&5v-i*v8`gbpK$w@;W#} ziGC>IHqD}DQfFBgUYf$MZn>xax5aVD8et~-l%Q-^3y{jlg`Up-g z9UdsnJ3#)^!sUl9BSx+5x)d0VU*#7Zd`N_X`2W*myTpek6c9fyj>+zy(;kn#57S&A zJtV9#YrlY7pdFRsNZ_%jwwH$SGO@5ad4%ij$bz7K%a6y2BUC>=T8BUy=+Q26p6J9I3C1_j zoR>6z7V`j*Q?(4fC2^3u>O@O4x0G8w36n^&wf)T zem0%#xP@@dw=$Otu)lN~+o^u8DJ z?_)jbI_U(nLDeO}Ug*|(%5w2Js$>V?Zr+Rf?chtLhSeteF`kX5x(bEUBD%di6_a z{Ph`9(dY*X6Q$Q1H0QOGlZyMg^2^JE;&wOF*atN6sW$PsxmLvV>QCyo|K3X#v$1i7 z6jH58FKE9_SF4I~4yk)uB2|0^;lD9HfLE)CRZX?Cf93f&w)I08qHw3a^JL&zRx5&@ z$4T+0$b(yu@^0U?`$&Z>g7dSc0J(^B#A{3Fao2}P{`@5xl^c-Kp|R}i&3k-2Ao;R0 zlO^K8BW*YjS#)zNvP9Um3=wu<)gT&K#}5hJxZXK_uOU%j{Q0*_*4yqbRjBeZ> zv@UVxh(M-;6vRiz-T8(c&ax40}Ml4sQI+w+rKc9v7mVJ_s($omQdf$Ca9oO$xdF2aq zg)+ys9L_miyA1Qd^u-XjN%pp4U@>`iOD4`o9&9+ByzHK+;J;m4-#e`j;qT?z7DO=* z_%RPRIPaQ;V-gx?LNy8|#=C3*aSXUfkg+uD=6KMR;7Y&zPI*C78%=r8y8sNZZwonMiv%C>Vr&ZB4$l|hsgY`kF1UhjHqdiCyUn}5}hm&0io1> zf@6P=mfFYx!6xXwuT9gu0qS_{I6SjuzBJIgtG*H&tT7^CLh0n8(zLgTYDd^bH7XB& zIGez}1HLn`luU)-DX3}#m298Gx=k>5nz4ZvdTRm5m-#62}7WiTLiKw$>iE@bw+ z40X;n1pR~^(ORHDEt+%8o2e{0&-J>^B5m0F;JDz1y-#WZZY*ci{3J^lB1)Q@k2Wy! z=dDnQK=I-`zPAV>ar}r*66s1Wa9G?o7lC34K{_jYc|@xK!ZbWrcS@v<^(I+ofRLjk z%8w=^l=BO<*L+eA38}$>Rvc&t^ zFLD&+yL9N%Pcp`Xm^-^f%7?4@{9HrBoNIc9Y0+99jr-ND(!$DbkNLN4f6__efRF@S zGwLA}1V_USX|Pa9sQwT_MJ-``ktUt2VxDF_*H@GZ4ZeGBNlafjm#gdPT?HHBO^3en z2asz46n!e+k0XX`#iB5l2*BG*kgN^~b_oijk@S*$O6F%D&qr6=s)*t&201NhJszR;PJwfF@Qj??sPEcHcs25SCZ&~;no&xOFtmyw`5Xlcm>sF%oX+jYtf!6*-kRo((n@2*_mC=eK z49Mp~Rwb;`d$B8J^i;Y)Gd{__9WylY<3#4@R4@RxOs1!CMjP`1NxwsfV2|*`IqOQHXDRB4$>XAbvb6MzI z7g;_a7kkkmBA~w9BIRE)SQ)!yh=qV6eolWzx`w@P zlONFn{&X`SawvpyU~+6F=7&j80Zq3djkoA5i{VGiB*X&6H%tk}y;BVWUl3!~#+H}0 z@X%By&rN6~X4$^3-ZbL6-iN-0s<9aR+Z3@`q3%vozqqd+--CFuxElT6QtxK`$3Y#0 zcZlwHkLM{z+KUh#nC&?8C_UfCBS8w#XJY%93@(+|p)M!c3l@*5$<_j9&6W;w&4~E5 zECmO%OdC6-dv`@=%4jl6E{3npmftFFOG(b+aaUbfDv%xUU-c5`?=f*FeaOzgv=)i0 zPa|THe)Nc?R}#Y+79uH*#r-HO!uJ__>i1c$RBiGl;ZE->UFn>yz;NW3!PR}@b}HY> zj7iFU!NKRPvmsqgvp6;FebyWI67Wajo7By>U9Zakv`0*Wq#qK~KliMf~+uL^X_k$EQ+)xpfnOtSCC z*Nyy{-70Rb5%CR_TMWz#J%WXUM>+^4q^F4#AC$Gd{oKwS6Lb3Bp7uyM$3`F+&3eIepd9Jy=gl?vRbD?Ha@7|Y!!6LEV{4I?J&u+7$6X# z!ik^3w0NGXxa}&;nFW89%&8wSxw8&7KNb#-nyzjcmdnMpkKJ5N@FjF9rgKFip26hR ztJJ++Zn9`B94!CNjsUfp8lVa0Ai`7@IYFs%ukW|5K|vazi<;4MdE(HR0qQAZ*ekyy z1$O$+?DecT;bJ{1sjTcZ<7Iu~CLBawoA}UmFR05Hyb4hyYR+geR-WI@PVx1w7F6Ee z{#mRzOc3GVXeqqYrpNBZSx>TV({5=Q+M__{Yp4hD>w?+6T>z(p9z7a+nFYp>FGh_y z(i*D3)ux{IUPH9iqYkr*fYYec(sibGYX&M)Jo!#TBY63!Z|{Qben7XuF3){{;CCoa z7oV4JtrcH7ZtDKoHFuh#yy?b;_gt&jbI-OQ7m{{ZeU)!T{$)ZHRMpTWt@6sbkaiCC zY55*IXEbzXkC77 zw}o=wEtZgeUTHue5GgDzVIoewuwjc=RWtN*c*>#|1Y8I0l@7_DCCydaTZb~(`GEja;4$SgBgMn&WgWe-9;T8H5j8bnRWx$;I=ITNmx8++L?dEp45FQI73h&_Cx4 zk;27(?sU$wluZ>D>#Z`nZ(FbPK{!iYLxUBmm)DDzBpU1TqJNc{;D=T1Ck9p*r0olD z5NZV|6&Ex&>%2eUC%|Cs(jVUm3+d|4e^;%8e(e(^MLVQaOo1LQGFiQyagKxa$4RhS zL+fnfu*Dj(^;iVoMhQk+eQ)Nam%7Uxz}=QLm87w8g7%WALbz<9h;Qm}hMA6NSf7~h&L}=2j+8ji! z230k7$nik}p*IzE_u(;UCND^^1}0dEiW6i7ImAQn{21iu$k1?)y+5li=` zli(0|C5yok>XVG+JBxL%c*HEF(1img3T$?L`*B$mx%fB}9!{YXP9Oj-pPkyf5Tw9H z`sC01CefgZ85a#9YDkPc(zvpW-Qt}!MQGTyv-ii3Z#G*_Z+DIkd*5q?-X0r!J>zJh zG~vm7_ROE6uxfILgo;WNDfX@V%aflzVLjE_9NHC{2tFrI!vW!C#Qn9^Nqye0NXVhN zV;=7PvY}Zxpfi^j6<%}(Nxk@PnulozUKWx5)yI24xCx$R=NHPYL-7WYJYOnLnI8n) zoDCZ_*8WMP-f%nAYMBSLn2+_Zfp2b~l4kvQb%?c%?GF6VlpVQ9u(pRR3MKqeE$>iR z$}#QATklq4c`}B<;mCLUv|$C+vnEl#o@wr2`;E$kcf2`|S+tX|!CCo=O310CqT;R2 zcPCnz0-h??`yPV%6{pm<881G7Mo7C$dLQ%n>NSxtzP?0Gnd=pQfg z^uSIx21%)?EC92WcF?#;k5~u&fIoXcvO0jTvY(^!Y;^xd4&wP6g~@^)64z!iE`ea} znaY)Yre@U-Q!#9IWp!`K0&31Jby$*A7F?z{XxyssBaLu8r1rgE7xTx~_}phyA{m2< ztw{~y=C|fka9TTmRk04n+0b+gct)?$CY}O|urwe*~QOqE)uL*dD zuRT4D5G*zmv7*rt$xefTz&x^Mi zRMl1OnzGqLRT;1Xsj0B(KGw>7$*uyDM@`e=$B{kp?ilu7*-__}T#<}!I&|aD5}y<~ z&(9Y=SaXA_V$B5YmfaF>NYV&J~H!8A@SjBI)X*tels?> zJbt*WL{N|reXBvwK{`$_$7@~dTl_574M#q*GrXF*dO2YG5uIBz!_bEay;f#qe|U_y zCE?Ik5o2h-)-+u;sUIkydGkdhuH`4j`>5F+*DrNYi?g31qHE)RjIt^e-l8PY%|Ruc zU~}VbC*te`MWPV|pW8-ib0jB*MmIx5wMxm!jy*+!LPPMDIyi{*eN^jCZ#k>j1 zHA~lCJ#}FOhUC5~z;46P8nh1b*Ipl;f{TvV?Q#!E#pbhgM|C9n1i6&H6RG*S_Z7Gp9}Lc- zz54J73Pc9w1Sv?-yJKsCMQ^_zcHH!>9OP_?isWqGPOT9im(zmLsXW(mXuHr{40wLj zIk}K=<-$%D{pEKc5U=D4{6WPe0?r`5HFh%fdl>1+G_bIQQ%MdlGSn&|JP1~;^HnJ5 zRhpV*{9^f5>!0wkLzDRJPiYr1=JQkt%BB;YU_sp^(I`m9Q_UO%7=(3X9?b&WK+mH! z@aONje<3>@HOD|>tVxk6fj3?;uHugUtzahGScKPow8y`NHnif1apq-Bc^v;t5N6G!YfoCGmW z$$&{U=lk{Z1zIp3s#5+vcRv+xWRI!}bVWl;Us{l2GtDwvPBwwp%!eYr@(y}gUuDdj z_JE~Mg|+y|G>ASBn6bmH?l`;0h~OhgeQku7h@)L5_2#0ggp2y3fwSr2GPyIFE)-BiV3r zL{+j0J+#m+^s`5Zvvx8~2r`{^FN|x8F0YFBBv?0fCXL!N%btz@R`8eCb@ z?z*SVZUa%8odGzA<(_Tpfd!XF*$~eEqDq1lLVz<30@3$lO;g!W)1H5GLmu5* zS0GnAzO(XS~&&_~wE5)ar!daXJ zT6Ghb?2-YGS#Z&MO`T-Og!fc4G}XS! zWBDwbc(RKquLUED438q>L(q^q$0k_)c2qTT-GU(D*#CIxK+ zW}JXdqxrRfSzMF5|7rm`(F*DzNezbRF&RbN@lPW|{LGiKNUz9`6pUNzZV!W`4I+oX z8)BIDQQ}5!h?W+E$tp?X4R$GB;%+G7mbVipwP%f5joVWtNHT~p<*O^=9&j|&#VEK_ z_hF6Vf?N+y{ra`)-cnLpY65nAo#Q>Rlc3YDndeh8p`8xQWEhexLA80G&Wabi1)$e& z%{{AoOjd9pf05z!Tg;~m&U_d$^cwZ`AcO`*ePWFnsKtxJGwqlBLl)1Gk&$QZUN9cM zY26XMm{O~QAB57#DGIHih-ty~A36n{jf#(gqnE@<7uYEwNTG?O9$XAs{+|H1XHv6} z#ByGwkiv#pNfs?bf&DlzFtFR?TSV0(sOO2vxwj}kKmT7JF>|DT5DI}>w~b(%wd`{C zs@8ZX!OTBNz@o@sfBJn<52`1NhG0JH#y6maR8|aX@m*LIa3wYS&q=h5BQZ z6`wpPJa=eh&v6sZqUbZ{W5fL8cRgs>OKP}3ZTG^IH!U&P-u?x-Ou=U(ZkE2~ASq7~ zs?>C$Ckn|NC13Bu+sW>3p?8d*BqUg8fJ$=`2D4GLc)p?%hRR%_S-Bw{NyOT<+JjQD zyQdvxGWY!h{Zptov*Q+_mR=r;;)2}^&7yuPU zu4X&#YCwL@FJFI3B_wV&h-0vejt22sNNDKwM0t{)`<%Jp+Drz?LAhSz=P(f*1D2p~ z?b)(|Q3a(DzeojKz+YVek!sYqRksoMp9^nx8|Xw?C;5{{$UvgX$Hy1deKTvP=-}`L zer#+*PL3Wdh1IfX^y2x{H0q>Ea;?^5meA194XFf%vAraiSnXUCJ(ZjTAK5o;4&Zxe zH!J{zxr+A0PNY%@ASMy^FDnlzw8;5;Uh~zWyhr;`(f3H&y!&u z8>18o5Gp{mqjf>VXtktBh>GqlHRmJsGX@F(>G4F$uL-`^>qA$oOC8Rge5a-LW_G9h zZO2t}%CCsD zQQxR)zwOQY&^Hl1+D;R@tuc;}JtFRmS|vI0rIwC)kKc%SxR_!eAqEZe%ZAZPRed(~ zc+oOVR+k6Xz~1N^Jsf$khemST)eN@$uDhu5Pj25k%`cknBC*!ro7Hi0r^WbQu`4u^ zU_An7e6e-E4hkh}>+E1;UefqH{b$-r->7MhON*>m4OY)t{h^M`r|p&d1@%dE`J<0J zMJc>qr)GXvEz2AAWc&HjkpQf>-klB(*i_eMPLC$}twlVh~3% zp}#N+rN2)M`*H7gUc$?Svy{Om`L_+H0`mv2)vteUWP&g_zTYl+Ip0l~Gu`)PMJI7T z2*T;S_z$%?z7ztq`<6Fjc)%6odR?4u)JEX&K-pD>9bz%SC5bF5TBFq@HhOCq@0{N8 z)*fQf)=E<7&405o_;5BduWXJDuLrc8gtJ8M&nKHG@_8iR8A76!!nGCIde!wx?D`5I zkD;i?h<%}7HcgjJ>hYptk>u(|zq9)A7bHQP~neo(+bgS~>dgw3uc1hZ!HS4Q0VhC%waq98WkZ5@JtJPOR@m zVVTaoty#g;=$74qVbK9*d>bE~49l|iH@#Q|w1B7RAHmzHx?~}SOef$=xnzkX6abrG zQOhGDQa+Rb+Gu^#UL9O~tb!zkNS38Kf?EhD6^ zrrAXrzaW1gW3E6buCN4V1(a=B*>%ThPo5x3NHiX~I zJV3&;&0&8LuCQuCtPr$NT8c{}UefT_4Bb*8hWEQ#C!Qj$H@ju5E+5zB8OiD2!3^(K zi2;qZ*|e2CSawGYIGja?t&-wwwy$^W(N-drt*7$9c8!XhMbTZp{?j+Ylq-w%oqMf-0kWHfoq7F=s zB>{xR3pe5ZS-_1xV4{eHE0?V=P<+>yBf4Sd--o<$iD0E@H-VA+l(<@?sQ!4Jf@%U$ z__$An>A5P?TUB(d$W|gPUtduK(Lhy$U1fX2;z?FVU(vw)r^F3Y)+$B)bmHHG!sa~~ z1UaX-tiGOA&Fm$Of4EMB3Q-}WG$p}3Per2K?B!b{@u*nFD9=xgAIF*nT+qX;2@Jl1EDit)!M{dY>x?6kEz$`wVMisU5~<4#}q=+ms)&U$EB6B_F=IR=CW2&p0Q3sM+uELaD zt;bRZT@qE_S1~~71cl!pVWvMe6&d^Wi^+G5e3^y-;{;TxY$d?~^23sgpKbLz+L zdH6)HC6!arWDI{9x=F?9G^)SN##*(Lq2 zhXS8sJxY2f*SCtR@)=S!lfj+yM(MFGC-4?*JhFWzFn-|Y`S@ZiC%pZ;%gbr{B*OTm z(rsM%rnjvspF2s_i$J9-gk;+2d#7|n0aHSjRU?ConT0e|-nh<5)r)ANsU5c^iI<%z zQ`~Kqk*Vdjr2I8`Yy0U2vNM){Dq2m6jECZe;j4$wnx~~YP8=>5pfS~dxL>>u0yr_j z+Kf)B;2ra5+S33)1uF^34AHxC&`#U|!jx@c{aRu@>4&XNDLxY&R`3sc{HFoDj!(mC zrYI!H{(aVh0d^E7y!)w2fT^TInG?z!urElK=8D^>eWCOCbtlpTl0XR!(RR9tO{#Zu z){n@?!$g$2xobT7jvP7JpJGt~2pX|1w09)9UPSb-&;LZGgi0GkjT`ZuCV6?Vo%u&? z6$$>EAwDL&2n1CwnVSc$NokPL74RT|wDDIy!ddqAs@%98R*md^CB(1DV|jRXCT2(t zqxeX0kVcu|COi|sU3Mu-)RWkKJA-=FvX>d1dyZ&|ap_)4=q!-G_+6e^-0b~Pvjvlw z$Rl}Let|2|Bnbk5aq}I!JyfOch6@`20~Vco;!ye7nP=M7H1;cPHCI&TZRD&(3fj7C z#PiF|s6(4U_2m9Z za@~&vUKuu1#EJI@%ndB zIb42rG*mSa!n$Al@iNK+Qn%&U;F5B4ZD@1b`w*t5DxM0f`ayHHav%nWm#1D|ZEffP zy=|>`$D!X$08#@=#lX0M_N{=89LV=KG46P{Q|zP9`4nL6KrA@0?gOk!n}K+Zr!nbM z+itYWyPFx=_}7332Zz23R-wrb@~&E^2&c`jL3pptAp@>}um|hW+8!S1XNGVqz5#$P z-aAd$82qj$Dw`gVP{sjNdq&kzOF~a1v1#obHwl)P^09@3eG-CHR+e!6E^#y$g8|EG z%Z&xa!57@G)MEWxsxF63HE2(Fv}Hq;vf76 z8-^UWJ7jCg$*WTk7Z>wAXyWDbcQL12-F`I^xR*T*CgSj(%gV}uX~?(zy$w{94RM|| zCq4qCf~SH1qO6|Pp2#HR2cCDZG_`0N3=v6UXx^^0tc!wLlph52okks7XL&PwfC`n4 zFZ}S7f-?Md97Fj0ybgd=VmVyKM25A)AtjaAah6)i4CtnPWTV7x9M zv(W!)8$^YQpDn*?rg&9;C9G_!*KiipMBZ_1KRoP)O7**A8!xPAXF0hh^{bSP^KQ!i_XGF$@BW6KvAx==5xwwtMs#SxM1g)#gMK)*czdk>%pk~>Z6?71 zjs&?APw=PnlI{TKTy^L-MmflutK)kTiAgQPcD=!Gdwi`~+#0+-fmYmtc>0u@rX`m$ zW*U7*PKn+OiUt58-+%_Jr>3ewE$W8)fMQp$T=f^EX+Kt`X+T`-w*SeI)r=u;&sVrB zLkd(-Q zdk$GNm0=meBFU4H%cki(2Cv_oYjKmH`2He%HIX@(UK5r-C&H_&!Ze}(cNfDx91eAu zW^?ywo^72=dVwvi_g7y(Ey;~{j#DI#t34R=W$Mg)shwK!yR1W>TMJ5U(IaQuHHfXd-nm7&-ez~)~ zZFGIQ;p$Or05Pr4@$qTC!M!qcae2NsQ{K7ZJWdED4pzaHDjb`Qlb@?{z20)UXB3A_ zaT)ehLN1yTa-cn}@BwRaNrZ3-BYvvb;#`es;>=bi^NfD8A4fQGU3g}Mw76&{weR0y zc7VKHb*@Wr*Gipjp1IC@?>bBJw!b7ncBB zjpCNEo2sCD`4q^PkSp_Peu1ibjsBxnAs3b5rqV)Vjtef?OB2SK{#J(0Z!NV6o0}F? zy3p*%HS5qH!Lm&Uv7x8L*0SxeDXOoEGdU!#?_zGW#39pHIrGRVKJX3tfB|E1$?&ju zdNvf;ZzLo0ICbj6z&2*EOL+7C{h63nQ}tXqE0PmP1aj!qu^hReB7GuQAqkHfDoKpG z`QeDTv1uz=sj{3cx_`K@&UW=PQz%tex5;ywjUr}xp!(PZ^~c8ig_(o>2DqZvYC{-X z@xJSDM9Jsl<*|0UPgo>R3QfK90$2-X@xN1-x-^}B#8EbeqBjMpUq>@4?^l?4gQ^_~y=bZMXaWrR@C~L!Q9ggwZ5DSivG>_f}>ddA)}4nu6;RUuR8) zB?@GQc*}5c;uam0t@lA}rKB&BL9iYfgju2o+0auB!L1?z2UMgkR!cYKV(8Hyh2@J)sb+<~Tava;6U!ep#|y8=5jx zPD|h+SxPOnb2^SB;@Ly^o;u*)jwZgGw*I|1mv$VdA%4s|7y5d}Bkw|dUT7NRCoYiX z?hX$36;OM3fyXkaNQf8vHJNZ6*9pc>cavsaBYack4P55qA%J{J&g1Kqrbn zUbGod$MTTnqz-Qqj9(5tA3X*f)w(aI*Kl1o2}_#+=b9PthRsLf_jS&-?mh5$Q4rLl zE{~6Y8r)FT%N1L;@lR~@cNu+Fex#M_hfp#t;6K`!9utGz+|u%)Nzc{Q6<5{Ea4MVR zGxg_2@Dx`ihhyi5lZkn2vsvH3^t<(0uE=rC9I-Wt?S0uO<4;Z41=~^NUxmZ$fqK}W z`Gct#5tD0}eq!+AHvgNIHES#E&6(MTD(puj9W1`T2sUU9?%~=mR;Utwa;*nZ@w~S@ zYkzfkW!T(mRt9&TR}Mo28t&BLkRTc(z+PVk`QqkC&e>UX7QZ2=PZjyliid`xO2lao zH;NX)cTFa(NI(zmVl^4Hd(quOqPAx+WH{C%+oKP5_8WvVu*HARm-@K(K!^o?Y!1`o zBTMDCko@U>LjFhOx|ZZoT8wL_^NtBu(6bLKK*+1dnR0hI95z9e)599PGtLQ_%eaMcB6 zTnVuM+eLc99>Tv0yPC-3A#~=xMr^Y-rzZ+@(v~{N`=*@!T9Bf5askr| zr7;bh4aXFa^b@|V{f>^P*?k*4)3aE+`U4^)c7tkkWb4on(wucLM zOSZUons~ie*NsDO7V#%eXrxxfs>w7e%LLc&!6x^Q>i-6B50})q+3IHS`QBr z&+>J<%AB7B?%{cXFU!b%6_froyR~YYpu`Cn_q;Nm#8Z$FUB#9usNs0c)EzZ&;P@NG z9T{+|Geg~~jXD>picB~6*B&KF$SsR>9#_#(0e$>uL0HM8^o0vK9sN z7i34p{Q*BLLct+Sns`*^a}a+ADLu~OGu;s-LFyUg>?kIDO-!QJTZh%H-Q5HF=y5Wy z+s$Fl?`!)dauw(|hU}QEmc<{WITKMUx z8Kj3$i)Cghg1u7ZRAcvMxrXuNW5X%LDbY1TB---UhV30JZNIDvO1Srn^-{pmop2at zb(M2NMNx4#{GoU{P)n~ff{;A|n8JTQI@}& zP3LdDTKb3{p}THeClW(^yTf96y=7_`^U|4c8m2u6S^0r2EG*2X2?vo%jB_%i@^VJ> z{`_YKiC^yEFULT`Jk3fmzE=N$>GH_JjDnW+(=X#VDlF%Xc1ev?SlSA1)8EPrQ*V8M3GO? zP&@&HnR2F_2pHWeC@qzj(}h69AJl8d_!0)|{ATqg zkyW^kFER*Yi2?tgN4xLlR-;WpB5~vjavX`%e-<4Cz)Cp@itHAK*}O)Lh=hPhvC7fH z;99fH{=><}N9;LKR>LqleR9X?Z*^}6_A1II{(%$#U!(>MzZdree*Jx6sCb(;wks|Q zXxs~k$P}bsGjKEs$Zg6K*M&>%&MZ>+(q}r?(iBWh=@Ecv_0iA2q68Q`<^%0P0{-po zX~2KCj;QJ1)5a~4*E$)$84-{uI@pq89fX23sXi>JAqVr}$yL+v6D_#RI6~y~811di zK`_k-VEP0_3fXV2F{K|QEw4G4lK9{%+Sig=ey=;qCxa!Tw| zdH5Yyy>AiD<^xUW(Ot|Xw^k(v_rw#o5rfQ7yM>0jGLFKvM*wSz+zjTxQ^e)ObJL_Y ztC(fYm3RbnlA7=%>ihc6k^DgLQ?=XQV`IC9v&8fBi(!txD{9uaO)3MY)MfYUd<-cW zH;r}|Ihn*4P4S~@5f9=qO zprW5TK_pLwF#FYt_KD*)Sq!eVfa2<5r7-2#t-u;VHQ@oK-(dWRu2==_Pfv~OFpFll z22;L{t_mFk;vT0q2F!I^?GHuu?39g^2)ZT0U% z0goEhkoylM$j2xD^ZP#1dZpxm&~hjJBwOXEyq!t z##wf3FwQ*nW?1A~@Ca4QzChuVriq>Lhu>!rLwyn`(AXfKH=;xt#pk!Xv5nZ=l2^ul ze?m1nCvA%|eL4Nr{^jB0e1h0iMLyTD4-oJ!K+s8VK=1bIY5CSf+?mM&et9BaYATmxrM@p|uOdPrOdAC&s7w z<6}(FKZA)*QcZ#|$}zjk+*U4q$pfDc`=4tO@C>K{r3S!G5(Q=1$+ae+gXnM3@)8u* zL^Ua5)NlKD5SqqCPxY@MVqZsTRkjq+TJ0Cs>j*OB7aoglZv0mZFe+0r2oXt8!g^Sh z#6aq$?{phIdv9}E_wE$<8bFQ=rf^wWXT0vx zdUMJ}w(-Eyn3a|_GIzJEzk2f~bZUH@_8BNRqpf@$H?mY|KFB*i`s+S%=Qo%^4#Rdm zIW6q>vj0QwK{(?2@%gf?L_06!_RuSp*|M-72xv;W~^VwM7o1QL2%Rf<)0fes@0>DEBc2Ix`W4arQ&X5>B`cFlh zC@2^&((Ly7{=@4YlT)swx(yvgDGtito~IMDCETwICcC9=6BG_P}3o-lapRd#or0f3>e_xH6VkyKWw@E5>L zme@rL=zY}3(;qu2I{CZ>K=RJTjNxOWU*+%3BX&(PPhunj8W_e_>1yS2~A-~oB%LPJ7o7j&v7tp|Szz}d8M1Pt! z%Cx^%2ih;l#ApZv{6OYQex&S4p~p$gJ@MDw)wSB^+Bx~zNB?KKs-jPS!0?qhOaYn< zW;P;duoKEKAEd%vB9;z9_^wwO|Iuu~9MYN$5hCFVcylnF7Omjiq&H!SaItKsH}UC} zBD!56V>H|Nfqx{RvX*u}Z~j1+ijm*6E4fOBhe6Gh+@$YmEwuOfC$Sg8m{}rH>;N zx+5kj40CYSL2` zYDJXVSF}$Xox&#*^!!Q|SpTU0|4{Yb;c!H4-0-g6OO(}n3!((kt(NE^k?1WXh!DNA zt48lBLbM=+M2+ZH7o8w_@7=14wfl|ddEV=L-#_fQW@l&4oco-+{O(57a5!{GFU6{g zp7NPo*(~M?>su$j^L6uQ?ZVgET8LI^!S+~@XD{!kqm?*Oj|KltBv8vt=vwh=E5B?y$|{H}tE$S0i{@ZSDm(UbC`1zS$qxMepP z6rKzdkpU2v!Cl~!M4LH#05fsQevn1;?U`rsaK|isHoQ#`>ZPClRPW^1wxoXMV{t{* zvSyLjqaWW??k7UgtQC&^HLp(aZkOrbz7InF%aM?+{r$qcJRn-ShdW6DrRjUM-lM&`!e#M#yE;4Lb^k?`fQFn?_;pN7`X;`&wd z>6Swo_vK*&YLROm`if37lB;w0^z*UH#Mwm_=+_s8oNtWeuNBz}qiODN@zV@?nrpA% z15DCPi%3ZdetkscdNVlqTjMu%z|G_#7a_pH`yR$Il>l9j&IQSvFJZb{j<7jDU~Lx@qcDcoNIH$L-L z!)NCybyU&nxZz*Cjw1)s#lt0rFS$UYtsM5(e`a3~1SXe$OllUV%FfY4z&XC7Ug zf-1KEF8-1K_1@^ev^m`#yPSmI7~l4f;o;5LIXo-^H1FEkgxURXK(*GHnVGMFAt)G@W^V^4DnFeslp2}8A&P{CWY_BW#+4{SbN1wuk20xL zd$}}OP9k+g1)Pix9vmh%1n#ka3eI=*VYg~DlG~j*1ld$Kk^X7ltY!8+{ z)J^F7Ev>ZF5|wSYi`~236czgkly&>v<$QbG4PCcXL7%6XqZaN_+TX)f{Bv>@gxxNp z8_oar@QfcXX)A!5Ja4$x?D5*~0y}dL(mguzL%_?QF;Z;r6f|)j7+?j`M5+>9*B5Xa zMBioL|&d$zmLoHH>a-1AIZv1$IrSASW zj@KIF!jH3##3QGq#C1DtzQBnV5d&HIE#m_L2Oyw!^?D@4Y6+-`D3syysh@YcFpZdo zfMaSb()EY~h|wd1p~Ybc_Kvk)6EiaoD&>or@vniQnEQPWoUjL4SdyS`#a6jq^HyPA zvza?iezy`9jSm4=Da-Ai)<2|EnP>NTb&BH+pL#BANPOCKOsGsBILkKOZ4OT>uLXv$ zgnj9>zX=&U*qNo@{*BqjU%y7&Tzi6IQPbz$gw8iP^K%y?p3Z@*xIPC9KZy!03>sQ* zfyuH0_Qq5Ui|2+|dCiAiqo1}`Z%U6DHRajkj|j5rUKB9%WNFxR#nLs<2^noI1Rg3H zm01wC0^8{h)AZV~a=U~09jz(W1YNcmUBvg{yUxVRd6+N4nt*V=g(Ga%`##*-_}Z|Z zxEthC%xdV`sP#6V(zC#K_x)p2Yw7y)e{CZSYhT^b=vrFaaRQugR^^}cx6fE)+(ImY zI`E^rKv&0s-?NM$;ntSAr~(F}66WUma+kUMcv9Nx)ebSa z7dtAV+l&-M*tk}EvH*s+{fMeh_KJ?wqpQ)!&vQ&+H~aXajhKK{XToSlkqsrBtD#wLJWv+;$-0ia!}?F>|_K5 zmV|MynHXXM4dZfpFvlhqsN{{w%9Oc%UMeegq%}uFREyg-K5_Qfk7=8bhj`@pVF0ni zQX`X(sJ>s^!#`M_ByPrByf@)EJM4;&x$3%EoOHPvBXtJ;q7TH98`}X&W!)jf6PT?^ z5hKx!=0HxSo)T677}Z0D`9(hLzrU$F_;)10?3ZuPyY(eIzqY+gdB>nRi+VfdCV>ce z_BN=rv^I$;4yRtK<@5P;)w=VmgfeTzhAeXCw~vKXJ2%&Y;`xHQ0m2wyRwH%$t#|_8 zr6M-D-jTfWB$Sl$fa;)gkq2v_Jd>a$ z5?t9_e1L9oTtAv`JotOIcZjcy_N7D&0aD8S!1s{?`^Jg>w~IpS4=?X`TF+sF*T1yy zrU?gKUHJ$tPS^_2+|6(8bRGr?t+=Z!!mnPhUjUA}zRmfpEa!#2usV>_+s7_zow}_% zHMv!sOxp!-nT&pzfO#HtI+>X*&HEY-e{$^*I@h1{PJ5e4#RdprYBsK)s(vgw|A8X- z=2?_?7OPw!J)dlkJ0nG==GuPgxJ6*QvI{kpATha)WrsJ)h)dTVkfz4jd z6%9m$ZXX={(?Tj$J{`axhsff=pi|BUhT#sz(pM#dSHGJH$4Y=`S=|h!tbBLT=i=L2 zsCPr_0m92Li-K$Z5Ip3`BI^a+y+!NBjesm7w2Q1iOdFlV#OV`oej$jXq9?vVa#c%? znB*mt4xC#^4GhFvY~B@_zcngiv?v3uubx}rB@nS&36^d0v&#D(+GCphV^Q0?vxD#N zp4`DpqEdAlm1N2nc~_E+_XJN9fEU7U)q^m{)t|?ghrX@V4)J&`-!eI6SnEZi?=soG zu$Jru0#V46$MR=oS4{yE;c&y=+y$Cr8lx}oB0o4-BcH5*>+ZSy_SUC2sE&DZ*#D%wY{ANnTcC+|=bbcrxuM*(YS3CB1*dLmgl5}H(bNCN_E<68 zL&;uVAn&XFdUUCkc*rQ)|H4t1B{iy!wA`S+a~P>^1m>Yyagbado0Q&BaJj4dxhe_3 z^Mx(a7dz}a-evNR9+4b|Ir{b3!U1q{4TvbZkOlDy)EB-|k6xRt0Fa)t_a*2g-dKf> zY5t5j@o9UE84T1$5CbJ7PGIL+S`9Zp@MCFtJVUvbTEo+O=OCCgo2oRFhyLWLm`10y>`}Kv+!bemfHw^nP z;vnaq`SIa9AoJrE_+uA($;A3!*vC1=M+!A+@_P?#X}zeckX;X;jFr=hQuGI(PSze6qd5)Pvc8$MY%%2TPFBv)>N%Lm5^(KZYHE(-KyrzSxC~7jH%Z zxk$K}Z+Jf^bbL)1y-{`!B@2epg zCot**i2tF1dH4*;lZY&rN2f{oL`ET8mk>dLr0pwIFp2=7p` z3cOZZ_skogVs)OmqJVsnGQRxcjwMcq>wy3Oj3sT(t%JOed36|eF5%*YlOQg!gdEvq zD;U~d>vD08zYOwz%pZKv_T_?|<$Rg#)X=W>cxG0<#~IQ6wo7qq*dH77@xOP94@~VE zBA1@y7_96|Dpw38lAd!5FNonts1(~eJ6_3I0B-s6{M7z80+Cj&pOI6cj|fcet&ut{ zWjX^6#0cU}WFU0g{`y*;@iahUhW+^3e}A9yd!_m3X~{_63$~?S(_?qeW#!iFQpegx z^Qeda@Dy<`ONYw9to7Ls56H#VhJ_>efRM}E85XyPoeaLZ(^`X=HSnV5>P(_ia1#H; zPt~^Uwsdld>gvlZJe)Ugs5u%3kevv>NC48(3!?j63v+w%#8y@5It{wXi`cWb2fZVEDAeF~D@6yaFDEUq;7 z_dNuIL}cEG9H=1vww68&K|y=BZS2Qr3rmZ--xmJv?rvcN3T`pV`iANipx@krxOTck z$dk|Ceb}0=w70LZ$d{v?t)fN?!eAif_#71!OLPYd2E0=IGn`C9A14L?9OgBEu7OZD zFy{x%0H6G;Zh-XLC4^{`S{n8QW#2S&E?l)mJ}u)CkllFbCx+LXP3gTVO2tNd=3d|Z zm#3$Ri1HoB^hw@ZG=6*dS0#~2lZ^jTl6D|dx>=yPrw5&r1JejR>babDS^Vhy{1JKq zAn8TvYKz5x#`yL7W1@Fc5(W8>?;kBq81psNCq1Xia*VQUNg+&c*wyia_eCC|QL6{1 z+1YFv85!wPZ;YlN8o=R*wUf(qal1#;&SjV$S3&Q_t3{ac)5c7BijT*qvYZMGINoYG zb13~MHy?v6@_=C~&yVm+V``*+KS>gLzp9AM0LeYB4``m#J7VwGVTQOLPFUNn>m_N@ zXyM)L{dVP-JW}041OMnWj6o9)M`pL0AHaNOYYRPMa-$~8p8p+}%nvQM^bFS8ut^EWcB=F-;fwk+@Wmwd_|lxXw_qTV-fpeVEaj6==jQ}y8Ir~JK2AgW`E-Q*HeLa z+1lRDE7E{9EL^Z-dtHpN<*_lja8wk0NgsZd_DqC&e5qo!A{~jZ#tTuyiU)P454+bW zde-Vc@bTW)pZ=FaJ1%5veKi+8{@j?K<&!?hO-@N}4iqS`z4-o z(W>7tHXVONA_*!8<_%o>w(7eJ|2gLu=-U?@QTneeTa4W8{$itR;Zrt5-M-cQ#I9>H zW*F`(_7SM*U%^ltk&I?(*MKKDD73!lXv|@MdG_;PC+s>?CGjX0HHODB zaZ`D-^zBolk7Nh>=f;J3Wm2IkuyR7Tfw;^H<4Y<+z_{E76IgRZ&BfJn!9tW}Lo0OuoM z-{Q8iyh&D6Voyj&cy=8&=ibBm_qM5I>O7o$FzvEWYLUQZbGKX^izcO|ekORR4{SI* zF(4->3w2xB<5T-HBm1V7v^TcmRxn>_@}faQb*ff7kxyQhDSf$fY`FkBOD>9mct5^e zU}a$Hn{g{`3?82as(vssFg=av07Q&X(G!Er-z{nhmOig2Ch_rfC2Qd$-AXt{kf82K4%*_rGc}`dtuo4KsNMe0oN9C5qftJ zip2qKa+EnkL#0tQA7a!EcWWj^R5-#nL2r_x!ErVLok zqwABpczmci&{})Q82Cx&e)|}AXVTF*$~TDPkO~5gvP zX+9W4wK$z@>t&lEe*#e+z%xecju@k{55x$Taou`YeKj4PGj97lTV~ngk4<3<$B)7- zDJcPTtBSw)zX?sLq^_^Nf6v6z(4nCL8kDh%zxgMOL1{;=+=Nn7pZ?s%)bse@7v;d@ zGx|IG% zwH|Xt=Njr~w09jg4~vPxUniF}2RNN;PvPdXuhxbI{!aWTEAFFY*Tx1N4m>RK$uG$N zR-({KzumTaMP>mBJFJ#_pOv3s6&j|8$OcX-`!?Dv5=AS5xNezqD}hq#uc9K z52y{;Cj4Y7Xvoe_Pv|r0BLEQ8oT^QC&0V}6BH8|OvL>DV5}DRyT^Sh#pz6!q>9V^# z=fS5+`8QUAx0EB&A6`}zccL(1{6gOvYlX3T8F+{kZ}elkj7!bL%#37JBFn{7EDg`e3cv9SsfBLe>n(`31qvq~76FNm zi%RGHv~Bt4WDw?@;oC;8wA4JuFrbN8#7%_5)}IvaAk>Qu0#Wt|)FrAoGbsrNd1=bT z;sXi@?m%O6GDz6jBTU@ity+3HNwM$kY_4U~i0wnQgToU_N=BP!tgNFKf?2uj0 ztQXMmZ@N^MHDp*?UISZjWiM@`=*(?RJ0~!C|M0M2QSlF;hpob@#|Q)U&r0AVjtrr_T&Z!1zpI@Q9J63;Tk2gW%|0YH}JXRvKEa8hSIPg04xj6Z|icp=$Cn%)0qb#=+vXogh zJPjJ}FUMBL0lboFbIbG;@iHlyO0DZ0^B>*eVmFg5rDfvMe<*u2H#&3QU7RdtMWeYn zy$Lx&vYoXMj)qH1BWH4oj-w_ijvtHe&C7mpy>Xpp{N>C4WmK%Dm`hW!L1zXD{_}~e z@)1<2wJmy5qmz(Mg2>Fz7{ECJUs&tsO<2k+h$UI>Tofth()v9l)iy3qD?macpA+Oo zV7g4U^;L6JKuT(2z+F28ZybqS3aLsOvQdtGbdm_ZLMFj~G_EGf7Z^jg3o9#AI-)2g zdISSQmCtefS4GZBN(3499P~Lv6yg-_elcbJ5! z(7U|%Z>wiHjlHvL4@U>G7PMLtH+|ICf4flof(0Uy9lyn$tspa9MbZeop0p_Zqz_S4 zYw%mD9#~3FLQs8J4NrcU)WED8ou{fka%+MB32nTnOZC7A%MR`Z_NWe(>hhd}jNSp2 zmcfq|0fop1dq$0fi}PGfg(mGuB`rDz2_znpd{mWWD^F_^^55|xAlVm1hiCb z$m3E1Tf9ZNR`kC#l%GkGD1+_J0&Wmlkkiw9Ej9w{b(I9_yEtl~XP;Yhb>{dmr57K5 zJSGcp%g}7pf8bQgvbQrcyf(ws5D-x8ZS)E%Kx(O|7*vO)xtb3jH+uDUptMvt$SXHV z>oJt@iqMU%0$lICn9v=H0iU0px_kZ6@czKN+Cn3aWyCi)9x>xsCa?Zp_OANzCp!;} zL;oAVEiUjKMcq{CO&I9QW^;~yeRstH_+*(jQ&>iJ$Q$prTx8Lun#~bKpr~y%?)fog zocJQ_Rqw&@j3%Q|)Rr%7uP+YF@6wHt7W~G}vbz55vNB62Z@ne!{&nDVr;zg^_U^)} zUBi^Q@YwD4eSIDj^1W#+Fd2IhnnKJbf>4I7K6Ax2rKQusQ*1a7d}?!U;T*W0V)-|X zT>wE$nY{2u4enQPt#dEETYD`2-FuGBQiRWE=S{<+6@m-~%W`^ zf$&Z$R4{vUxnD5+dPg&^J4tJ~z+?y1XbhEc<;oE@#iTNH_0L2~us6ktzm=Eh% z0rqVNy_WUGo`#Cgy0}eU`kCnOS}$yh*!XW=nj9&k>VZk=EGIb2LNQq5bj-yEo{H%&7f_f3B8VO|Rlwu8g`n^Y1hF5jQn+kIV! zKLfu%_*w0MT}2TRASG5}q04hR{@(qis5Fa%l@}I!d38?O` z97SvpMg>9-c{O@)^gO4&K&{SfTnRwn3 z0I48Bk5?$md&!f`=Jw|A1_p{CYy@x5)ndz50k#W}twJDlL>2AEh4L+kWu`t7e%DGm zY*5Lk8U(nGzB|~6@&55|gJMbd5olRV(xRb)GN8p8`-2(ZK&HZtt?yb&_Ttb>z-46y zLPYw66xFnKla7vq>`Sr~)#MT>`Yg%0_=rFb=o5y>5tdTwaHUj1SaP$X=MMuzC^5m6 zzdY6505St0W=6z+JMLsiP9F33L=Jwvq^L}hnl0}uVpR?iw>A*hY{8CmZDFD&dA)pz zk%q#U%gv;1*rn*CR#uKIG3Hn)#c;#zs5tX`t4A_!o>n}*oRNEAFc}&7=)?(pI`9I; z*B1mwE4rxt9XW;N6%x6$;Tu1TkAt*qN*X0`z#t}GUEvRXp2Qt}U^7|&QzF#Qe@lOB>y&{bi?PbHGcbhEkf^njy^+Zf-CQ2g;dMOGn3= zj=dsi7-C>nZbG70g- z^3;*=9qoYJyC^ep%0*UA`0O_RK1FXb!$GaE^BzoK)Z~@+&q~O!6mo7f&mx@m4(XQ0 z(ywr2_mzQIWo4bj^FunQgS>oeXE&Evpur6BTX!!(}I6Jpp*r7#SU@2e3?nqloP-_wY*o~UK5PZK`5P>)6HK?v7lDkXd@gmj%7hWG+ zuIm4wt7o+#%tA|~LTDd-v%qT&vkX@>e^AY6#pd>qN*Y(!F@UmYf}eYS)6D7Z>vhF; zUYG#P{9N#4w#t}s=isaA=Jkv#VGMgscn+Z{98_1Lp{|RLM&kbHii*u)UwvF|F3f`3 zrS4|lRJ*7AjA(RElnJ-Mhk$`j1w|qD<@++e!q|l)i9#-nU@BCfVrh{bMuolXW*1wx zh6KzH&UvBYe*2UYk(|j-Js62YNKW}zDp^pgcTsysfm{7(+UoEgIR5?D3y%dP!0UQbR;tkXe-vM&oK?|pkvOjP38 zy);8>6!NcTI^|PFd^T1wvC-DHiA(dI(8#K_B}yVu*WFLAgg{<)*&%<=BBM{A*v z;#*`wWTaKDrj-;hk!Uxv7a!~jss1&k$dy&}RX!zpv!Ka(p)C(bh=^TLzBl(uXx#tG zk4ojbBO~^q=Xz#hf!p?*?rmYpUB19-2@O-$(w0`V|+rbG# zBXRen*rRZCA7%T(r4B>QjhgzJ&iez26VAXW@X(LOI9KYYG;#1V^NkNhY}~k}z*|1{ zEfSRi;%_L$vyft56CeWwhVo`_^@K038|Mj85R)Wt^MEG+8+pgNEy2osTPnKh6C< z6Yu}W8OFn94n3O>v7*n_TR6m(>@BgA3Q(4#(K!*1-|UDlqatRu0tVL z>;82dE+E*k&z?n`H2N&(u=%xK>((}29QII_HPasqtbQ%e%*be3^*&r=PllF_#=>sy zc1ro?Eh^qoba~Wi>G&vVnWte$@;H0@ypD9x(E}b+w;{5y`zul8bo@c?;__)CWRgMV zUH{9{$lmdI9&?DUJNFAO=9HIj-c|m@uNxtqnIEX`YeINgh#xj919yr|c#WFnZP`sC`DfSkmV+KkQD zw`;iU0>nq)5p>~ZSK_IP=^yUZ{oV{y_gKgQzNs=N{dAVtPE)uXLy1X z=PuJ$ZW?LRbRT_@=|S-A&+piCN5w%4j2KexD5@Gz^ZZt1I*Fm(Gj(?}b#_!x1WiVZ z@JLr#A81+-TK|{W%lFFp(-k5d~>q*2nZ>p zSKevuQMM=p@hf%bJ3K6x-{`O&=Je5=;E+=}WmN$>>d?+Uw-r}k0nb-_pW{JmA2_1v zu@(CS@cKAbarF83vw>A+BkHSbC=;pmFM4xwCCAAS{GT*lb~tWILZn5^xDYc#+*9o1 zy7>i+*t7EHnUx*`w8)96tob`ms3<#;_gub zgEKD)q^y(OCgok8NwBdKhh+8@J(7ainS#(Zb146=Eb(TGVobQ+ru#wrLzct+h~0Ks zmhzbd&&6zYdsqIU;J`aQf%2n%JLZSyt6%nip8I?OWIsh3ae@la+C>pY6bwN;Y#hVy z`P`u?mCzX@LGJcNHvSzSvzK1aXuvlxwz`y->QR1W*j>Y$S8@ zCJ2^ZAke|4_Q`wBr?M>3gT3#RWQl{z(zbL5ALZX6&$?LA8 zzE+fk6y(qA5a4tFH$gmWX56{bc@1|V!O%FdW9{XF@3)Qiyj|769C9(Hr7d=6^7lDH z#VX+hsCYh

_p`kT>|~o^SiG%ks|u4R9n^1-EtA^uwn##o{PB7b@*i7F;FcR|P?6nSl zbb!Ig)R!9@?|qUgGaqI*DgzNcS5`L+DMntt0e;`{0nZfY&r`?Gt-+ST6%CK}iSMc` z(-1fLvj%;a_fu4#`h!#m8JtAH4Puc7W%}Bv*$d-LoM` zm@PX&3Q>ddNQk8HqwjF?UIe`U#|gZH#dflAh|CKA;)w;Rx;37AC#9=Z${iIJWXC3Z zH<#mJ6IbdwAJ8Bn+MR~uLueK!L)xF*dI~oRDh9i$GYRe_#SJgqWbmJvoJOL4%ht3x zw0k{{W*;&X&qOj2!mLq}{4}6hlDa@8{GAY^M|keZVVSh?C}JX8m&j(*_7UAziSi&& zan8#`dW2IhX~o?nOI=Hwk$;KFunHEm;?o}U4+QCJ$rrOq36@j0qFdAoaGJVeraY)WT5?MP&wOhkhu+6aW zH6vq)Ln_PC8SInd!W{DB1}?FAo=krfukhf2pB7A25@KK&B0&8#&!T*Bpx)9@<#uJ* za`xhHP|IHW9!MJpXWDlaNZ9XXzR6nlZ#1fd*Uj0&)b*4=CZU4qU}yXR`vH(a>2KzN zq~cz}5K5ZC=lF_7zxXnqj61)&jLKt<7uh;v-Q!Za|A1h68rN-{`jpWwIrX8<;Y)}k z$dTCwV#q|u;{az``;tAtHoG6KQeMs8%|PJ(h~Vd2oM5iqK6k&XgPI!Doa_)7r#8FI zO(}b~`)k;{hQTeA7un7bj)}^u(@8z%y@lxD?b-%NrE*XCzOcfjto7=9gq?8YN8-7t zqnmdAJA7{JwuiVO6Y+-0TlT4T_=0nHtCh37SdbuPXGdHb8L zcNJBIc^jW+_88ot^9K>Lww!Z4O2gbw(HOT*i5y2{DY+EN-#etPUEQXu7vYJh-#HvK zLjT?(7w+k(TUGO<>mliUs1#x*XLQ!K!&C`!(#d;;vra|&QY47$MSI&Pxi@%RkDmD% z>?ZlQk_r8&FnjXwr?MCOfsAT@vI&Rh^5g!9@RQQpi{9s$!OP&MelrJyP;~gJypx^&i?86d2U}6P>ks2Mn4(WPO{N!#OUR zCpnc5HQ~N)SR@Xi<8ZT7J^N=`60MIwE8atAdBueG6Iomlr3HFgH9HZWA9sR-7o8q`n2u%iqEJQJ;g<}6jF*nw2S_}LZRU4odAM?$ zR-8usY4yt6G0jS_P}HU5yoJ==@2uDIsl~0-N3I<%hJ(e+bD>-~eL`gftn7HUjH=J5 zzFY2gz3*vVyUeV#8?n`f?25<4f4zxJZVVZ7(N3cLkke4w0?nsDJmoChed5!s`fxf= zLHM&#RF#^)vMm!;&qDIYzub6l8<*BngW;t-AiyL7J%!`dv4#wt#MH62)ISWfjyB;Q z@up`;`IZ49{*&X8zjbMsYfSeR^hZcYZ9bLv_P_+{gLT?+hLutdO+=aDw6a4%Xrd6@ zBN+SEB+#n(PP8=FPO_77nt)=BzGpt+HcR%cpWR)>#t@*)opW=Jx6*A?xlezd~&Hd{`Iz=i`Y z`$lAPl%<*<8H{tE1^t4Y;jiKzCoz5in`ep6U3I8SMCIH#XT142mGgqFGwJJg$*UNx zUaF_}0fEQCJuKalpE!8%HSTpVVW?e*pWWjfc_LS(rx%d+_dN{(kEKEPd~!#JaUQGm zth4DuE|h^OS!2^5HogaomDvoD-soBA{YaO4AY{mfo4Q9Wua#$6p1l0KI!=^MJ~*4Q zLx!F~5%Q-gJeW-pqA6aTME!cljc`R@fT5{;2+vDeJqoe7eJ!7?Ndkc`$zo4hf}e!| zyjHi1g4JI*q#kqt^q9i8IahdwKD{}P`=Y1|V*1)STz>_A__PiMK1UCGopjZNd-%m#AjHYHd^WCecksC{ ztj}~x)~^PG4+3#}NY$@IxTLgSZck~Jaga;lJH^O)1O_+5a)*E3kR`baY{TR5W+1iOrM^BizVSt~jaB~klUg2OYj>1tku z=L5nmHA2$+RN~7J|G-z*11}|66O~m;rJ}=1lXQ!Pl)u6--*s#b@d%EMkUvCiad=+y zxcyFXEhL5@s3;O~=w^q7LL3zm_e}>-wo!EXhuRwU_(JMGa;_sDV$yMF3le*3O^t#s zf71B|IhJXgMwQedj~aRudY<$X-iInrjD2T5n%^v1rdUEvC*Ay@b8L-I_;+JLoqAZg z1?u@BAb7X^(Jn?%$e?DiA?L=Q^8vlWM-GV!_g&ZzNys1w4bl4X8mxrfk?fwk(Fq#q zrFn5lN708MUmXka_Ab5>8?`vwpEP3#f;19nC zN#3))-tdQ2|N3`gZ*&8>nN4&c9&KuxSdd^Els(mB{OrO!p=Y z@wI4x17)pxk*6n{Z2I?%PdPP01n8b#spIfY3Oxf{&(4CqA!FNQO%;u^0B;chp^puf zvX(Zjg5JKo?8^NLN`YhYpF^?ndYMaJa=0RUbNXtxbDwie4By*)lx|JtL_$@+31xaA zgEdz`&top$93J1WIznqucXPCIl|9G0E}L;Q8BRRUeea1a+MmaA#0I)S?{~lSvo_Q* z*hu%1oRnTYe2`<(07y>36WnJvIf1TSnP=t^b2Tswf$a~I*XPkJLQ#t(CWBuC2|{zCVwD64$^goC#S1y%e#8|=ph zgm`x?QF+Mw=;2y9TE^69ZIDIYn#xJAE)Ec9=6UZ6O}hOQ7t)EXV84Db-$#=5A?e4<@Qk0u$K5x6!s;N@2g;&!a31LZ4OKI{(k`W< zhG1CTzw}6nY0w6+9#uCNp1azp+RC3hq?bC{NYqe)m%4CX^l=w2_CWk;#!O37e-1g^ zAdmZLRh$aV`oWfB=6gTlV!O8_cc!`|rQX$87?3_5xfu&Ke3DPa#cEszqJi;w;O88j zu$#AHqr*)rBJ|9`>#Ffq@VhzKu@8g{HB5POEEEh0-AnWwBF}y+3%a{(sb}* zp>^?_se5n=!SUl5PU(5<$txl0})~#v%?R$gMl&Ex~Qjorqg*S5XRVoVi)v_ z)s78mTZv+3Q6%EekcHRs=V8(yV)oA9zjCN{r+FI6)r?)!N=Z&u%|YqFRk#w=_Msl> z(Q1tHo3D&H?8`CieipB*aPsn>>_&=w)Hi0c@lwRodTafYJ(x>KPQcm&hbpZtHV;s7 z58HFT*)UT}l8a{m>W(`PJer9dJX(^Y;dR|HfM5)6n@ zrZ@lN6vgXitM)@n_+AKR^AZENpl^+dgMm=;&mod{O`NiN_DSf~yGgk<#o?2ncJX{v zP7GDfx6D#OmSU1*E_PZEiHPwq^I?(_Bk9I1kIM2TM1FN z1ao|1r(VM{hm_+F?^p%D+ALp~aFD0~?)WrwGB8qu!}yuX10jP5WOm95VdtfPB$dms z?IU~ql1Gal66K*%#`T6KrAe0$ez)c}5>&LuE)E6ay4o7(QqD=W{%|PD|K5V%SV7L` zO3X*!44|H5Af#@wSw-8Bf{ERaA9dom4|yLRz4RdOrj__%{&T6JuQ>A0EMEsnwv=W( z7Cub+8+I)+(qUv2aK5|^To-c$4I8%hn-WSbKI7*dj@KWXR^E!0JNlvGL49B*YWt8L z*N1g&Ho4CD9$8;K`AzJ%%xjg;B?f#HWu=6fwn4_`#iCepd`RfmNI zRGu+9Uj_0kC9#7v5h!tDV~vPK>nzUxRQ-w4FU(tL!Yg&k@37!+PDaY|A!~F(HiXJ{ zME6_2AvACRbEI{6A}ZDx%7H-0X;wzQ`aiJ%YB?n)k+M_>)C8e@i3!o)1!5j{Yj7aH z!K$f*MC#P(h32hhd`cP3?s>M=HoJoNAp>BrO5dmA8aMTN{C|No2-r`ZZb(fYY-JyN+Fup)-n8X`=X6Fy7@;PJVKk&76b4hTQCcMJwGKcf#NZw;~ z_&0`vN94;&;+k+U$_AcqwNa)02PD^rL>eH%NE!wB1B#JXo~M4VbfBe8+Wn~?;_*k9tWS>>DxsA6grIRa zdjm2>#BHDaM;%A+5`OQ~5wg5TmW~$6HbOdgicE{{xc>$KpXG+OHIm}1#MYJ0gqe$O_wkyA~(!F~2Jse4o2G}*oaKxOTzXQ`pxk1)gcq#*vh=+NAaIRHY6$!pE2 zd`&~Z#OyyiVX^k%h%hX})3Cjq?;Rd?f@>14g;$Osf^$R2?MYX{1HXrD}1 z46Mh4wwpf(OmQ^ZMy}fERXXRHYwx>1yo(RH)bBx+-F7J>p+Z!xwRmlPB&=rCqYZ;{ zf7aLU#cuUnaT}4(1R62GD2lcEv!h7s|Py^wXehKC$9U^E=9caPE zW*GHdJp7*U9B4aUL6buDo2~L&vZon|0Jh}Tz^#BZ{m-k=khXk``@dcVn`>pWL`3IH zF7)!0Keg#&F2H~qA7K0s}zGLC;@%#6Ghams` z)zY_L90mafEJU-hf1;O2j8A*tYNQ2f=4A)B0)Dw;iNF{(MS_v;owLI}@mv;X@roIBIs;KMs(jZ7mBi*eaA;JZuL}}?R>5%U3E&-)O z0i~t8Qv{Um2I=Mk7w+49-~Ye&#?ZkTaL>7CpR@MbYt6OxoE4u^dgVx1oPrZR_0WFo zR~&i-0+*y~)>eD#Ri|sTVqg#yh)=_#MB*mMp*n#OT60xGTb3F6?WQ-!-};=_{Xl?b zzJtGD7#x@PDX+2QNaN-ULzoAd?Hv;B;!XEvg_SV}RLurA7NdHyYArk}kLdA1ddhG) zKm8OX<#~_AqM?JIT=K-U8KK-VcO>L|xQzs{+ z^Ynt~%=ie{D*=Il#a|r|rOsZ|Fcx%3B}u9VI(H>^ZF>63+4kB$c_q$-7&6Ay8GBKY zoNQcXGr{DPYkrwrp%1ir-0hGTe&EHnJ6)rE>+JsN=uDaS?VY?N%iOBiDv{`f3bL2uIJx~6cdJvVs$Dcz ztX0*h)iDFHfml69Q^U?YOnYBP3~@R+g$BL)D2Ex{ZJ99nX}(S?aQ*+c@OgLFdR)-b zJ0`_d2(9v&*w*|n0}kcULN|jn_kh}aN3?`~WJX;GQj5&j>j~r@1>bE6W%4f^0UBST z%h5M<{e@!X&q~lNC12)J+R1cb-nS(u&9#1nCO?NE@65icLmN@9xmSjN_^rQlO!|hV6eRbYkRX|gMTP`5-y72Ph$*A>f{}1rsUL^r78S`7fl3alL?tKh!#QL461G}( zF_{YTL5oHK1{M7~>0}^($d-* zM@Ve&m|{cnzePu0sY>J7=Sdd4Mo;Jro;mv&(dMFI9!KT^36+LLd&XuxGE@H31(U=s zhSB$YtArB$kFX2a%lYqzqYa${|MLv-JHyO}2Od9r2D3JT%;KQ9JMdV)6k+OxAa(TJ z9x{}nqkxpfZ)O?;$Y*L-v{Msn&g3~^f7Z||Yh2~W(Y7S{?=wK2sk9}JjE|R%9}eYD z!?w`p&ZHqrc+od>wQMn!md1BtXJ>id(3>AhwEXk1^7ZDpbEGe?r_*~b5(>oF)_<$S zW4x&1i-uuwxD}4V)5|=wHw--wx4;r$`T0Q` zTU+^n7Uv{w2m&ckoxM7(hFIVkP5i9L65V$$c-k<5{_CcGtQ|8DraO0i%j|XY)w~E9 z0WJo#lj5b99QlX^&ntgz@(=2=ZXXH!5EC#(woRUB zf6Y%e6j*Sx-|>Sq90-2P@*h#rgLVwEK>n$qt^kE&*&n*QUC?7~`n@XQdw0NG6_ipo zj*+9e$t+gev-`2xZ%xCJ=XkM*(+xZ=te5xz`d6N=MD=Vnm!rgH?73Z@F2?vRfNaIA z0VxR-hYONG;_N#%X18`eD^lvZ1xS z%#H;RE=T}PFG?KJ!&zjG&oq8b1Ni=g~2am;NfJx!YOPYm$#F z<>^p&l9el~ND2nyw-SN!_Zy!+<=GDsf**9J`|zV2U#a7}N%W(e`GRs{##IYEQSof9 z!(Q-W16nRFxt9v3f!R@}axr{k?b~;(I+!M*pEd#G$L|lZ{xBD^a(mOA78<(I7mR^% zGNcdB1jlvUMzRLf+FF_{*IKcNp*78YE-3+Sl;e0r{&Ka8;e^pvsQ!(M)R3rCn&Sm zo%M{Agn6I|kEi|&kF+;xhO> zmV>yC>8%k4Z>2Rc{pfGR{WuL>BI?l%Hdi_O${=xkB28R;Z?$$^?ne=)}heH&aEz zhd1G$Bp-o+fNj3C>!}J4vQox>#bEuhq}GoTjNr^j(>wgGXz755Ay{Oa{EXJ?wsq^v0dU}W0?@Wtch1_*) zB25Aand|Ksp3_ol2FLA7c4AuVV{GBqS>28z{4s+LjS>x3?ybz+*_D`*+HG&3F)lg>#CZjO1Gxd3Y&`E(uGsM?M*ZdI)Zies2B2nBz`totcg<0zD066p29{Ke{pv=%1aACe#)K;_3xx=Ct}#{x~`px7RjZYcMcBcUxA7aBlb$D1wLeRv1BodUWn z932zSr=72vc=p+KX^~GwQ0M1v7>0SI+%iF72RwTc?hM(0k`3$A}x6Di2rpMPvWr>!Chk~rf3Ns-t<1-u?!`szk4 zNo?gpzRnO5T6H2Ev(xVK@`ml8Z>1F+G=bCiWv>(Q^Gz)DuQ9=7h-rXngSlKMdc&F* zIHg#mHg)na9)+XoT3<`OgpxkVM?{*5V0g&<1`*%dvDH@o)hSCQC^8CNvKaawTsddD zuZ39WoOA|f{mQC5B|*rYsQnf(-fWF~0^N+6x>gI>yWt=a2d*3_%gfmr9Nlfph7K$% zLJX%*a}aKlY{@=;{zA?wqW8du1L~eCu?vM|=(2cudJw_?0-lI1)Hb)190c=Gj=db{ zfshfMehuo?ss2jrHb}d6>UOql0~}`yh`s4Q{#&&)rthdx~Sj^r^bSrhv& zG%W^B|M~8ImPW~H&ry9n$*2B~$8El9ZNy9ie$J1=fc>6Q=g~eSNwYNIsW@N2Ks9g^ zBM0I-A^Juwd&>)Wg(XMGL_s>ie$Ti2rOIY<9UmgLBoKuO-QJ$)Mf|&15X!UaZHqfX zD|nstHO#0%4^6HnPYaUuml!2$bLSU(Z}8hK`6eNEE)}H!)>TcS-t7;$RO+k;nemNy zH!yYm4dVYniwu3!ypW}^+P|<0xarMgnG>~iDLXf_Q`rlfxAFr* z!AMQn)Cu=~LTajGWq&&-#ybVx$BLW(v+A9Er`{O)$}TRBcxUzIrudO+tiQ);cnaDF zeu`Pn7*=tR#fIbfr*Mj=Ky^rHc^;0IMxl>La*Z&*#`b+*Ga2l+({4yu=-{oS#1YEq zL6@Mg6F5IV&y}u-_t1^yDKnG`DQc|b{mv~1f~yt065O$bYqWBZq>pd7&j;2Gz}HFF zAKYJaKsym^&Fmaze1y>!;Yi(vS-f*Sm`OtfS&AA}4IKktMK3#6!No?`h>miOjsjF5 z#upc3frXu4UefDJG*@+2=+Cy9mRA_y`=-8> z(bh=aY5NQjvlXJZieaEn4g4${CwD`|f6ozb7>)D?V1oG93|xL8@I(@5FpPl{9KDu+ zSE^^vLd+;=M|AuOv2#JTWj>Xfl5l2JCNgTbNO9bfsmMZMY8vP#zywu25tAI-Dv86I zj6vzB!3sd>h;-LJ;X@(mvir1(_m+ZE`YKY?Bf(RCP48RSn1bGV`zh=NcEW#PGYbC* z;EuXXZpnX+&&!g!AsypE`xpmDf? z(UY1g>&eyQ-^LF6Wh$|Nl*$Opcjw@<3qi7kp3)`8u9elhKXYhpeXFsU zTVBo$EQ2-}e}ReykBy#HCu_rEfvN=?9+RP+_XPLe{n4X=^ZRz`5#-_%JO{rKZqyTX|Iww6ro>-*bxKDv|?dffbkK^q%pw%QH6xtK|O7PXGWdS7gYp9R_#5a4nO zIWx2R+mZ35^53tHRA>kAKOh^xm}!BI6{Mr#(hYL@XT3YpuDvb+{Kqe8ZN>ehi&+m! zScx=}dQpA;o@acMlao;xV*iumPbexrKstW0P#yRxDzS)WZ}p3~{C``I(B}P~>Yo%y zyryNXgCL35Ag(R{3kDd*<(d@z_+c{>mE$PRIid|t|3uG-o$#M#S4=$6$wmaF;19uw z+Jih~qQPOubbiS5+AbqsUYK3%PD)6R0g1BK_Bcb&O=1OpE3&DCdD8d{F7nbalF$!G ze?U8{dGMzn*>sS~k9QU7#1KA<-{<$vi$5*mcV>VLHQ=G=Q@wl~wy>c0XKE@eDTxpw zE-(KG9+~^XW-0-jlzU}89xC(U12eNyc1%i23Wo+N7rW0=_1((Z2#aXp=y z_U*1V->_99+(!?tr?t$zdq{k?DQ?Fd$3wx%?@z3ep)%(9UXtI#x1rsePR7e^zFKWQp5oZ} zD?}0xq6)9^L_+|hA_ftQ;zna{IjSub=Hq(*YWP628gs72laEhNdJF`0a@m~$Dj^=d zzpeuVbNf{YCNgHQ-D4;Rxk>x7tX-pu$^+cI7#PG8fLT z{p_7X>Z1wH7o@xwsk%mTLxH%86F#@@kUx5+?;$`s2Hdf==@~~q%Bi0? z6!W3=pBkx0DdkmtN#bhvU7!)u_+YMf1IU+BYMd$*TKpMaX$0Iic#<>P}BdyMLf!J(60qUl5k2QpkH7d}64) z1eXkGbA1Pdya4ki81E=OdOdg)7Ngm{7&JZs`}?-PKJ$em%@|GtY4sBkKXY^Q zj;p)Xrom~`Oq*AZG2GFr@5$Il;|x{|K|6CB-3}&@!I@Ho`dC; z4Glu)7Z=7qdfr?60};xQsAASxwVr^ zT2|4YZ~v%xFN_3YxRVD{B0gBJV*AHGfsZ7em+A7qy#P+I5?CG_BANZV=C}V)3R_`e zVMzV4BV8RPVB<~16N5qSNpgmUNNkhUp>9s56G+%XgPmm zwKuh@dPg2Zp%xI7DV4&hL;LSc7pwtJf4LAb8X1ovj_1duNvL>eu5U}Y{0fbLE7`be zM~G5;?a*aH{iz?YbHXZ0;!oa#;YSBSbaZGU2L8gOS2U#j8Q751ZEePAn!^+MHNRp@ zEOodtSfB8}nyN&{Qk_&gZ!0?8oLdzW-#QoDKK(Z_ziPc3o}NxXB+)#@#l$8o10#|( z>9SP+_^k0DEYY#QLB+fLbu}8xdmKV>LlTlCN_9(vEly6xEd36avhB*sa>Y{*3dHd? z59d4DoDQ6!_Pg&N2I*}&~EP$Wj$-xdKWn4?ju}AH_ggd zi-MN5?t_F-2uDCZogb?uPQvge#dGAH64!PH%IrITf@TCH2R4{vkx1M@b#Mb^Vq)5u zC{d&9$3Yq@6%%nkWIWp*)x2n%t+i+KT$$xc>R$jyk@0_{qnKzb)h)q#*u$TXqJO7P zKqMY)5-_3V12)Yb(>kN-SCbe%1maMT@i$UxP)Vfi_d?(M4fSqr+v5pBH;%Qq>X@P{!m@vP ztUdfKjF(aXcFdN-oI zG~c~hv)+|;H^e)2I)y+4d34BKTDs>2lYn zy@^yS&+EMP4rm$~@sfdmEocP)y!mxG(_x@K2xKNCY>-sOzKBr@*mm?p53M7w}IsJlAau6ym6a2_0#K zVU~A~Oa@}mh+hZl8NG+g)!ytc-ZQ?DNo6$N#H(q@)A|wZu366L%1z1~d(d0T63haT z`;Gh~sxkCjZ#j6jKQ8o~jziz)A-~{mProo1%7kkEdat38bbYo>a(rc>B98qZtR%)KzEtj1Z5B@6KLxW!eyWr+G97d7 zrv)A#cyw!S&8?rZO40`h1_BoC!xf9Lh0qssnsWxtl6u-r`*9xvnhii7-vz?w#GD+w zxzzQCNG{FLkF8lT;mO0231V1W$fX#NKu0=i*R@aQwQO#`9Zg6GDmBZ|HNWlL{()j{ z$@S#|ejwmNg}?qSH7BK~s#^vgfhLU+eewCF>-Xg=x5I@ufD34d2wJ3+!whlU7$9K9 zir9+!{IEua*E=xYqhgQX5_RQ7IK8+i;3<*)?Sf9X*wZv5wY}~{mto8pNh2PHHlVL1 z=Mn^qfExIVUJp(iMiZ*P`y#cKC6qS@<#>qv2p=N9f!3>~Xdr>Ho-Xc#hAs597#PBW z^Z>(mGu=QZ0hTh<0PL>^l$+V%n(zgeqWmY`){j*Q=ZV;n)m_mGo7;cbXlh->e7Yb=&OCMirzXjj$DvK5#5BLMS9jQBkKK|Y5UFsyfj{i) zw_R*fSGDkb#;FI#u0DZkcpkMEP2I&oI=SRUWMLxzNs|q{_ozr6Ng1i9QVA0?*>YECYLq`MMwuaI(KNNWjFnd{#A-XSUL`XSr z-$f-nqlh)@3_=?i9K>q;&Oh>t^2Imt)C=Ih7!5tRsEtH<;JDy(C^>4p17p)^Ma2S4Z)8eC9uT5 z$1Xw)UtR=51~sTuRaNt&U`R8$=T9rze~qy(IvuvN$oqXCx|6MX00nABNf+#A#DpJH zzRcIaVEwa(5l}y>3En^818nIWUF|xT=6U{8)6QgV{e0(eFL1%nsGRwv!<>%#`tFGQ zMGxN7;T#y!`zPZ1`uec$5G)nl5a2Zt@~b((H}TmoG)T-E-jgsEjLV6^R)P~AF`}ao zLu<~w8$800dwSyAagSC5(qYcM@1 z&`}zV@T-Ykz^JIQ9o;1ASog)nuizIiRBqKDuqaK6_G8kEho@RyT`hsYeDLMPH+#A` zL7WxC2B=sP(&NC}V-dfWM2DTOaS>Iogo=L31bhoegtjFYR2bGf?vv7iX2 z%DTdk7(TK};6bY6)j0#cU}G2TIvw|qmO-c<-^)p?w^v`^O(F<%E!%DnMaF$6dqV$Q z?uytqon3;Zrkiad^Bg}C@oa*-Ar zpZ0Jo>hGTP)dfZ){SHX+K8Fi9d?=i{UzJRPG-+wcSu-CaRxM!vJ~J|lU%tzt_yc7x zfv4ySh0C2pf0X@Vhyz0LEz+P%I3YG`7BGyz6BAM~G6iX8;L%q51%{in8fWCO+l14R z7X00~h<+sa|4^7C`t-y^x@#D~w>)$WmCN01u1U)4(^72vp z&Iv&y4hPI>yQ8pHM7GYA$V0TbbbA!|xjtkO`Cl#aQ>XAxEM$sVFGH2*j6;xjA7Kkx zj`CCmY&{sxL!tpJ=G*|$gzcKdDGs^~BFBXqiu0kUPTp_OlpvqX%_DKsu~xdnR)(r8 zc>`@jJQFa}JvSl>De0g14K)&cSlW9iR9R+0dkF}JL;9evU|+j(E-;S2HXSWA5~+QA zN9UxrY^78oPCu~h{V-c!mz*$Q939=KG^{6eKX)sxdSzcvS>si+XuqwVfQy3t&l3dPMU_GBn#HJYO=5Xpg8iULu+~(G(XMDuC46H-r-uf>02`p-;bz^wF$n)Qc(-D*@ z7md)0$x`RVmn*-1L5xBY`4rWCUJACOz?BMB{(6sm9p5fE)|c1jdvd;eXa-)dK)av5 z;|-S&tCtv(m+!}_hX$rkn?xpW4cC@$`Lo2vw7#QC9L2W2_}&$Ks&*(hYFwP@Uz2+x z8)x_q4t!9x*M&7EpIs`ab{D61bqKkjeI_F*YVC?+Z+vLkEwJhEyrA&;x13`QV5R}%{3eZ!rHPMK1unUTguw@lpPnevbL^o~5M(;Cq* z3Vb5ygLC6LD8v8YrC@kY&*wWH{mwu!dxO?8;Narx^xjFIX?&v5tbPqkx|TzwtRKRg zd2s@z=r7^|PaD#zrY!#L3c+P&FMZ*`nU*KuPaS zkTh;F8f!Z7z@`%&$OFM9YuKJ4;t?ng=pAy?h5R=mEcO4<7dLJA0j?gF>Wml+>y3an zJK)$ZR*|VR-&W@D^X7?^0t~};wwkF}F6v2NJWV{9^{-a+z|qkG1_^sed4>L7s#kO8 z?a$+d7E2~Rc0LRfaudmi5*f&m0pqnqpGQyzOD~4PN4)pj7XRLgq*s3HSLEzms$gVryz0Ae%!IqL{uvK4@~KD4>5_1>%bFfjRn zA$Rq*(@Oq`hZbu`83UY~q+*XF!p7!dEjuG(S;j@XNJ!<@mrqK*{`jFtF)K+_v7uD@ zVX~^~=>k;10>F@xTel#o=^_>e88TgCTl~a(*h5p@kmi!bTCAOA!;YlsQwb-h=XI~D zlvT2FjFii8m1#GI2hztM>KlesU53knrDA%@q@P>FcepU_??q_g@?TiDY0Y#9AY(xX7J{y66PT=d;kgy=((jb319G+{2#6~(276~ ztm`O#Ko7s7v}m%9{2Z`OHm=f=Gc;VzeYkYD3T1IkO-f2?s=U2zliPt#wddJZ0@OS2 zf+b-x9DA2OSr@aaHxC06Gi*!qWVwK3t?OAaD5OkCgM40vLP}oWO!evk0&g`t`!nDB zvVQonk65T$hYIaPE?`7yl}w89q7sFp0sAusP4+-K4gvwVa1<;hDhHt3kd7cUY>0TR z8;Lx@;4Ke+9f%sd##^=>iu^I=(xR9e*D#DiM9JG`1VFM;#lI{k2`WDoQhr~fmCVhVRH|XciGLLP zl^IM+C!YoUEo$q&oHj@_b5$mi|JnIrG+RLoX#C|qgPP=;^lv&z>%$?5?f-dv%Fgee zfm6AeioJxyOJD#^eUx8_hVE+Pdg0EN_X($rvgM()gd?GxrdiWF>KMk$Wzc=x2`ZoTERk7?4>FDrak!f4aT?ju)RI_^o!`&yPwIkNsv<*Js<4&wH9j%*4ld z3cArG$(Utm-rg*KdE0d4$->-LMrrUv#gsIJq|g9TMeWBU1YfdyevRSh3{M=4-)cRH z4KR$j=lF~miNCx;r&I&|qiHN={g9C_&NQ?7*Y^q6(yCfomcoF7)U{?i&)6eBK9>gK zl#E|s%FD|h$ZOxltIdFg1o7oGdHxFfrwT^H!alw2SYS_o;J?FlY>Fbvo=s*HSGy|m z{$0WkjFfZ3v0mr>kcNrDglBKWv$EWAx>s4K{34F|2(Ldk)y;5jU*!B&IAmf0AG3n{ zUB9p#a}1TNgFN3^4~xNM=j5!Jn3|$y<>YM92hFJ|MlQ%}=~_5ry@HdN=(G`Z5ek%8 zF^Z^kA+ewS?sarPVj|F9JKReNs33`=?B`oYpfqlKt=-GMhC>Z+f5hjIUsSlm9W;{m zGG2-hVdLxVn#mbFZ;qIrm5^bf4U4?sy0<!VM_RMMbS+cawjD3Hp1&W*`O#o7M6oQpRRi5q!))Dei%;<@N|dyurv#DRH}7Yb#7jBUr2 zPBv6lj?vfMt#k%YUSD4m5JMRZmx}MaS~5F$Uxoz?o^!Un@!~B|h^EkKyd}LM#u`wg28 z%jpEehiInG@Cc|*l8-!b2&Jq882o%*{o6eQ4`(HU=E#@s$$x&=@=8+T$z#W!cy|ME zfSH6k1`nsE!{dUJBN1WrP*iTOFB;e1KOrH}*;xlt2Y&;_>E(vBtVe$Ak#ZE+U;oLa zUNec{U`b4H8C|pa6C7!d&&U1we7h*9;r25@6^_aJI(~AltZf%&&r9!TlBCfMiC#T_ z!mUtE6uf%Ak$1ilx`SyV*Koq*ch!~|ShSK)pp-S0!$ z-qgr5ZE`G>?NN8?sDs-kG+b#oAKtEP6ZjsKD$%Mp0|HD89M8~ylZ7KOppTK0qG)pZ z_H+>^$CUOwT;KpPx|9}Pub%a2*P68c}4}ZVoUi}%vP|*%3^0tzWKa1#q&TYqjU53 z(8)Bl?WOvGkY_)?!|Sx@V|KBzHW#AbW2(nE#4^K%@Fkz&URd;UmgY^rr-;Z*OQ}@V zw{J>9Uio)b1;aSr4oxf6*#6h{v2OPQGNaYhTW7Z=s$Y>&q}{$n_+{tE^X#swv+o*_ z&GkRFZ>9RdUxfI$^cz=zPn%~-P$(q%g?{`~{SP~IxQ99ih|QQR%cB1D)EE0z!)sX1 zUNPF*-PF$+Z<{zb$Q&4?{=o38kBfOt3w@=gi^55 zIiSV+>Mc1st*?DoAkvTbT|DbS*9;P#9I9iPQZR>+>Cz_{FEL~CXbgm4u56<5oD{XGynHc+j@9}Y?X9n&Sk4WN$$dZ?N0$A< zPlTY7qItPR&2!#@&74++0`pZft;T`M=e+XEa7o&ZqmbyLV?G^8>3nX5xGhbB-R6q# z$Fe5b{r$vBimz_A9Q<>7IZd>LK1+-6zf5#;>3`hnJFSZ74>Fcg=(rniwOPFXD8@Oc zuc6!jm;-4duH+<|Vf0VKa8oN3D>cknLwB%@BY2@!lTUEx_G($|J9KWZ87l3jL2(&( z#<@>40!<{7nb<(;Xnq;}0NBUVusj|9!cJ{TOdP zGadx&fH+)kr(ypzw0m|fvxp!-8{^<;@hw)LK;_ z5;GW%QeLpgiKl4RiHVaZ&#ME$Ckvlf!m4@Str>~Y{9*JvEAj4blQ^b|XT#$ARYjvs zdX#t~T6UFQL*2VH$116U0|@%=-%zSd<) z;L=F{hL9TSUGroav8Xc9ylKhJfdbhmg)#khK;UNEc~kY)-$TIP#;f>6neSLIpQ2WE7(OGE;eKHq~eQyXRl1lK|J-$ zT{E7WU&Qj2q$i7eZCLTN#0L>UZ#j=~luYT+mSz2dolL>Xu}QDtF0OfJKEoi|vyD+F zU`BD|;hk5MmED=g>`C6TeZBs3|M038ffXE{IQmW??)abD+>gdw)s2}7R@@a`qn(ao zvhDxbWQ;OPyup4vkyD5+Ixnpy{FXcwY5h1L!=$igTu}&Oo1b|jOv0HL(2cFg5M0^% zMWNN|W`jpf#mJ1$p567x^KxZ(aKhUdVrGncp{Wm9Kz5`CJ;TyV5TV>j}L_an3rq;!K+F)V1(k^|JUezMqWM zx2x_&1+`4)pFTKWe+u$^aXb9o+Rxp0)CJL$8j=4z-|3Q|Bobk*`lTnQkn_bAA8sIl zc5LSAUFHBQq(fFaG}AFi!PU%2;%3NV<%*!qQvS=;`s*_CFMBv*iGQ9nv5s~gl@YWm za?a(AW4&kcb9wEJs2%e+lB4H?OvtY>$&>Z|;;GzOs-1gv?QzoiuK`h_P`PnHv4$L4 z&zH&ih?GqQnd!kLSnut0MCUXkU7=LIZ{=tdACGVhy>vM&i<8d{bMYyq-?4~KHQ8$m zW3B6i4r<>LFxFhH%CClBadrfX)V>c_Rwne3JA0gjEp>e7#0K1>*N3J1t8*%lF34a zb@gpW$am)bD0tkW_c%23HA@l%0=y5N2ruwFcbE1auc+}g&})D5a`rE^dS8|5H@p3l z3u4;Y@?m+2ssX$WNTEP+;UZ5unuH4gJxA0ftyK{@tKVC=rQtINivzybn;y7hFK~$Q z@;Ai!pO0xA<=LnirDtk-DF)2$8g? zJl>!Tpk(>FP@;8m@Z7&UQ9!^#@uv9&3XPSSk$~oj^u^Pg3hH+86!ilsItyeUb}{@L zm6L!T#C5x>`JL*>Q(cnct*^MhMvNolD`VmbBEpwja_2rbReJc^eR%twBIXM|o-7$& zkrC=n#Jk3K8kY=yy>nFlHflV{ITgNqx5rA_GPDlAL{?nCShumBC@phNDg#+Pr2D`BNFm`;O(i2Gm1!18y*Bsg6g0!! zrejTrnboe$Tqa1wq*y$RLe_K2-=Fe*taauSnxQ#xu9Idh`J6A&{*S)=--50{ zQ31~D@s(d4ET^%Svx`q&+M^hGR<1>z7#eS^h7l92^XS0$d38#|ej)G6*Y!~O3*8_O zZE4ZFarxQ3F|O%|B9@OPVLLcD2pumUY4JP@tUtDb2 zaFQknaJ-0n*=U+n^D=UB@)b|94~QS%zXJ(_g$NnWExe|k>Bo#xzg#CadZNMiMy&V>in!@rn#LYNo{_wNE0|Z35YorK^D+jy@KyH4>@cplTjGqiU@uBB_ zNsdk1&F+`4A0}OdF*G^@ld0{v7y}1V$`Bjc$c@={oaZaq|An2v3AmC@d08uE2x&Zxk(p}V9O6ML;&mQZZexnAXt z@$SbDzXH4qZo2jDjchf}rC1ZUaW0|R{#EaSz3N}B!GIgB(UZWilnoX+hj+d)!$f>? z3n)kJ>K*ttGC!Vf$h!s`mRFEbTFk}1EdNbNfx_wwfsCoxM3cM;SeBgYI897OBDi?-HJg`qm=}e?);%M z5CU;^bseW?!wW{{$X`rHwmkTv-rYn}(RzyPxjMU?0Bt>|AKxMDIC;KN_*up!aLND3 z?$7uVZhSw=CrN9<#hi_xGs!5ORgC7ZRUceEBy7%wS9yth4P z`_!*GI>)O|?ARFLAci=-SoS_RX&k18jVzcgrd{S}ej1k7*idzES86+6ZM>zBt2RU( zg|tLr{GIFn5WGn~H@`-kqMHBa&#$aZi^jXN9K@rAJNxBCccs&SPT$e`VfvCku~AS9@Y7 z^N#ThkZ}JlDR_}Dhnk91v6cINqR3@<)xu-9Mg&PRPkmV4^{qo=aPzuVLrak3iV;S} zXVaBOMTIUU5iuQqdNZ$c8!f)_g*IGt*)61cS=2C5uCJ_$>Jy>WaQwoilYceyk6+hTv7 z)XVSd(_9cA8V$7Jb$w4N4@2RXy<==kX?yHEp_Fg?f$)-RFJ^|DfFP$gf}WMtsVfg_ zNtF_D^Zr+#I~mthAAR)2AZa}cDY<|9-GM{i-+!eNEEbrybpbF{_D`?lLZb_KLwe$A zF<)Qydx+&@CP^s@ZJY++FEu(_aQdNUG3@olQU(^^_dgNWt+QvanJ&#=)h#`1;znKT zZT0d6)dST6_8{{Ng}!xvo$x zCkE}KN2hB8X1}-;veXw^(`3KnU5oicb`O|ncx&6@-3>?4Y>-dc>6B}z^A!ACMQ3^Q zYW_P~omrTeppBcfzD|GPsH)A4e$3OadjHbWU;T_LKDX`)kZ_Mrv&5lb7S_g9DLjUu z3W%uP8DI1nlHwH(kgw6CBErxNeTNt47dDsRid;4VKTTPSY^#qo=SVV~5o| zl=b=P&uV2O{*KfXWZlWZ0PORvWQ`4C9I(r2`f(U$T)XL=bQIEy+bg6OY1u@SSqt#q z>Htg;!#k<~jw8t3`KNdW1E>(2BggFbVN^#~s@yj>p9$jAsTcZ?CbK%)OkWJ#z!BXd zCj6^3sh;*a;P+wAk)xr;rWMhN>MXp3WgG zOfDNoRrM&y2t=<+t8UGSiHU*x`}@kef4uFjt*cX0Q%%50V4uO3yb+GDxIqr2g6Hx* zdD8l8puuUoC}5wz<%Bw9*)uAa%pMowslo9S?_}-f(tW*r>;-B(#HlIx*!`Cy%_X(> zQOH)EA?FBem*()5NBITkf&HNc(esO#mv2zQj7$3Ilr<}qw5v-y7*rjyHC%n$U;7p$ zG0YuyXN;=IrhzsUveeD$4~626YV^~`)xw4?ha0*|4%r!d3!dc}11)~M=uGhc!_-#* z#nD9FF78eU?w;TdfyLb+3GNQT3GNQT-Q7a);O-DSXb1#%cNW_>eE<7jy(*xfneFMG z?zw&C+;g=B57*pHk3<_tpY-#_-*h~R@R#}R{;3F)$VzV?vxYmEkS*wCht>50hnN*2$Q!SGS*+(K|{~;g&CzcPWysZdV8dz?gfpq9MEmDX3H&?swgJlpc zZPa)7^rE^rGrlDVP30bx+NUAQ!-Qe;(kNkc=i#<~+p(CGwRv8z>Q?DP*L`Pwi+Y}L z1l~+(_AC6X?D{HcH$QJQ2$6934}R(C5n3=}eC47%5|h!T`F0>yKttkcoT$-I%PI)F z);(&Ip%FHz-yOH)n?Onl65Vs@4mbDHmW7wo8ipCoFm{1K$e}d-N+6g?Yf<`0nLG1fapulOus6{F6whD@cdI5qbzt6>7 zZm;9%0T6SMK+q{vGCl-I7bz|)3pY?uRt557fQTBkbI9@6_M7X2*#*Gb-URS_G&cf; zPyi39)#^+KT=1h;l>n6A)kO|~F$-EFX!nqiLxxb%XxiuJ=FD<{x=&3GYvgtQngag` zaL!zbu-`~EDiO%hRr(E47L2|lawNRF?sCYwe{DzEhbas@JTA7jOYm z?d>%+aj{a!WMC(s2oEAT?7^H|fAqOq?9f#>Wi}*F|E(mphjx-jW47ao|*o3f43TTwK(iQ)~gHXb`eYEGzpD6nG9117Tk?ny2bW1`v7>&#YP zq!M$halO5LBr8nhzLV?OlqPz0_}#Ys4oS`(C@lVAjZk{c6lwszsC2%<`?HD5l9X0s zihAWn%c2hx0sp=qbvV{dBcP-GT-6j+Mk=hG5G*5a;cJW`$HOG$T@%Ns`934zbT3iK z`S9ZYkKCXRTv}q95$mM#FGhB6gzoZRBXe~Shz|Wb-TrN}BU$Hqpt>cxafn9QF@A`T z9skmoLPWa2yz5#KzeU`3%fd&B(;=--t7xvD`oB6-2rd&}Y~I;RbXrJL=9O_d>Womq zQacBdGh!f@ArqFtFIOI+w1OiNkcEroZC}OoX>Ne720vZlsO1qcjktc|I*Pytkg5iT z!WOIT^G_m=i`c)geT@4rK;DnT{&L-?Ksf4b_+hmGNBchVPH;6ORKT_@frMiPhy|SjJ+q5+5pjU0=hjzm*Nn>N<2wJMWx}aAK?pQ0)=tQKDFqE)m zQnC|8UNszRJA2io?`pJ?p}cacsO?~sPH)IfZtl+s9coqfOxgEHRw)!U?25`ojpXlR zCiN`zqWCur4q4+W+NrEfc_%oJto))<^6goVL=sJtYfh7_bEgi1{|+E_Q3--x!XX>T zvIf*|>aXYA@75CWi3v1|{hTLH1vY#)8kG-SQGYRXWsFT^lm-ITYNJAWE!=s)C2P4{NwQH$G@Uf z6;~(?qQr2;v_|JMe(r-U&HGlwr3dPq@W<{O+V`{3fs-~pTF45yRLM|Np%%7U|6e*< zuKIzC!JA0EsygG$>B!ChDIU*{Mh7RbBHaY#6_}xYx!-L=2CabM!4;Mk6W&3$MW9iOx0kX|631A4AXgOeKGiQc|j7eEMp}hbg$Qy4`##b8#J@#mo&G_CbLW zYPlvx@?9vfQ6qpg2jLM@I)VaT!kS~)u;s6YfkD?LpkQE2;Q$~984V3Q5y&-1(2VCqEV(i_;7PXLkwi;92^|f{;|U`u5p~fjcICXn!WR)PSRMPDk5ZdgSAOp8EByy-^LdxLkQznv6Gw?9~grAD#+HCq&} zZ@FI!aiQQ-tLbO^x^RQKhoxuaYE4`?{p)GsW2cEqQqoK&{@kCVR6|1!1o-54I>x(- zp(uHsFI!*2bmc~AN`Eo0V%KY&FxZl6z*{1Ve?X|yBJS6xM2;I>}LIrB+*c++lgg@%h%mkz-g*gsAN#WfZQ2Chtw9j$RCGg`DH+l}j%#Gl;}?OQx?OvsH(k*7B96Vj z1aS>OLdza*D|~q=ygztHF}%$-^-1rIpHT>DzS9T-^V!d;WW9Vqji8)`8$4ov?tLq9 z8V_&iQq1^EUWvT!giJcxO#}RTd%zDSS>X-rP5^B#UI=Yh^(2&NA_y8r3J5SJtm|yclN*`Fm1s&Gag)F3BWk}Z zZv5h`Y(JCz#*q2WJZi70xB;3iNN;pf&<0M^`hYh-piHy$InF`P3yS2MC_Ka#wzdi@zpM zC{J?NSVS0JULFt~_@RY?E*hTzC4(5IDd5pnp?t-#;xcSy*s;M5gK zt#3ju2v4#r2sqrr#hlI}5{QQnuQWajF0vJV4{$oNw$eJ+HUeM7Yc4X^cr8L6FoYuPXSs{nX)(d{e6jZ3N(Jx_1Q$_4w zCr7}Br18&-Cim(JD@vIm-OGK=HkPmZ8OO&yWB)h-Z6Xg%5lkYk7GcXuPEkat85wEh{L>dTDp|b|sW>QMt{R{*GBCLebJ3R}V)ad@mQzX$ zHcf4nY7F3t&$NvnbLMgjB&m&yDlV$L;Hy4+DJHzuMXEp-Gix8)r zL&;4Kx=gfxv5;%Gim{F& zUZ%nWG@g|&Gf#MbpywYbb=Ruim7J%Ztc$od@oomHuP2zpEDqKm8i)#cz}0TkZzh;) z_ow#sYaws_bhcaTu#WIpc3J#)Nae}TGr#n*TPpfSOYGR%3pmgRXj-*v32~9!OG`s9 zy~#%>`rtlH{~=6$)KLF+o>9bR-dXF2&Oj&Xt`Nx<$&CQ78f@xTMo#^x_5Ng6M zKX>O}tmOHBXz`)c$2>RjR%*XHHjo#_Y;}Ce&r|4*MPkrUZB30}MY`e1`%<9s%jJnR zJkKk~4{=TzUngUK-GxXD6iO9^RCV>#FcT8>qg#H>BQv~?f#WtRq#WdG;LT@s& z9@Vr=itXbVy@Zot-0(u9ik^K%cv&RqPz~5hv`J6SZZw+Li>W1nwDL`QC3z}g8`hbV z(awYSr`2k%WGd{Q%6gRY%3>Rq`V4H>IBH6Ng|hpOgqUtxHo6^iEhqlK&nCe=dD~V@ ze=T?`5E=<&HcREDaf-xcjiiveq2DjfX$H$a8=!(^$b9_{2|j2R7w$WG@HhOCO_o>Q zyD(=xGCQkuUnI+GUGsi{RjWrug-YInZ5ZdM1;K?|__?bnOP$Cmt-6=END@Y)QXXF| zX|9dm2mn%Y3G)<?!9ERC}e}V~ds2%CM^~PE`wp9Ontmf(t1*_|hL;pr{~G)90nDdSYT?)lZ+o z0K?|#wz*phFya|EGR(C}g}$O&GzcW$ld^^Zv=myYWUOnJ1D+As^U$UyUI6^tw|5o# zYh}X1g%LhAGcyXvlscrsY9pdC3(Kmp_+Bo;@?0CG}NXzQ?axr~|@bDodBS$&s z*_tahlFUswAOA;P0N(1?Fh^(6j1keiU$_RW(1)faM*k)k!Jn-Izdet-^=;uxJ|iRO8zl+O2gW=3STAZ&Ue-BAL?g(!?h zgI|z&#VC$ItL?~hL9If~dOMq@+^>IEC95gzg5*rc^T0={neM~&WbdM4S2vx38!0g+ z6)?}Y3ut65%`kyLrm`00!#pG1n}Xt+s0eww`31x&LG^k8V3vXOt|^Q#JkO&*?~FV<3le&}}N^30e2>Bc&0 z35Yg@Ty_TAtFoihCtU^vMNW(MKoTzf9CtNEDdl|I6z^n$w)@6a&IX>Y14`Iwz&qa~ z^CEZSz6SWEc+i`)Yf83@{=O>Q&PPVwg_Bc`PX=Ltv=Ox>?<=PX9ixbKg#tI-mfU|J z&gbB4)EEyNdU`^B0Y@>Zpeyp|=%|&w{Sc5ZMD841%&rA6wSYo!3jzbKXm+0G78m>N zc*BV)CZ7|43Cc}rXlTqVED-!cO3bEYf+0q3QQ6pF0~l5S=Tu>1^uP7bd9@0d61DkXskYT0=^o z$raZ^C1t9%Z<0+$#;kB*!Fp__-#m#Aj|s~EDvL20qyNzh&H^8Gs?PS(?pRqnD1ePU z!g#g`%h%wD`YkKXlf9nv&sL^){t0Dy9L^z;d|&_zP_|{m`oKPQOiCo{Box!*T&TXm z0awx3&1hmICd~~bQ(Kl!DVk};hN@4*Z{r)dUPCJWA^>G%IYJNIMwUaWZ$%Q5X(d#e z-;&A@YSc%e8jKK%WWk6(eQYClNV}3uQ}x|U-~Wns?zyoyCsL@2bl*%$y?Hx@ob|ap zM68BVPC7P2z1Y-404+3%Y6$2b^S)vjK@~O8NU|pB1l!A-ly-(PxN{LHl}a&D3@6&3 z`jNs^b`Dn5gAiSG8pY-t(IILc*>Yl5gxAS?!r6KwMG`7*UephOXfypp0D%0;*>c|C zTt=lJU2E!__7I^8f;Tp5&bwleUVTPYXuK{Da~C$ZnR{{C2)waLRMhuGq2av&0mwEh z5W8d5&r8SCk*x&y2PY%)T-5I-`0cFhxZ}Tfa&mIU1F0h$mjl1x>i^jB1CF5)2nv>e z=-ml*IYPiWJ0bf%{2;1Z=oID`-mHY=(6L$q8>Tz`zb-jSC2bVNh>yo^~rRm(^12+evLl`b)U@fnuk|Ppk-G z>R)!B8gw&a3dQxL??)NA3+zog_jz+8-y8*4_ZjW(K;J*DwN0>mYUlEfTR=Muri>?` z+%;sLek@=0DqC+tuwA!tvUFDD>_ETj-|lyV=Ax-H_iHc7gi90%*R_wh7jY4S(%+nTtg!`-AJeFx_FRAGkabj_0VtNI5@OlHlcEERDY{zvj*Nz3Caj(&jNaefw_c zG!t9W4@8Yb1WtiB-;{@`Xd=xU5{dGPR5onC6!b-!!ij4HFY>XAN`)t>%NNK_P1g&4 zfi0S4GLlW^$jBfb%C4eAL3#SDyXS*OUC_X5JJ)>7$sF~d&QGI`Up?vKZ!4m6mAf~~ zHKFKGlhoFE?jU?TVe>{nA3H}` z6`N79g85VB0+6VUj^dRor}UAN=)k6M-r2B9|2kvzuti}G(I~UU7krR6(eN;e5Yr0dj{;ISBFex<-5`=IK7qU1omt+cu7IA zukB>?NlXJ*KrAO*eodeC^9YNL6;K)XIiZCbe){`7pL%F^uy_H8Eh#w7Np)1KqxM4J za`_$Gw^5UC22h1cH5!3I_(f3)Ai{oP{I@WfoSBt%$Z_Yi=bY{=t^UEAU!C`bs#G<@ z<*|zY{iVnx2097PHOSqr2a?BDaKDO25wukU-V0om01s|_A?sRgq&CyUj9vJ}+A{Fd$3=a2r6f`+ zm3lIrdaD%wAX1*ybaDLKwxJsCI@J43LP^Q5$F?j1Q8US!@RrHNh-VBpY!c-<)YjE; zrODCj<~j93jY{DD7krD4l=oIjM=zbYP{}+0bYqTtg^!sd?8HM%5_fL7Ls40$$O2%m z$C9a58ZrM}%@Guxx>L;jhwJGi)bOsfY00QyLO#H39RF2Q85y}r@s&LPLTbMOHDy4? zILc{Xs!S+Q$X*A>*-!b;jf4s@4d9j*SDt<)n^-Igcwy8}<@T~0hc-~FSn zno!z5JPsM&f_bOW%fZfm3<2P2I`wWx3#%d6fJ53s;z!CFTT}Mn4nO!Ua~DBFjkgP` zOwJk?fhA*XWViwd@}PH^P6J+M<=S>obZx5MVQFTeI;6!@W4KflCmuW05MA{(!ndil zfy-A6m|olnZAdF+I7;fRRDU*_klQtpNc>cBdoPv1lkO%f`}qN*6++A55|wv8TDU(2 zX*pb}hA7BG4{=1jR^VA-T3n{S%VlDg>UNp^Hnq7C)Z=7Qk}KV-mz6amj3Ga7 z>lwi}O12TL4(o1~39t>IFQu~~N)bQ#Jci2yX?0dgOvUR68X-&+prz*+8R4!y7^P=S zVeUhVMDl*Q{gs^iks+??hW~5TJ~=jM-0V}yJ8x?)ci-Dio0zfyLw1JX_ag~OmxUXU z$79$PIBvBXRSxEiu)n8;m~r(WtEhSX3-JLKQb2@xiTo9`LPK( z4U$Lt7e0bF*OA$@)9B^UMRb0?rJmv;Fd0;G56PzJeAX1@cf))`MN^GH;8#>$5mwcX z^uSdHta_B2J9-6XgDb*Xbn-Q6?o)?-Nd4oO=n4#~py<{*Kz4tg=w_WLd2kW5fa_#m zz(MIpySJCDAD1hr>$ z`K}T^#jV};K1yQ4Tj41gQHoMg_$e2x+f66{%voulK7A7D0FY{BZ&`GHnjx>j(+OgQ zL;ixJ!dqU%obI>}VMJk63*}|0P^?4qlP$SN(bcTh9li%yIRrD#293;}H)n@T&x06U zJNADztQ3>r+b6ig=lnq_Yq`@1Vx#i0 zK}9)T6y@oX#V}i%sQ{!P7bGwBJ26odd91jML$Uz&i!D4^Z7?S%b_T488_$!>B&-d~ zySAM7rmQBu_TACf{B29y+?bS_xqMR69+)9}{9PV`Y?sdB{C!bj@9z{R-oD2iVoSQm zgV427`Q@l9D?WroUpfdOGS2_l|JtBv&vA4W!OFRQW~_8T3SypmmxvP!x1klw#%LmG z0Mn=bX^ytNY?2EMB0vkjm>Uxc69mIh@iZCs zsP#$t@8ajypCZ#rO|b=Y%U}nHj=a;u7ce<$yFm4a>3JcbdCj(01>JA8)9h*Mp(x@* zYcZ$!BlBN-N9+imLW>EECk&X@1Dm@53bK#^`Qa0M=v?}c;ZH|v8=JoNv#w|WJ3F4m zhh=STU64@#7;qts0Q(FF2^rH99hF{oNdMMFNHbpMy=vx><>^YR)t4`Wc`w&xRFf*I zvV+H9IQUCHR}`;nq1EXFR}V-W$tc>?i-qE*B|pwjo12*AJ^u1}=Ia|*tgJ_x0wAp- zj$7gi0BffKCSzDg?Dh+YaMnkpPIAse3{q)0{roO@70rIw{&HZ6#+^D!Alg!xPLiADB^4V|4$H_;bUP zZy^K=2t=u{R60)Akps@u0=qICbEt4j3=MUkQP-{*pUf|$!wR$r3OV!~oBAR~E=oU> z7BDF6t(K@=AONEV#iyl(FR!;b0Jgs-F-7hjz&jA~@87>M6n~7?QXuFF1oo+3J4y7Q zOGP~O-{|JvoVY9rEOh?t*loZdWca~D*j*kAUXyN;1w|MOAB{R^M}fdOx3 z_n|w9=rYw#;JN*eV@5%n_fUQvIo^j^|Ij zEqQSHMufY54a?8NHOTvf3DAt_^S4Tuwo#usgNo8%=vI!a{AE!u*mP(x?;j*FYIaP{ z*X%#F=Ru-CUK7{;wA;b z@WIAZ^@V0ehO6s0gg{>yNu!!%dgMh-9UVS9v1Ebf+T#{3k`ZHeyfU;x3XgiMpRKIF z0V^%{iY595)Z5U45v^GaABelorM!suLdykkghAAsq}s)^CRmyN$5&D0lF z&V+eIbWRjNLg2B&MW&`vaKeMPuS3$BVN4aAQ@@V_P*QQKhIe#9tYIzp zt)*fxMi!8_+(!#l!HiLW{-Rm|t0B4q4TgpdZv`?&X#rGK+s*=vB_8)h{T<#%d7f(c zE{r7rs6YT86@jtj{xT1%fi>-2!tZCT7DuXNdGm;IfUom!(-#UAXrEh!!->!g(l0gC zSmo9)Im`smDkw=7R3RM8<#e`20$)mk8@h)@VWG#GmiasQbE^NEF1C~!FM4-k?gzh< zJ22wyN@KHNi_YWvfL+dfZ2>lccI`k%HBzd8In{>g9p(CqYj#vN-u~rET2CX-d@Ysg z1zoG?13SY=lfNMl{~fO|Ud_8e_aAgJue+-jp6{Jsme{Ik!($A=C^HLO$pa#30Bjub zt?CW@N}dK;L^>Yw7W+$IT2H(lrJPav#O`$6!@~p6$4p2!?R&tV3yj6P9GaL#lQsqe z55Kt5>LSrMd~`!CBt!zdmN+i38`RGf&(wzfMq>+K%m9S$+~QyKnm8GxcxQ}Nn4G9DFLYRoWodc=7;WXEjmy904AF@HBfX*y-uYs0Yo;4CYP-7cAu^^r|(l z*eTax{?4} z3Ky$`BC2o99_j@kfef5muOP2bQ2`J@vE}2T_iq+rBbb|FuqNnYG33$c#>8*uX+?ct zoaN>r4oR~m@MUrMog8I7TPjwdieAAAP_oMIOCQ}midnNe~P42?%_10**? zXfJ9^gd@<8MlyPbKQlX4{PxR_sXazzuFH#ev015gY(w(3#cS?-Q!Bn4~?VzFZaV4Vwm5!@kD z&i)Hr5!_AlQ>dO}TQ&vYp8GsEHz!J;)O&Vk=%k!#-dq2E`$PNehV#P0;v&r?nBytU zx%0$9sLy~0_PGj#8J0SPJX{h*LD__7#zh$T*$}hC3OOsOqyT5yiZz8f)}QkD{_lE+ zXbec_F))}=kC=uujoA-K|H2-t_W^cMi@=m1v%8_I~3 zET4Zff+qIAAO83QdT8(e=XaoCD~~Ac4eX=;+A}Kv0AeRZKSzVbT(Ot@Td%lWXxEzkb%am6SY=fgCd$7(Xk?)Q2nd91-E#rNp1R(*OZ1cH5{h(5Wjx zj}5|R?icoZx^G#9-+F>BKLM|Zi6#}h+|!El7>mcbEfy?D@UNhn`yuwBGFhLy-=%`j znfF=|=o|>K^BCcG2F5-;{O7F2G-&@zPO|K(USmulFJ59Qpk`N^+}OY z$_)Ul6tEzG^YuKf`w5|>q{QR-X7S=^?S&W=ugfjehvIcyH@siBRaWah72ARu2aJ5^ z+h+sM(1p1D(u=kzL*a;+H9wK- z%q@Pqe;uCV8}aIU_&saltG?Ns2-FmWohUvQ)BHd9DS4jMP+>;bw}5V$q;;4n0t+)#JP?r2 zFd)D?SBuj_;?MyD(t5a=nqFsx0gdRYY;G@9fC4Z);2y_LCBAk%6x*1eB4@_=BE%XzE5!UFpWR72Z3^K z_GpTBDKv1ee|R?3(*Jls6SX4x78#~G4~TAlkuEuhnHDZf27QM$<+U8Mta!6CA(yYe zWp<%Cer1PPczw{3r|#LC+mq|9J~-g7t#P>P1c-l`q3!(|$_cdlVb8zuzJwGTRqb9>Q;x~zuWK@9`J zq;HZGE=)-r$v60(LGneX<2BXev83Xol|44O%F zLEWXHCP*0Ic-)47Kg8_;@p$#wdg|C5VWNl{Omy`8=4QTYkH)$V1r!GjmebSi8FPxf z^fO2H;?bE-^%yMhvb&V0^d_GcS-SgJHp<4C{Y}1i331k%5GU2siM9yg4@@8HKLgim zb0foGXv!hVRvzr@gyuN!Llx}sm$3Q2^1RL`xI=8ZfBXBT!pfX@wHI_snESpN%NO%= zMxG90bLBiV#xgc6WXLx)fRf+mZd{aAo{*V7ZF9Ky%FnL9WkY8ZD;(I?4amGJ!g#<_ zka!%5h8BR4PWfi8d-rt*=r5YFoz-5{1VjP3lO}U^1n>|={RK+yZOXM=43Tg+{QHnT z@oF)jeV+pP9%-XN%tseTf(~1^vHlo#7jCd=&`@;47{c+bw}7&iru+-<>99#KRzar5 z9sbWUE(#GXD28+|8~?`UH{%HM>i+f5?{^Q7*`j~r>&90Xuz@o`{ipe*!J^j!hCB$N zA=tPeYP5v05tN0qbV^K^cUW$lU??s%M<1DYv708Tid+V#8~Rh~!W93h2v_v(pLfk2 zKr&AQ_T5Bzx{hQ3fe?dX{;ol|Kt?n5=JyYL-H~Tc+i4)!Bo$$RPX}Lg{~{0JM7!%A zu!{D^uz2f)zE2!P9uo15DRF31>@r1uGG51NFJ zoyuB?P_g@y4r>G#@Z5WJ?InEt_3_O{-rX9;{k9?j@_xuAT+h=eMnH_-#}|k@*2^

FB|(FO#F@*n%?=UDb^^vtS&m0p3A-_*&Ht2 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

8vYKkh`Mm4Tq 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 diff --git a/icons/obj/stacks.dmi b/icons/obj/stacks.dmi index ed3caf031ea13f52abae205e988e8b322e440dcf..d3134e3fe055aff3217c7ad6642c227d84beef15 100644 GIT binary patch literal 84889 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 YX)HB2k|z!Tcp#9b>Rpv0xOM3N1t!j=g8%>k literal 92245 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 j>x2CadrsT`SuKVraI+X&QbpZ?+KZf diff --git a/maps/sectors/surt/levels/surt_west.dmm b/maps/sectors/surt/levels/surt_west.dmm index 2c7c480c7d07..b49cb8440f0f 100644 --- a/maps/sectors/surt/levels/surt_west.dmm +++ b/maps/sectors/surt/levels/surt_west.dmm @@ -1465,7 +1465,7 @@ req_one_access = list(48); name = "Mining Storage" }, -/obj/item/clothing/glasses/material, +/obj/item/clothing/glasses/meson, /turf/simulated/floor/tiled, /area/sector/surt/mining_base/common) "Hr" = ( @@ -2179,7 +2179,7 @@ req_one_access = list(48); name = "Mining Storage" }, -/obj/item/clothing/glasses/material, +/obj/item/clothing/glasses/meson, /turf/simulated/floor/tiled, /area/sector/surt/mining_base/common) "Wy" = ( From d26a59d5bd8fb0afadf57ac322ab9abd76d963b3 Mon Sep 17 00:00:00 2001 From: LordME <58342752+TheLordME@users.noreply.github.com> Date: Sat, 18 Jan 2025 19:32:06 +0100 Subject: [PATCH 08/16] misplaced backslash fix (#6970) ## About The Pull Request ## Why It's Good For The Game ## Changelog :cl: code: fixed a misplaced backslash /:cl: --- code/modules/reagents/chemistry/reactions/Drink-Recipes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reactions/Drink-Recipes.dm b/code/modules/reagents/chemistry/reactions/Drink-Recipes.dm index 79066ac22f12..cf57998538bc 100644 --- a/code/modules/reagents/chemistry/reactions/Drink-Recipes.dm +++ b/code/modules/reagents/chemistry/reactions/Drink-Recipes.dm @@ -1802,7 +1802,7 @@ id = "braindrain" result = "braindrain" required_reagents = list("blud" = 1, "vodka" = 1, "kahlua" = 1) - result_amount = 3\ + result_amount = 3 //Blood-based Cocktails //All of these drinks should contain some level of blood_content in their reagent code From 14b369e2562706e3abfcab38b887996ffda215e5 Mon Sep 17 00:00:00 2001 From: DeltaDav <121488347+DeltaDav@users.noreply.github.com> Date: Tue, 21 Jan 2025 14:23:49 +0100 Subject: [PATCH 09/16] Outsider Spawn Update. (#6968) ## About The Pull Request Its a very simple PR that should fix the traveler spawns once and for all. I hope. ## Why It's Good For The Game Its a fix to make sure they spawn on nebula and not on station. Somehow it desnt work well on endeavour. --- .../levels/nebula_tradeport.dmm | 39 ++++++++----------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/maps/sectors/nebula_tradeport/levels/nebula_tradeport.dmm b/maps/sectors/nebula_tradeport/levels/nebula_tradeport.dmm index 738567469482..e2f1549489e5 100644 --- a/maps/sectors/nebula_tradeport/levels/nebula_tradeport.dmm +++ b/maps/sectors/nebula_tradeport/levels/nebula_tradeport.dmm @@ -2125,6 +2125,7 @@ dir = 4 }, /obj/machinery/cryopod/robot/door/gateway/trade/visitor, +/obj/landmark/spawnpoint/latejoin/outsider, /turf/simulated/floor/tiled/old_tile/beige, /area/tradeport/commhall) "afS" = ( @@ -5111,6 +5112,7 @@ /area/tradeport/spine) "anA" = ( /obj/machinery/cryopod/robot/door/gateway/trade/visitor, +/obj/landmark/spawnpoint/latejoin/outsider, /turf/simulated/floor/tiled/old_tile/beige, /area/tradeport/commhall) "anB" = ( @@ -11652,6 +11654,7 @@ /obj/effect/floor_decal/industrial/halfstair{ dir = 8 }, +/obj/landmark/spawnpoint/latejoin/outsider, /turf/simulated/floor/tiled, /area/tradeport/commhall) "aEy" = ( @@ -22350,6 +22353,17 @@ }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/scoophead/main) +"hZh" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/border, +/obj/landmark/spawnpoint/job/outsider/override, +/turf/simulated/floor/tiled, +/area/tradeport/commhall) "hZT" = ( /obj/machinery/light{ dir = 1 @@ -22534,17 +22548,6 @@ }, /turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) -"itp" = ( -/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/obj/landmark/spawnpoint/latejoin/outsider, -/turf/simulated/floor/tiled, -/area/tradeport/commhall) "itB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -27399,14 +27402,6 @@ /obj/item/bedsheet, /turf/simulated/floor/carpet/patterened/blue, /area/sector/nebula_tradeport/motel/room5) -"wWl" = ( -/obj/effect/floor_decal/techfloor, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/obj/landmark/spawnpoint/latejoin/outsider, -/turf/simulated/floor/tiled, -/area/tradeport/commhall) "wWB" = ( /turf/simulated/wall/r_wall, /area/sector/nebula_tradeport/motel/room7) @@ -37264,7 +37259,7 @@ abr nHT awO aYp -wWl +aVm aoN apv aWO @@ -37458,7 +37453,7 @@ abr awu aCZ akM -itp +aWb aoN apv aeh @@ -37843,7 +37838,7 @@ cXs cXs cWD aFw -aCP +hZh awO aYp aMJ From fe708d835917803d4e58a7b14c8aac461624d577 Mon Sep 17 00:00:00 2001 From: GySgtMurphy <79298976+GySgtMurphy@users.noreply.github.com> Date: Tue, 21 Jan 2025 08:25:01 -0500 Subject: [PATCH 10/16] More Endeavour Bug fixes? (#6966) ## About The Pull Request some bug fixes for Endeavour. ## Why It's Good For The Game Bug fixes are good? ## Changelog :cl: fix: fixed some atmos access issues tweak: tuned the kitchen a little bit in terms of layout /:cl: --------- Co-authored-by: LordME <58342752+TheLordME@users.noreply.github.com> --- maps/endeavour/levels/deck1.dmm | 27 +--- maps/endeavour/levels/deck2.dmm | 222 +++++++++++++------------------ maps/endeavour/levels/deck3.dmm | 226 +++++++++++++++----------------- maps/endeavour/levels/deck4.dmm | 41 ++---- 4 files changed, 214 insertions(+), 302 deletions(-) diff --git a/maps/endeavour/levels/deck1.dmm b/maps/endeavour/levels/deck1.dmm index 5b8e9da9bb43..3245675dc49d 100644 --- a/maps/endeavour/levels/deck1.dmm +++ b/maps/endeavour/levels/deck1.dmm @@ -5596,6 +5596,9 @@ /obj/structure/bed/chair{ dir = 1 }, +/obj/machinery/fire_alarm/south_mount{ + pixel_y = -24 + }, /turf/simulated/floor/tiled/steel_grid, /area/endeavour/surfacebase/tram) "ejN" = ( @@ -11612,15 +11615,6 @@ }, /turf/simulated/floor/carpet/purcarpet, /area/exploration/meeting) -"iqq" = ( -/obj/machinery/door/airlock/maintenance/common{ - id_tag = "maint_dorm" - }, -/obj/machinery/door/firedoor, -/obj/structure/catwalk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/endeavour/hallway/d1fwdmaint) "iqr" = ( /obj/structure/table/standard, /obj/item/inflatable_duck, @@ -20283,10 +20277,6 @@ }, /turf/simulated/floor/plating, /area/endeavour/hallway/d1aftmaint) -"ozV" = ( -/obj/structure/bed/chair, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/tram) "ozZ" = ( /turf/simulated/floor/tiled/dark, /area/gateway) @@ -26971,9 +26961,6 @@ /area/library) "tCP" = ( /obj/machinery/light, -/obj/machinery/fire_alarm/south_mount{ - pixel_y = -24 - }, /obj/structure/bed/chair{ dir = 1 }, @@ -41845,7 +41832,7 @@ rTZ rTZ rTZ rTZ -ozV +gjY cMJ nTt tAk @@ -42039,7 +42026,7 @@ eFW cMJ rTZ rTZ -ozV +gjY cMJ tAk tAk @@ -42233,7 +42220,7 @@ eNz cMJ rTZ rTZ -ozV +gjY cMJ tAk tAk @@ -61830,7 +61817,7 @@ wSl tHJ tHJ ivO -iqq +uKO byt byt ris diff --git a/maps/endeavour/levels/deck2.dmm b/maps/endeavour/levels/deck2.dmm index 10601e1729b1..9e0b1a5665a0 100644 --- a/maps/endeavour/levels/deck2.dmm +++ b/maps/endeavour/levels/deck2.dmm @@ -784,7 +784,7 @@ /area/maintenance/research/xenobio) "ayx" = ( /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "ayB" = ( /obj/structure/shuttle/engine/heater{ dir = 8 @@ -995,9 +995,6 @@ /turf/simulated/floor/tiled/dark, /area/rnd/research/testingrange) "aFn" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, /obj/machinery/air_alarm{ pixel_y = 22 }, @@ -1011,7 +1008,7 @@ dir = 4 }, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "aFv" = ( /obj/effect/floor_decal/borderfloor{ dir = 5 @@ -1824,7 +1821,7 @@ "biu" = ( /obj/structure/sign/deck/second, /turf/simulated/wall/r_wall/prepainted, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "bix" = ( /obj/effect/floor_decal/borderfloorwhite{ dir = 1 @@ -4222,7 +4219,7 @@ dir = 1 }, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "cxJ" = ( /turf/simulated/floor/plating, /area/maintenance/substation/medical_science) @@ -4972,7 +4969,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "cTK" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -6877,7 +6874,7 @@ dir = 1 }, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "ecE" = ( /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora) @@ -7798,7 +7795,7 @@ dir = 8 }, /obj/structure/bed/chair/bay/comfy/black, -/obj/machinery/camera/network/civilian{ +/obj/machinery/camera/network/exploration{ dir = 4 }, /turf/simulated/floor/wood, @@ -7992,7 +7989,7 @@ /obj/fiftyspawner/steel, /obj/fiftyspawner/steel, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "eKJ" = ( /obj/machinery/door/firedoor/glass{ dir = 4 @@ -8223,7 +8220,7 @@ "eTf" = ( /obj/spawner/window/low_wall/borosillicate/reinforced/full/firelocks, /turf/simulated/floor/plating, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "eTk" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -8912,9 +8909,6 @@ /turf/simulated/floor/tiled/white, /area/medical/patient_d) "fnA" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, /obj/machinery/door/airlock/maintenance/common{ name = "Flight Ops Support" }, @@ -8927,7 +8921,7 @@ dir = 4 }, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "fnS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -8962,7 +8956,7 @@ dir = 1 }, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "fpq" = ( /obj/effect/floor_decal/steeldecal/steel_decals_central7, /obj/structure/cable/green{ @@ -11801,12 +11795,12 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d2portamidhall) "hbR" = ( -/obj/machinery/ion_engine, /obj/machinery/light/small{ dir = 4 }, +/obj/machinery/camera/network/exploration, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "hbZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -13333,7 +13327,7 @@ dir = 10 }, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "hSv" = ( /obj/item/storage/firstaid/surgery, /obj/item/robotanalyzer, @@ -14110,10 +14104,6 @@ /turf/simulated/floor/tiled/dark, /area/medical/surgeryobs) "iur" = ( -/obj/machinery/power/apc/east_mount, -/obj/structure/cable/green{ - icon_state = "0-8" - }, /obj/structure/closet/secure_closet/pilot, /obj/effect/floor_decal/spline/fancy/wood/cee{ dir = 4 @@ -14122,7 +14112,7 @@ dir = 8 }, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "iuJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -14410,7 +14400,7 @@ dir = 4 }, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "iAl" = ( /obj/structure/table/glass, /obj/machinery/door/window/westleft{ @@ -14989,7 +14979,7 @@ "iVM" = ( /obj/effect/floor_decal/spline/fancy/wood/corner, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "iVW" = ( /obj/structure/table/reinforced, /obj/item/storage/box/donkpockets, @@ -17532,7 +17522,7 @@ dir = 8 }, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "kCt" = ( /turf/simulated/wall/prepainted/science, /area/rnd/research/researchdivision) @@ -17720,10 +17710,6 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d1starboardforhall) -"kKk" = ( -/obj/machinery/atmospherics/component/unary/engine, -/turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) "kKI" = ( /obj/machinery/light{ dir = 8 @@ -17849,7 +17835,7 @@ dir = 4 }, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "kNM" = ( /obj/machinery/light/small{ dir = 8 @@ -18269,15 +18255,12 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/structure/cable/green{ - icon_state = "2-4" - }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "kYY" = ( /obj/structure/sink{ dir = 4; @@ -19033,7 +19016,7 @@ dir = 6 }, /turf/simulated/floor/plating, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "lwb" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, @@ -19272,11 +19255,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/research_foyer) -"lCS" = ( -/obj/structure/catwalk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/research) "lDf" = ( /obj/machinery/air_alarm{ dir = 8; @@ -20127,7 +20105,7 @@ dir = 4 }, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "miA" = ( /obj/machinery/air_alarm/monitor/isolation{ alarm_id = "isolation_one"; @@ -20292,7 +20270,7 @@ dir = 8 }, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "mpP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black{ dir = 5 @@ -20515,9 +20493,6 @@ /turf/simulated/floor/tiled/monotile, /area/rnd/xenobiology/xenoflora/lab_atmos) "mwB" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, /obj/machinery/air_alarm{ pixel_y = 22 }, @@ -20527,8 +20502,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/camera/network/exploration, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "mwF" = ( /obj/machinery/light{ dir = 4 @@ -21470,7 +21446,7 @@ }, /obj/structure/closet/emcloset, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "nbe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -21757,9 +21733,6 @@ /obj/item/book/manual/medical_diagnostics_manual, /turf/simulated/floor/carpet/blucarpet, /area/crew_quarters/medbreak) -"nhq" = ( -/turf/simulated/wall/r_wall/prepainted, -/area/tether/surfacebase/shuttle_pad) "nhX" = ( /obj/effect/floor_decal/corner_techfloor_grid/full{ dir = 8 @@ -22580,11 +22553,6 @@ }, /turf/simulated/floor/plating, /area/medical/virologymaint) -"nJI" = ( -/obj/structure/catwalk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/medbay/aft) "nJM" = ( /obj/machinery/power/apc/north_mount, /obj/structure/cable/green{ @@ -23504,7 +23472,7 @@ dir = 6 }, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "olB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -23586,7 +23554,7 @@ /obj/fiftyspawner/phoronrglass, /obj/machinery/light/small, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "onN" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -25833,9 +25801,6 @@ /turf/simulated/wall/r_wall/prepainted/medical, /area/medical/virology_aft_access) "pyb" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, /obj/effect/floor_decal/spline/fancy/wood{ dir = 1 }, @@ -25843,8 +25808,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/camera/network/exploration, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "pyk" = ( /obj/structure/cable{ icon_state = "1-8" @@ -27682,7 +27648,7 @@ "qxd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "qxs" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -28500,9 +28466,6 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d1starboardforhall) "qUP" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, /obj/effect/floor_decal/spline/fancy/wood{ dir = 9 }, @@ -28513,7 +28476,7 @@ dir = 4 }, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "qVs" = ( /obj/structure/curtain/medical, /obj/structure/cable/green{ @@ -28841,7 +28804,7 @@ pixel_x = -24 }, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "rdl" = ( /obj/structure/cable{ icon_state = "4-8" @@ -29032,7 +28995,7 @@ /obj/random/tech_supply, /obj/random/tool, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "rig" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/black{ dir = 4 @@ -30280,7 +30243,7 @@ /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "rYp" = ( /obj/structure/bed/roller, /obj/effect/floor_decal/borderfloorwhite{ @@ -30359,7 +30322,7 @@ dir = 6 }, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "scE" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -31254,7 +31217,7 @@ }, /obj/structure/closet/firecloset, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "sFY" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 8 @@ -33124,7 +33087,7 @@ "tNI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "tNZ" = ( /obj/effect/floor_decal/borderfloorwhite, /obj/effect/floor_decal/corner/paleblue/border, @@ -35571,7 +35534,7 @@ /obj/item/tank/phoron, /obj/machinery/light/small, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "vtM" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -36086,7 +36049,7 @@ }, /obj/structure/closet/firecloset, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "vMn" = ( /obj/machinery/camera/network/research{ dir = 1 @@ -37422,7 +37385,7 @@ /obj/item/clothing/glasses/welding, /obj/item/weldingtool, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "wvW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -37565,7 +37528,7 @@ dir = 4 }, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "wAn" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -37600,7 +37563,7 @@ dir = 8 }, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "wBq" = ( /obj/machinery/power/apc/north_mount, /obj/structure/cable/green{ @@ -37762,7 +37725,7 @@ dir = 4 }, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "wGq" = ( /obj/machinery/fire_alarm/west_mount, /turf/simulated/floor/plating, @@ -38236,7 +38199,7 @@ dir = 9 }, /turf/simulated/floor/plating, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "wTM" = ( /obj/machinery/floodlight, /turf/simulated/floor/plating, @@ -39072,9 +39035,6 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/cable/green{ - icon_state = "4-8" - }, /obj/effect/floor_decal/spline/fancy/wood{ dir = 1 }, @@ -39082,7 +39042,7 @@ dir = 4 }, /turf/simulated/floor/wood, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "xug" = ( /obj/structure/cable/green{ icon_state = "2-4" @@ -39702,7 +39662,7 @@ "xLo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "xLu" = ( /obj/structure/bed/chair/sofa/beige{ dir = 8 @@ -39785,7 +39745,7 @@ dir = 8 }, /turf/simulated/floor/tiled/techmaint, -/area/tether/surfacebase/shuttle_pad) +/area/exploration/pilot_Office) "xOt" = ( /obj/machinery/camera/network/medbay{ dir = 1; @@ -50005,7 +49965,7 @@ aXm dyL aXm fPz -nJI +iec ukr ctj ogg @@ -68620,7 +68580,7 @@ pRW pRW pRW xVe -lCS +neh neh xIf xIf @@ -68815,7 +68775,7 @@ pRW pRW xVe gUD -lCS +neh neh neh svm @@ -69036,14 +68996,14 @@ gfI vWh bgF fDK -nhq -nhq +scX +scX iAd -nhq -nhq -nhq -nhq -nhq +scX +scX +scX +scX +scX lmG qBd pRW @@ -69233,11 +69193,11 @@ oYE biu sFS kNG -nhq +scX kCh rdi rif -nhq +scX qBd jRE pRW @@ -69424,14 +69384,14 @@ vWh vWh fKA xcG -nhq +scX naZ kNG -nhq +scX vMh ayx vtx -nhq +scX pRW pRW pRW @@ -69618,14 +69578,14 @@ vWh vWh pXE ana -nhq +scX wFI kNG luU qxd cxF eKl -nhq +scX pRW pRW pRW @@ -69819,7 +69779,7 @@ wTK xLo fpp wvk -nhq +scX pRW pRW pRW @@ -70006,14 +69966,14 @@ uFQ cwT bgF vsM -nhq +scX mwB xOh -nhq +scX hbR -kKk +ayx onF -nhq +scX pRW pRW pRW @@ -70200,14 +70160,14 @@ xIg hkf bkX plL -nhq +scX fnA -nhq -nhq -nhq -nhq -nhq -nhq +scX +scX +scX +scX +scX +scX lIp pRW pRW @@ -70394,14 +70354,14 @@ tYH nrD lbX fCt -nhq +scX qUP mpL wAN hSn -nhq -nhq -nhq +scX +scX +scX pRW pRW pRW @@ -70588,12 +70548,12 @@ cCF hGF wDK qaO -nhq +scX aFn tNI rYl ecg -nhq +scX pRW pRW pRW @@ -70782,12 +70742,12 @@ qIz fOr wqT qEo -nhq +scX xuc iVM wzT scw -nhq +scX lIp pRW pRW @@ -70976,7 +70936,7 @@ yiM pic oCg oIp -nhq +scX pyb oli eTf @@ -71170,9 +71130,9 @@ yiM pic oCg oIp -nhq +scX iur -nhq +scX eTf pRW pRW @@ -71364,9 +71324,9 @@ sBd pic oCg vUJ -nhq -nhq -nhq +scX +scX +scX pRW pRW pRW diff --git a/maps/endeavour/levels/deck3.dmm b/maps/endeavour/levels/deck3.dmm index 1a2e302b88d5..cd9ebe43b10a 100644 --- a/maps/endeavour/levels/deck3.dmm +++ b/maps/endeavour/levels/deck3.dmm @@ -535,7 +535,7 @@ /area/quartermaster/warehouse) "atU" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, -/obj/spawner/window/low_wall/reinforced/full/firelocks, +/obj/effect/paint/beastybrown, /turf/simulated/floor/plating, /area/quartermaster/foyer) "aup" = ( @@ -4369,12 +4369,18 @@ /turf/simulated/floor/wood, /area/crew_quarters/bar/lounge) "cUi" = ( -/obj/structure/closet/secure_closet/freezer/kitchen, -/obj/machinery/light{ +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/map_helper/access_helper/airlock/station/maintenance, +/obj/machinery/door/airlock/maintenance, +/obj/structure/catwalk, +/obj/machinery/door/firedoor{ dir = 8 }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/kitchen) +/turf/simulated/floor/plating, +/area/maintenance/bar/lower) "cUA" = ( /obj/machinery/newscaster{ pixel_x = 30 @@ -4930,8 +4936,9 @@ /turf/simulated/floor/wood, /area/crew_quarters/bar) "dia" = ( -/obj/landmark/spawnpoint/job/chef, /obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/structure/table/marble, +/obj/machinery/microwave, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "diG" = ( @@ -6017,12 +6024,11 @@ /turf/simulated/floor, /area/security/hallway) "dSJ" = ( -/obj/structure/table/marble, -/obj/item/storage/box/donkpockets, /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 1 }, /obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/landmark/spawnpoint/job/chef, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "dTf" = ( @@ -8106,12 +8112,6 @@ "fcJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/table/marble, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 5 - }, -/obj/item/hand_labeler, /obj/effect/floor_decal/corner_oldtile/white/diagonal, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) @@ -9386,6 +9386,9 @@ dir = 5 }, /obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/structure/table/marble, +/obj/item/material/kitchen/rollingpin, +/obj/item/material/knife/butch, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "fPG" = ( @@ -9395,6 +9398,9 @@ /obj/machinery/door/airlock/maintenance, /obj/map_helper/access_helper/airlock/station/maintenance, /obj/structure/catwalk, +/obj/machinery/door/firedoor{ + dir = 8 + }, /turf/simulated/floor/plating, /area/maintenance/bar/lower) "fPZ" = ( @@ -9613,12 +9619,11 @@ /area/shuttle/belter) "fTU" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance, -/obj/map_helper/access_helper/airlock/station/maintenance, /obj/structure/cable/green{ icon_state = "1-2" }, -/turf/simulated/floor/tiled, +/obj/structure/catwalk, +/turf/simulated/floor/plating, /area/maintenance/bar/lower) "fUc" = ( /obj/structure/bed/chair/sofa, @@ -11975,6 +11980,7 @@ }, /obj/machinery/door/airlock/maintenance, /obj/machinery/door/firedoor, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "hEc" = ( @@ -12367,6 +12373,11 @@ "hRx" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/ore_box, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + frequency = 1380; + id_tag = "belter_docking"; + pixel_y = 27; + }, /turf/simulated/floor/tiled/steel, /area/shuttle/belter) "hSq" = ( @@ -12578,11 +12589,6 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_6) "hYD" = ( -/obj/machinery/door/airlock{ - name = "Kitchen"; - req_one_access = list(28) - }, -/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -12592,8 +12598,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/map_helper/access_helper/airlock/station/service/kitchen, /obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/machinery/door/airlock{ + name = "Kitchen"; + req_one_access = list(28) + }, +/obj/map_helper/access_helper/airlock/station/service/kitchen, +/obj/machinery/door/firedoor, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "hYL" = ( @@ -12670,9 +12681,6 @@ /turf/simulated/wall/prepainted/civilian, /area/maintenance/bar/catwalk) "ibm" = ( -/obj/effect/floor_decal/steeldecal/steel_decals10{ - dir = 1 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -13499,6 +13507,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/bar/lower) "iIU" = ( @@ -14605,11 +14614,6 @@ /obj/random/maintenance/security, /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) -"jwx" = ( -/obj/effect/paint/beastybrown, -/obj/spawner/window/low_wall/reinforced/full/firelocks, -/turf/simulated/floor/plating, -/area/quartermaster/warehouse) "jwQ" = ( /obj/structure/table/rack/shelf, /obj/item/radio{ @@ -14726,12 +14730,10 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "jBD" = ( -/obj/structure/table/marble, -/obj/machinery/atmospherics/component/unary/vent_pump/on{ - dir = 1 +/obj/machinery/light{ + dir = 8 }, -/obj/effect/floor_decal/corner_oldtile/white/diagonal, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/freezer, /area/crew_quarters/kitchen) "jCu" = ( /obj/structure/cable/green{ @@ -15861,7 +15863,6 @@ dir = 1 }, /obj/effect/floor_decal/corner_oldtile/white/diagonal, -/obj/item/barrier_tape_segment/engineering, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "ksW" = ( @@ -16319,8 +16320,8 @@ pixel_x = 13 }, /obj/machinery/fire_alarm/east_mount, -/obj/item/reagent_containers/glass/rag/sponge, /obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/item/reagent_containers/glass/rag/sponge, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "kKO" = ( @@ -18558,8 +18559,11 @@ /turf/simulated/floor/tiled, /area/quartermaster/belterdock) "mmZ" = ( -/obj/machinery/appliance/mixer/cereal, +/obj/structure/cable/green{ + icon_state = "4-8" + }, /obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/landmark/spawnpoint/job/chef, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "mne" = ( @@ -20920,8 +20924,6 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "nTj" = ( -/obj/structure/table/marble, -/obj/item/storage/box/donkpockets, /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 1 }, @@ -22255,8 +22257,9 @@ /turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "oHM" = ( -/obj/machinery/appliance/mixer/candy, /obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/structure/table/marble, +/obj/item/storage/box/donkpockets, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "oIu" = ( @@ -22327,10 +22330,10 @@ /turf/simulated/floor/carpet, /area/crew_quarters/sleep/Dorm_10) "oLu" = ( -/obj/structure/table/marble, /obj/item/material/kitchen/rollingpin, /obj/item/material/knife/butch, /obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/structure/table/marble, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "oMi" = ( @@ -23230,12 +23233,6 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) -"pqk" = ( -/obj/structure/lattice, -/obj/structure/lattice, -/obj/structure/grille, -/turf/space/basic, -/area/space) "pqE" = ( /obj/machinery/vending/hydroseeds, /obj/effect/floor_decal/corner/green{ @@ -23387,11 +23384,10 @@ /turf/simulated/floor/carpet/tealcarpet, /area/crew_quarters/sleep/Dorm_8) "puP" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/bar/lower) +/obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/structure/table/marble, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/kitchen) "puT" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/glass/security{ @@ -23596,6 +23592,9 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/machinery/computer/security/telescreen{ + pixel_x = 32 + }, /turf/simulated/floor/wood, /area/crew_quarters/bar) "pEk" = ( @@ -24150,6 +24149,7 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/bar/lower) "pXE" = ( @@ -24624,9 +24624,9 @@ /turf/simulated/floor/tiled/old_tile/gray, /area/security/range) "qmQ" = ( -/obj/machinery/door/firedoor, -/obj/effect/paint/beastybrown, /obj/spawner/window/low_wall/reinforced/full/firelocks, +/obj/effect/paint/beastybrown, +/obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/quartermaster/warehouse) "qmV" = ( @@ -26653,12 +26653,15 @@ /turf/simulated/floor/tiled/old_cargo/gray, /area/security/hanger) "rGw" = ( -/obj/structure/table/marble, -/obj/item/material/knife/butch, -/obj/item/material/kitchen/rollingpin, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/floor_decal/corner_oldtile/white/diagonal, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/table/marble, +/obj/item/hand_labeler, +/obj/item/reagent_containers/glass/beaker{ + pixel_x = 5 + }, +/obj/item/reagent_containers/dropper, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "rHk" = ( @@ -27238,9 +27241,9 @@ /turf/simulated/floor/plating, /area/security/warden) "saz" = ( -/obj/structure/table/marble, /obj/effect/floor_decal/corner_oldtile/white/diagonal, -/turf/simulated/floor/tiled, +/obj/machinery/appliance/mixer/cereal, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "saB" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ @@ -27738,9 +27741,6 @@ /obj/machinery/air_alarm{ pixel_y = 22 }, -/obj/effect/floor_decal/steeldecal/steel_decals10{ - dir = 8 - }, /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, @@ -28214,9 +28214,6 @@ }, /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) -"sCx" = ( -/turf/space/basic, -/area/security/range) "sDb" = ( /obj/structure/catwalk, /obj/machinery/door/airlock/maintenance, @@ -28529,21 +28526,19 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "sNC" = ( -/obj/machinery/computer/security/telescreen{ - pixel_x = 32 - }, /obj/machinery/chemical_dispenser/catering/bar_soft{ pixel_y = 8 }, /obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/structure/table/marble, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "sNE" = ( -/obj/landmark/spawnpoint/job/chef, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, /obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/structure/table/marble, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "sOt" = ( @@ -28601,12 +28596,6 @@ }, /turf/simulated/floor/tiled, /area/security/security_lockerroom) -"sRJ" = ( -/obj/structure/closet/secure_closet/freezer/meat{ - anchored = 1 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/kitchen) "sSl" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 6 @@ -29299,6 +29288,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/bar/lower) "tos" = ( @@ -30353,6 +30343,7 @@ /obj/random/cigarettes, /obj/random/maintenance/security, /obj/random/coin, +/obj/item/orion_ship, /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "tZY" = ( @@ -30386,16 +30377,11 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) "uaL" = ( -/obj/structure/table/marble, -/obj/machinery/reagentgrinder, /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 }, -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 5 - }, -/obj/item/reagent_containers/dropper, /obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/machinery/appliance/mixer/candy, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "ubc" = ( @@ -33508,7 +33494,6 @@ /turf/simulated/floor/plating, /area/security/breakroom) "vNN" = ( -/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -33516,6 +33501,12 @@ dir = 10 }, /obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/structure/table/marble, +/obj/item/reagent_containers/glass/beaker{ + pixel_x = 5 + }, +/obj/machinery/reagentgrinder, +/obj/item/reagent_containers/dropper, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "vOz" = ( @@ -33630,6 +33621,7 @@ /obj/structure/cable/green{ icon_state = "1-4" }, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/bar/lower) "vSl" = ( @@ -35030,9 +35022,8 @@ /turf/simulated/floor/tiled/dark, /area/security/nuke_storage) "wMW" = ( -/obj/structure/table/marble, -/obj/machinery/microwave, /obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/machinery/holopad, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "wNi" = ( @@ -36063,9 +36054,6 @@ /obj/machinery/air_alarm{ pixel_y = 22 }, -/obj/effect/floor_decal/steeldecal/steel_decals10{ - dir = 8 - }, /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, @@ -36106,6 +36094,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/bar/lower) "xzh" = ( @@ -36542,9 +36531,8 @@ /turf/simulated/floor/tiled/dark, /area/security/brig) "xNI" = ( -/obj/random/toy, -/turf/simulated/floor/plating, -/area/endeavour/hallway/d3aftmaint) +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) "xPj" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 4 @@ -43976,7 +43964,7 @@ qCs dFB eLv eLv -qCs +xNI uGk uPC fgL @@ -45341,9 +45329,9 @@ dIR fcJ rGw fPF -wMW +mup dia -hCa +mmZ lgT iSj gWa @@ -45532,11 +45520,11 @@ leL pir ksT eCE -oHM +mup uaL vNN nTj -mup +oHM hCa lgT iSj @@ -45572,7 +45560,7 @@ fJN fJN lPz lPz -sCx +pRW pRW pRW pRW @@ -45726,11 +45714,11 @@ leL pir igX pYC -mmZ +mup saz sNE dSJ -mup +oHM hCa lgT iyq @@ -45920,11 +45908,11 @@ leL pir opV lmD -jBD +nTj oLu -mup +puP wMW -mup +dia hCa lgT bhQ @@ -46106,7 +46094,7 @@ hkm jPs xhN sGw -xNI +kSn jwr xhN gwe @@ -46692,16 +46680,16 @@ cZa nay xhN xZH -puP +leL +xZH pir -cUi apJ bKL dgB hOP aVW aVW -aVW +jBD pir fbH uhA @@ -46887,8 +46875,8 @@ rQs hDH iIN vRK +xZH pir -goX sEE raR iNY @@ -47081,13 +47069,13 @@ kSn xhN fSt xzc +xZH pir -sRJ xMC kyF jfy aVW -aVW +goX aVW lxd pir @@ -47275,13 +47263,13 @@ acO xhN xZH tol +xZH pir -sRJ aHs kyF jfy aHs -aHs +goX aHs dhd pir @@ -47469,7 +47457,7 @@ kow xhN sDq tol -pir +xZH pir pir pir @@ -47663,10 +47651,10 @@ kSn xhN kgM xzc -xbH xZH -qXh xZH +xbH +qXh xZH xZH bWK @@ -47858,8 +47846,8 @@ acO kgM pXt fTU -fYy -fYy +fTU +cUi fYy lIR hXA @@ -48020,7 +48008,7 @@ pRW pRW pRW pRW -pqk +dlE pRW wuh gmZ @@ -55217,7 +55205,7 @@ txc txc txc txc -jwx +jon vvO ciU agT diff --git a/maps/endeavour/levels/deck4.dmm b/maps/endeavour/levels/deck4.dmm index b10228deb65b..a3ea58fdf64a 100644 --- a/maps/endeavour/levels/deck4.dmm +++ b/maps/endeavour/levels/deck4.dmm @@ -7681,16 +7681,6 @@ }, /turf/simulated/floor/tiled, /area/engineering/break_room) -"ixk" = ( -/obj/effect/floor_decal/spline/fancy{ - dir = 5 - }, -/obj/item/paper/crumpled{ - name = "Hastily crumpled schematics"; - info = "Right - the equipment's all set and ready to go - as long as you can keep the ship in the drydock for another few days, we can get in, get out, and be gone before we're missed. Map's attached. Burn this if you think you're about to get pinched-" - }, -/turf/simulated/floor/carpet/oracarpet, -/area/engineering/engineering_monitoring) "ixG" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 1 @@ -9623,11 +9613,6 @@ /obj/item/barrier_tape_segment/engineering, /turf/simulated/floor/tiled/techfloor/grid, /area/engineering/engine_eva) -"kDd" = ( -/obj/structure/catwalk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/endeavour/hallway/d4fwdmaint) "kDR" = ( /obj/effect/floor_decal/industrial/warning{ dir = 1 @@ -12080,7 +12065,7 @@ /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d4starboardafthall) "nsO" = ( -/obj/map_helper/access_helper/airlock/station/engineering/atmospherics, +/obj/map_helper/access_helper/airlock/station/engineering/department, /obj/machinery/door/firedoor/glass{ dir = 8 }, @@ -16576,14 +16561,6 @@ /obj/machinery/air_alarm/north_mount, /turf/simulated/floor/tiled/steel, /area/tcommsat/computer) -"sZO" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/catwalk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/endeavour/hallway/d4fwdmaint) "tax" = ( /obj/structure/sign/fire, /turf/simulated/wall/r_wall/prepainted/engineering, @@ -18377,7 +18354,7 @@ /turf/simulated/floor/tiled/dark, /area/storage/tech) "vkX" = ( -/obj/map_helper/access_helper/airlock/station/engineering/atmospherics, +/obj/map_helper/access_helper/airlock/station/engineering/department, /obj/machinery/door/firedoor/glass{ dir = 8 }, @@ -19000,7 +18977,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/map_helper/access_helper/airlock/station/engineering/atmospherics, +/obj/map_helper/access_helper/airlock/station/engineering/department, /obj/machinery/door/firedoor/glass{ dir = 8 }, @@ -21035,7 +21012,7 @@ /turf/simulated/floor/tiled/techfloor, /area/endeavour/command/turrets) "ycR" = ( -/obj/map_helper/access_helper/airlock/station/engineering/atmospherics, +/obj/map_helper/access_helper/airlock/station/engineering/department, /obj/machinery/door/firedoor/glass{ dir = 8 }, @@ -35110,7 +35087,7 @@ oCj bHY cQR bHY -ixk +inf lNQ jlM wpR @@ -38768,10 +38745,10 @@ dvY xXL xXL xXL -kDd +xXL lHm xXL -kDd +xXL dvY wiw szc @@ -39350,7 +39327,7 @@ qBz qBz qBz qBz -sZO +pku xXL xXL lHm @@ -50444,7 +50421,7 @@ pbx pXA eDQ dvY -kDd +xXL xXL fwR jNg From beac640d90224526b55a3112261505b4943f40cd Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Tue, 21 Jan 2025 13:25:13 +0000 Subject: [PATCH 11/16] adds the aquatic trait (#6969) ## About The Pull Request underwater vore ability that is just fluff and a way to go semi-invisible and faster in water you're also as fast as an akula in water (this doesn't stack with akula) ## Why It's Good For The Game granodd asked for it and i can't see why not ## Changelog :cl: add: adds the aquatic trait /:cl: --- citadel.dme | 2 +- code/__DEFINES/traits/mob.dm | 3 + code/__DEFINES/traits/sources.dm | 2 + .../game/turfs/simulated/floor_types/water.dm | 4 +- code/modules/mob/_modifiers/traits.dm | 38 ++++++++ .../living/carbon/human/traits/positive.dm | 13 +++ .../station/station_special_abilities.dm | 88 +++++++++++++++++++ 7 files changed, 148 insertions(+), 2 deletions(-) diff --git a/citadel.dme b/citadel.dme index 88f6f9e0bf69..2f6e79b3a86a 100644 --- a/citadel.dme +++ b/citadel.dme @@ -3146,13 +3146,13 @@ #include "code\modules\jobs\job_types\station\admin\centcom_officer.dm" #include "code\modules\jobs\job_types\station\admin\emergency_responder.dm" #include "code\modules\jobs\job_types\station\civillian\assistant.dm" -#include "code\modules\jobs\job_types\station\civillian\outsider.dm" #include "code\modules\jobs\job_types\station\civillian\chaplain.dm" #include "code\modules\jobs\job_types\station\civillian\clown.dm" #include "code\modules\jobs\job_types\station\civillian\entertainer.dm" #include "code\modules\jobs\job_types\station\civillian\internals_affairs_agent.dm" #include "code\modules\jobs\job_types\station\civillian\librarian.dm" #include "code\modules\jobs\job_types\station\civillian\mime.dm" +#include "code\modules\jobs\job_types\station\civillian\outsider.dm" #include "code\modules\jobs\job_types\station\civillian\pilot.dm" #include "code\modules\jobs\job_types\station\command\blueshield.dm" #include "code\modules\jobs\job_types\station\command\captain.dm" diff --git a/code/__DEFINES/traits/mob.dm b/code/__DEFINES/traits/mob.dm index bde5e1fddfd7..d2aa31413462 100644 --- a/code/__DEFINES/traits/mob.dm +++ b/code/__DEFINES/traits/mob.dm @@ -87,3 +87,6 @@ DATUM_TRAIT(/mob, TRAIT_DEAF) #define TRAIT_BLINDNESS_STATUS_EFF "Status Effect: Blindness" #define TRAIT_BLINDNESS_NEGATIV "Negative custom trait" +// This mob can breathe water +#define TRAIT_MOB_WATER_BREATHER "mob_water_breather" +DATUM_TRAIT(/mob, TRAIT_MOB_WATER_BREATHER) diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm index 708300c3ca42..43e9292672c0 100644 --- a/code/__DEFINES/traits/sources.dm +++ b/code/__DEFINES/traits/sources.dm @@ -87,3 +87,5 @@ /// rad_insulation #define TRAIT_SOURCE_COMPONENT_RAD_INSULATION "c_rad_insulation" + +#define LOADOUT_TRAIT "loadout" diff --git a/code/game/turfs/simulated/floor_types/water.dm b/code/game/turfs/simulated/floor_types/water.dm index beaee03cc0e9..a8e27e660e1f 100644 --- a/code/game/turfs/simulated/floor_types/water.dm +++ b/code/game/turfs/simulated/floor_types/water.dm @@ -91,6 +91,8 @@ return if(!istype(newloc, /turf/simulated/floor/water)) to_chat(L, "You climb out of \the [src].") + // attempt to remove this if possible + L.remove_a_modifier_of_type(/datum/modifier/trait/underwater_stealth) ..() /turf/simulated/floor/water/pre_fishing_query(obj/item/fishing_rod/rod, mob/user) @@ -129,7 +131,7 @@ /mob/living/carbon/human/can_breathe_water() if(species) - return species.can_breathe_water() + return species.can_breathe_water() || HAS_TRAIT(src, TRAIT_MOB_WATER_BREATHER) return ..() /mob/living/proc/check_submerged() diff --git a/code/modules/mob/_modifiers/traits.dm b/code/modules/mob/_modifiers/traits.dm index aebfaa893a39..b2febfb3fb0c 100644 --- a/code/modules/mob/_modifiers/traits.dm +++ b/code/modules/mob/_modifiers/traits.dm @@ -163,3 +163,41 @@ client_color = MATRIX_Monochromia wire_colors_replace = GREYSCALE_COLOR_REPLACE + +/datum/modifier/trait/underwater_stealth + name = "underwater stealth" + desc = "You are currently underwater, rendering it more difficult to see you and enabling you to move quicker, thanks to your aquatic nature." + + on_created_text = "You sink under the water." + on_expired_text = "You come out from the water." + + stacks = MODIFIER_STACK_FORBID + + slowdown = -1.0 //A bit faster when actually submerged fully in water, as you're not waddling through it. + siemens_coefficient = 1.5 //You are, however, underwater. Getting shocked will hurt. + + outgoing_melee_damage_percent = 0.75 //You are swinging a sword under water...Good luck. + accuracy = -50 //You're underwater. Good luck shooting a gun. (Makes shots as if you were 3.33 tiles further.) + evasion = 30 //You're underwater and a bit harder to hit. + +/datum/modifier/trait/underwater_stealth/on_applied() + holder.alpha = 50 + return + +/datum/modifier/trait/underwater_stealth/on_expire() + holder.alpha = 255 + return + +/datum/modifier/trait/underwater_stealth/tick() + if(holder.stat == DEAD) + expire(silent = TRUE) //If you're dead you float to the top. + if(istype(holder.loc, /turf/simulated/floor/water)) + var/turf/simulated/floor/water/water_floor = holder.loc + if(water_floor.depth < 1) //You're not in deep enough water anymore. + expire(silent = FALSE) + if(water_floor.depth > 1) + holder.alpha = 50 + else + holder.alpha = 65 + else + expire(silent = FALSE) diff --git a/code/modules/mob/living/carbon/human/traits/positive.dm b/code/modules/mob/living/carbon/human/traits/positive.dm index a419edb7377c..bae0b71298ea 100644 --- a/code/modules/mob/living/carbon/human/traits/positive.dm +++ b/code/modules/mob/living/carbon/human/traits/positive.dm @@ -271,3 +271,16 @@ var/obj/item/organ/internal/weaver/weak/silk = new(H) H.internal_organs += silk H.internal_organs_by_name[O_WEAVER] = silk + +/datum/trait/positive/aquatic + name = "Aquatic" + desc = "You can breathe under water and can traverse water more efficiently. Additionally, you can eat others in the water." + cost = 1 + sort_key = "10-Aquatic" + +/datum/trait/positive/aquatic/apply(var/datum/species/S,var/mob/living/carbon/human/H) + ADD_TRAIT(H, TRAIT_MOB_WATER_BREATHER, LOADOUT_TRAIT) + add_verb(H, /mob/living/carbon/human/proc/underwater_devour) + add_verb(H, /mob/living/carbon/human/proc/water_stealth) + S.water_movement = min(-4, S.water_movement) + ..() diff --git a/code/modules/species/station/station_special_abilities.dm b/code/modules/species/station/station_special_abilities.dm index b7debb074b5d..8cd39108f690 100644 --- a/code/modules/species/station/station_special_abilities.dm +++ b/code/modules/species/station/station_special_abilities.dm @@ -867,3 +867,91 @@ set category = "Abilities" pass_flags ^= ATOM_PASS_TABLE //I dunno what this fancy ^= is but Aronai gave it to me. to_chat(src, "You [pass_flags&ATOM_PASS_TABLE ? "will" : "will NOT"] move over tables/railings/trays!") + +/mob/living/carbon/human/proc/water_stealth() + set name = "Dive under water / Resurface" + set desc = "Dive under water, allowing for you to be stealthy and move faster." + set category = "Abilities" + + if(last_special > world.time) + return + last_special = world.time + 50 //No spamming! + + if(has_modifier_of_type(/datum/modifier/trait/underwater_stealth)) + to_chat(src, "You resurface!") + remove_modifiers_of_type(/datum/modifier/trait/underwater_stealth) + return + + if(!isturf(loc)) //We have no turf. + to_chat(src, "There is no water for you to dive into!") + return + + if(istype(src.loc, /turf/simulated/floor/water)) + var/turf/simulated/floor/water/water_floor = src.loc + if(water_floor.depth >= 1) //Is it deep enough? + add_modifier(/datum/modifier/trait/underwater_stealth) //No duration. It'll remove itself when they exit the water! + to_chat(src, "You dive into the water!") + visible_message("[src] dives into the water!") + else + to_chat(src, "The water here is not deep enough to dive into!") + return + + else + to_chat(src, "There is no water for you to dive into!") + return + +/mob/living/carbon/human/proc/underwater_devour() + set name = "Devour From Water" + set desc = "Grab something in the water with you and devour them with your selected stomach." + set category = "Abilities.Vore" + + if(last_special > world.time) + return + last_special = world.time + 50 //No spamming! + + if(stat == DEAD || !CHECK_MOBILITY(src, MOBILITY_CAN_MOVE)) + to_chat(src, SPAN_NOTICE("You cannot do that while in your current state.")) + return + + if(!(src.vore_selected)) + to_chat(src, SPAN_NOTICE("No selected belly found.")) + return + + + if(!has_modifier_of_type(/datum/modifier/trait/underwater_stealth)) + to_chat(src, "You must be underwater to do this!!") + return + + var/list/targets = list() //Shameless copy and paste. If it ain't broke don't fix it! + + for(var/turf/T in range(1, src)) + if(istype(T, /turf/simulated/floor/water)) + for(var/mob/living/L in T) + if(L == src) //no eating yourself. 1984. + continue + if(L.devourable && L.can_be_drop_prey) + targets += L + + if(!(targets.len)) + to_chat(src, SPAN_NOTICE("No eligible targets found.")) + return + + var/mob/living/target = tgui_input_list(src, "Please select a target.", "Victim", targets) + + if(!target) + return + + to_chat(target, SPAN_CRITICAL("Something begins to circle around you in the water!")) //Dun dun... + var/starting_loc = target.loc + + if(do_after(src, 50)) + if(target.loc != starting_loc) + to_chat(target, SPAN_WARNING("You got away from whatever that was...")) + to_chat(src, SPAN_NOTICE("They got away.")) + return + if(target.buckled) //how are you buckled in the water?! + target.buckled.unbuckle_mob() + target.visible_message(SPAN_WARNING("\The [target] suddenly disappears, being dragged into the water!"),\ + SPAN_DANGER("You are dragged below the water and feel yourself slipping directly into \the [src]'s [lowertext(vore_selected)]!")) + to_chat(src, SPAN_NOTICE("You successfully drag \the [target] into the water, slipping them into your [lowertext(vore_selected)].")) + target.forceMove(src.vore_selected) From 18e2330f55e2a81af61a0d97384f6b17611e1710 Mon Sep 17 00:00:00 2001 From: Putnam3145 Date: Tue, 21 Jan 2025 05:25:36 -0800 Subject: [PATCH 12/16] Fixes Intercom Convo (#6955) ## About The Pull Request As title. Does not work because it should be checking that decomped convo is mul of 3+1 but it's just checking for mul of 3 ## Why It's Good For The Game it's fun ## Changelog :cl: fix: Fix Intercom Convo verb for admins/event managers /:cl: --- code/modules/admin/admin.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 4c43719421e2..59225401bfd3 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -717,7 +717,7 @@ var/datum/legacy_announcement/minor/admin_min_announcer = new //Time to find how they screwed up. //Wasn't the right length - if((decomposed.len) % 3) //+1 to accomidate the lack of a wait time for the last message + if((length(decomposed)+1) % 3) //+1 to accomidate the lack of a wait time for the last message to_chat(usr,"You passed [decomposed.len] segments (senders+messages+pauses). You must pass a multiple of 3, minus 1 (no pause after the last message). That means a sender and message on every other line (starting on the first), separated by a pipe character (|), and a number every other line that is a pause in seconds.") return From 34eb33f82a7579198210ba073190c7fce4b66115 Mon Sep 17 00:00:00 2001 From: Keekenox Date: Tue, 21 Jan 2025 23:48:23 -0500 Subject: [PATCH 13/16] add passport.dmi to da repo for future use :) (#6960) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit adds da passport sprites to da repo :) :) :) :) :) 💯 --- icons/obj/passports.dmi | Bin 0 -> 1344 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 icons/obj/passports.dmi diff --git a/icons/obj/passports.dmi b/icons/obj/passports.dmi new file mode 100644 index 0000000000000000000000000000000000000000..329797e21d8cf61f8d804a9448093a4ffaaadf07 GIT binary patch literal 1344 zcmV-G1;6@?^~F)?#7 zF_Aw%F)Av@yPCwDV55Cuv5`p2o;c*VQ+$e{I4>`QSxPW4Foa`&Y({2;k&&mgv_nHf zSvpiOBrVa`*QBJR9v&X=@9*@~ipj~zZFzY>EjxC0c2aFtD?%?FDIii^ZOhBcqp7oa zfR8{vH=&z_ZD?5A`j=Ax0004WQchCV=-0C=30 zl0OT=Kn%s_-lqtTj2Z#C*e4bWx1|c?>+h+|kn2wcN4+YUs1 zEO2|9W?7m-0pFJbiBAaJd?6Evq9}|A0bV}G0&!9#jPVEvfonoQCcq7dDai6vL;wYn zGAY@c1==-0C6MNMnx+{L5HnEn6yB9UNG2f3@*D~MnfyA`}UX$77hl`4V_<0%#|kOz53(G@^IH69jkw{637v zNZ>BdGY(h-BcC4E3Rs@zvtZHz#z!5L0P$IH7KU#B2jTeyoC^yW3sL;}S_@s0%MvOFOm-#(eZx>%D5 z=%zqYkyEfB6A(NwED(kC6v+Bmpw`|6tSFbu0t$#{ToE}1&0|9d2x=@aZSO*`4`>ru z9p``&;DFO@w-3!WK%iX&0eVipTG2bdLFyMOx+eFB>Pepeq0ge9+E_Md#VKmK61>ywnd-4gfrxj>%r3k$HK z2>BNf*l}Lv#SMT!@=zqOzb~dB=NFMc!4oJ@0{i`b*8&85+1`i!{S&4jl#|daU~l(7 z_uIDnz3p8matRRqeYFVVBqjvJBtU@!7udZ90Yd_9f1g-{JpaT`s00d}z~OL^39x|m z3+Vd$Y6{}Srv%_5m_Xiq#{~NJ3SEC+zXpPk|326Uyg=?z-Corzpy}^F9}W7)J+%|z z^S=&VfB)r~9{21M{y%^=(De6TI>5L&{~HX3|C3*d Date: Wed, 22 Jan 2025 12:38:09 -0500 Subject: [PATCH 14/16] fixes resist (crappily but it works) (#6965) --- .../status_effects/basic/incapacitation.dm | 4 +++ code/modules/mob/grab.dm | 8 +++-- code/modules/mob/living/carbon/resist.dm | 3 +- code/modules/mob/mobility.dm | 7 ++-- code/modules/mob/status_procs.dm | 33 +++++++++++++++++++ 5 files changed, 50 insertions(+), 5 deletions(-) diff --git a/code/datums/status_effects/basic/incapacitation.dm b/code/datums/status_effects/basic/incapacitation.dm index 89b673d590ab..798cba342e52 100644 --- a/code/datums/status_effects/basic/incapacitation.dm +++ b/code/datums/status_effects/basic/incapacitation.dm @@ -32,6 +32,10 @@ identifier = "root" requires_mobility_update = TRUE +/datum/status_effect/incapacitation/daze + identifier = "daze" + requires_mobility_update = TRUE + /datum/status_effect/incapacitation/unconscious identifier = "unconscious" requires_stat_update = TRUE diff --git a/code/modules/mob/grab.dm b/code/modules/mob/grab.dm index 0ceb80369444..a95f20074ac7 100644 --- a/code/modules/mob/grab.dm +++ b/code/modules/mob/grab.dm @@ -198,7 +198,9 @@ if(affecting.loc != assailant.loc || size_difference(affecting, assailant) > 0) force_down = 0 else - affecting.afflict_paralyze(20 * 2) + affecting.afflict_knockdown(3 SECONDS) + affecting.afflict_root(3 SECONDS) + affecting.afflict_daze(3 SECONDS) if(state >= GRAB_NECK) affecting.afflict_stun(20 * 3) @@ -650,7 +652,9 @@ /obj/item/grab/proc/apply_pinning(mob/target, mob/attacker) force_down = 1 - target.afflict_paralyze(20 * 3) + target.afflict_knockdown(4 SECONDS) + target.afflict_root(4 SECONDS) + target.afflict_daze(4 SECONDS) step_to(attacker, target) attacker.setDir(EAST) //face the victim target.setDir(SOUTH) //face up diff --git a/code/modules/mob/living/carbon/resist.dm b/code/modules/mob/living/carbon/resist.dm index 44664c21941f..bd59fede209d 100644 --- a/code/modules/mob/living/carbon/resist.dm +++ b/code/modules/mob/living/carbon/resist.dm @@ -27,7 +27,8 @@ if(I) setClickCooldown(100) INVOKE_ASYNC(src, TYPE_PROC_REF(/mob/living/carbon, cuff_resist), I, cuff_break = can_break_cuffs()) - return TRUE + return TRUE + return ..() /mob/living/carbon/proc/reduce_cuff_time() return FALSE diff --git a/code/modules/mob/mobility.dm b/code/modules/mob/mobility.dm index c26f243edf93..981fe5fb8b55 100644 --- a/code/modules/mob/mobility.dm +++ b/code/modules/mob/mobility.dm @@ -36,8 +36,11 @@ else if(is_stunned()) . &= ~(MOBILITY_CAN_USE | MOBILITY_CAN_MOVE | MOBILITY_CAN_PICKUP | MOBILITY_CAN_STORAGE | MOBILITY_CAN_UI | MOBILITY_CAN_PULL | MOBILITY_CAN_RESIST) - else if(is_rooted()) - . &= ~(MOBILITY_CAN_MOVE) + else + if(is_rooted()) + . &= ~(MOBILITY_CAN_MOVE) + if(is_dazed()) + . &= ~(MOBILITY_CAN_USE | MOBILITY_CAN_PICKUP | MOBILITY_CAN_UI | MOBILITY_CAN_STORAGE) if(is_knockdown()) . &= ~MOBILITY_CAN_STAND diff --git a/code/modules/mob/status_procs.dm b/code/modules/mob/status_procs.dm index 750e9660d4cc..108f10747055 100644 --- a/code/modules/mob/status_procs.dm +++ b/code/modules/mob/status_procs.dm @@ -141,6 +141,39 @@ afflict_root(amount) return TRUE +/mob/proc/is_dazed() + RETURN_TYPE(/datum/status_effect) + return has_status_effect(/datum/status_effect/incapacitation/daze) + +/mob/proc/afflict_daze(amount) + if(!(status_flags & STATUS_CAN_ROOT)) + return FALSE + apply_status_effect(/datum/status_effect/incapacitation/daze, amount) + return TRUE + +/mob/proc/adjust_dazed(amount) + if(!(status_flags & STATUS_CAN_ROOT)) + return FALSE + var/datum/status_effect/effect = is_dazed() + if(effect) + effect.adjust_duration(amount) + else if(amount > 0) + afflict_daze(amount) + return TRUE + +/mob/proc/set_dazed(amount) + if(!(status_flags & STATUS_CAN_ROOT)) + return FALSE + if(amount == 0) + remove_status_effect(/datum/status_effect/incapacitation/daze) + else + var/datum/status_effect/effect = is_dazed() + if(effect) + effect.set_duration_from_now(amount) + else if(amount > 0) + afflict_daze(amount) + return TRUE + /** * apply a staggering effect * From ea96de301702f587f5ac911ec2ef296dc7e8df91 Mon Sep 17 00:00:00 2001 From: Blubelle <57083662+BlueWildrose@users.noreply.github.com> Date: Wed, 22 Jan 2025 10:38:37 -0700 Subject: [PATCH 15/16] Adds a bunch of loadout items into the vendors + some fixes (#6973) --- code/game/machinery/biogenerator.dm | 1 + code/game/machinery/vending/loadout.dm | 499 +++++++++++++++++++++++-- code/modules/loadout/loadout_suit.dm | 10 +- 3 files changed, 479 insertions(+), 31 deletions(-) diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index 82999429c1fd..fcc87c65e69d 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -102,6 +102,7 @@ BIOGEN_ITEM("Leather Coat", /obj/item/clothing/suit/leathercoat, 1, 500), BIOGEN_ITEM("Leather Jacket", /obj/item/clothing/suit/storage/toggle/brown_jacket, 1, 500), BIOGEN_ITEM("Winter Coat", /obj/item/clothing/suit/storage/hooded/wintercoat, 1, 500), + BIOGEN_ITEM("Winter Boots", /obj/item/clothing/shoes/boots/winter, 1, 250), BIOGEN_ITEM("4 Algae Sheets", /obj/item/stack/material/algae, 4, 400), BIOGEN_ITEM("50 Algae Sheets", /obj/item/stack/material/algae, 50, 5000), ) diff --git a/code/game/machinery/vending/loadout.dm b/code/game/machinery/vending/loadout.dm index 03debaedc09c..27a1d06a31d9 100644 --- a/code/game/machinery/vending/loadout.dm +++ b/code/game/machinery/vending/loadout.dm @@ -1,8 +1,8 @@ /obj/machinery/vending/loadout - name = "Fingers and Toes" - desc = "A special vendor for gloves and shoes!" - product_ads = "Do you have fingers and toes? COVER THEM UP!;Show me your toes! Wait. NO DON'T! BUY NEW SHOES!;Don't leave prints, BUY SOME GLOVES!;Remember to check your shoes for micros! You don't have to let them out, but just check for them!;Fingers and Toes is not liable for micro entrapment or abuse under the feet of our patrons.!;This little piggy went WE WE WE all the way down to FINGERS AND TOES to pick up some sweet new gloves and shoes." + name = "Heads, Fingers, and Toes" + desc = "A special vendor for hats, gloves, and shoes!" + product_ads = "Do you have heads, fingers, and toes? COVER THEM UP!;Show me your toes! Wait. NO DON'T! BUY NEW SHOES!;Don't leave prints, BUY SOME GLOVES!;Portable shade! BUY A HAT!;This little piggy went WE WE WE all the way down to HEADS, FINGERS, AND TOES to pick up some sweet new gloves, shoes, and a big wide hat." icon_state = "glovesnshoes" products = list( /obj/item/clothing/gloves/evening = 5, @@ -22,12 +22,20 @@ /obj/item/clothing/gloves/fluff/siren = 5, /obj/item/clothing/gloves/white = 5, /obj/item/clothing/gloves/duty = 5, + /obj/item/clothing/gloves/bountyskin = 5, + /obj/item/clothing/gloves/hasie = 5, + /obj/item/clothing/gloves/utility_fur_gloves = 5, + /obj/item/clothing/gloves/armsocks = 5, /obj/item/clothing/shoes/athletic = 5, /obj/item/clothing/shoes/boots/fluff/siren = 5, /obj/item/clothing/shoes/slippers = 5, /obj/item/clothing/shoes/boots/cowboy/classic = 5, /obj/item/clothing/shoes/boots/cowboy = 5, + /obj/item/clothing/shoes/cowboyboots/black = 5, /obj/item/clothing/shoes/boots/duty = 5, + /obj/item/clothing/shoes/boots/duty/alt = 5, + /obj/item/clothing/shoes/boots/duty/alt/knee = 5, + /obj/item/clothing/shoes/boots/duty/alt/heel = 5, /obj/item/clothing/shoes/flats/white/color = 5, /obj/item/clothing/shoes/flipflop = 5, /obj/item/clothing/shoes/heels = 5, @@ -45,6 +53,7 @@ /obj/item/clothing/shoes/black/cuffs/blue = 5, /obj/item/clothing/shoes/black/cuffs/red = 5, /obj/item/clothing/shoes/sandal = 5, + /obj/item/clothing/shoes/socksandals = 5, //spared from the contraband. /obj/item/clothing/shoes/black = 5, /obj/item/clothing/shoes/blue = 5, /obj/item/clothing/shoes/brown = 5, @@ -57,21 +66,101 @@ /obj/item/clothing/shoes/white = 5, /obj/item/clothing/shoes/yellow = 5, /obj/item/clothing/shoes/skater = 5, + /obj/item/clothing/shoes/dress = 5, + /obj/item/clothing/shoes/dress/white = 5, /obj/item/clothing/shoes/boots/cowboy/snakeskin = 5, /obj/item/clothing/shoes/boots/jackboots/toeless = 5, /obj/item/clothing/shoes/boots/workboots/toeless = 5, + /obj/item/clothing/shoes/boots/laconic = 5, /obj/item/clothing/shoes/boots/winter = 5, /obj/item/clothing/shoes/boots/workboots = 5, + /obj/item/clothing/shoes/bountyskin = 5, + /obj/item/clothing/shoes/boots/half_moon = 5, /obj/item/clothing/shoes/footwraps = 5, /obj/item/clothing/shoes/utilitarian = 5, + /obj/item/clothing/head/bandana = 5, + /obj/item/clothing/head/greenbandana = 5, + /obj/item/clothing/head/orangebandana = 5, + /obj/item/clothing/head/beret = 5, + /obj/item/clothing/head/beret/medical = 5, + /obj/item/clothing/head/soft/black = 5, + /obj/item/clothing/head/soft/blue = 5, + /obj/item/clothing/head/mailman = 5, + /obj/item/clothing/head/flatcap = 5, + /obj/item/clothing/head/soft/green = 5, + /obj/item/clothing/head/soft/grey = 5, + /obj/item/clothing/head/soft/orange = 5, + /obj/item/clothing/head/soft/purple = 5, + /obj/item/clothing/head/soft/red = 5, + /obj/item/clothing/head/soft/yellow = 5, + /obj/item/clothing/head/soft/mime = 5, + /obj/item/clothing/head/soft/mbill = 5, + /obj/item/clothing/head/cowboy_hat = 5, + /obj/item/clothing/head/cowboy_hat/black = 5, + /obj/item/clothing/head/cowboy_hat/pink = 5, + /obj/item/clothing/head/cowboy_hat/wide = 5, + /obj/item/clothing/head/fedora/brown = 5, + /obj/item/clothing/head/fedora/grey = 5, + /obj/item/clothing/head/fedora/floppy = 5, + /obj/item/clothing/head/pin = 5, + /obj/item/clothing/head/pin/pink = 5, + /obj/item/clothing/head/pin/clover = 5, + /obj/item/clothing/head/pin/butterfly = 5, + /obj/item/clothing/head/pin/magnetic = 5, + /obj/item/clothing/head/pin/flower = 5, + /obj/item/clothing/head/pin/flower/blue = 5, + /obj/item/clothing/head/pin/flower/pink = 5, + /obj/item/clothing/head/pin/flower/yellow = 5, + /obj/item/clothing/head/pin/flower/violet = 5, + /obj/item/clothing/head/pin/flower/orange = 5, + /obj/item/clothing/head/pin/flower/white = 5, + /obj/item/clothing/head/pin/bow = 5, + /obj/item/clothing/head/pin/bow/big = 5, + /obj/item/clothing/head/pin/bow/big/red = 5, + /obj/item/clothing/head/hardhat = 2, + /obj/item/clothing/head/hardhat/orange = 2, + /obj/item/clothing/head/hardhat/red = 2, + /obj/item/clothing/head/hardhat/dblue = 2, + /obj/item/clothing/head/boaterhat = 5, + /obj/item/clothing/head/bowler = 5, + /obj/item/clothing/head/fez = 5, + /obj/item/clothing/head/rice = 5, + /obj/item/clothing/head/that = 5, + /obj/item/clothing/head/ushanka = 5, + /obj/item/clothing/head/santa = 5, + /obj/item/clothing/head/hijab = 5, + /obj/item/clothing/head/kippa = 5, + /obj/item/clothing/head/turban = 5, + /obj/item/clothing/head/taqiyah = 5, + /obj/item/clothing/head/beanie = 5, + /obj/item/clothing/head/beanie_loose = 5, + /obj/item/clothing/head/beretg = 5, + /obj/item/clothing/head/sombrero = 5, + /obj/item/clothing/head/flatcap/grey = 5, + /obj/item/clothing/head/traveller = 5, + /obj/item/clothing/head/maangtikka = 5, + /obj/item/clothing/head/jingasa = 5, + /obj/item/clothing/head/fluff/headbando = 5, + /obj/item/clothing/head/woodcirclet = 10, //Can be used to craft specific flower crowns, leaving the flower variants out. + /obj/item/clothing/head/half_pint = 5, + /obj/item/clothing/head/bard = 5, + /obj/item/clothing/head/hood/aureate = 5, + /obj/item/clothing/head/hood/aureate/dark = 5, + /obj/item/clothing/head/kitty = 5, + /obj/item/clothing/head/rabbitears = 5, ) premium = list( - /obj/item/clothing/gloves/rainbow = 1, - /obj/item/clothing/shoes/rainbow = 1, + /obj/item/clothing/gloves/rainbow = 5, + /obj/item/clothing/shoes/rainbow = 5, + /obj/item/clothing/head/soft/rainbow = 5, + /obj/item/clothing/head/hardhat/white = 2, + /obj/item/clothing/head/philosopher_wig = 5, + /obj/item/clothing/head/powdered_wig = 5, ) contraband = list( /obj/item/clothing/shoes/syndigaloshes = 1, /obj/item/clothing/shoes/clown_shoes = 1, + /obj/item/clothing/head/collectable/slime = 3, ) price_default = 10 @@ -85,24 +174,67 @@ products = list( /obj/item/pda = 25, /obj/item/radio/headset = 25, - /obj/item/storage/backpack/ = 10, + /obj/item/storage/backpack = 10, /obj/item/storage/backpack/messenger = 10, /obj/item/storage/backpack/satchel = 10, + /obj/item/storage/backpack/rig = 10, + /obj/item/storage/backpack/dufflebag = 10, /obj/item/clothing/under/color = 5, /obj/item/clothing/under/color/aqua = 5, /obj/item/clothing/under/color/black = 5, - /obj/item/clothing/under/color/blackjumpskirt = 5, + /obj/item/clothing/under/color/blackf = 5, + /obj/item/clothing/under/color/darkblue = 5, /obj/item/clothing/under/color/blue = 5, /obj/item/clothing/under/color/brown = 5, + /obj/item/clothing/under/color/lightbrown = 5, /obj/item/clothing/under/color/green = 5, + /obj/item/clothing/under/color/lightgreen = 5, /obj/item/clothing/under/color/grey = 5, /obj/item/clothing/under/color/orange = 5, /obj/item/clothing/under/color/pink = 5, /obj/item/clothing/under/color/red = 5, /obj/item/clothing/under/color/white = 5, /obj/item/clothing/under/color/yellow = 5, + /obj/item/clothing/under/color/yellowgreen = 5, + /obj/item/clothing/under/color/lightred = 5, + /obj/item/clothing/under/color/darkred = 5, + /obj/item/clothing/under/color/blackjumpskirt = 5, + /obj/item/clothing/under/color/pink_skirt = 5, + /obj/item/clothing/under/color/black_skirt = 5, + /obj/item/clothing/under/color/lgreen_skirt = 5, + /obj/item/clothing/under/color/green_skirt = 5, + /obj/item/clothing/under/color/orange_skirt = 5, + /obj/item/clothing/under/color/yellow_skirt = 5, + /obj/item/clothing/under/color/white_skirt = 5, + /obj/item/clothing/under/color/grey_skirt = 5, + /obj/item/clothing/under/color/lbrown_skirt = 5, + /obj/item/clothing/under/color/brown_skirt = 5, + /obj/item/clothing/under/color/red_skirt = 5, + /obj/item/clothing/under/color/teal_skirt = 5, + /obj/item/clothing/under/color/lblue_skirt = 5, + /obj/item/clothing/under/color/blue_skirt = 5, + /obj/item/clothing/under/color/lpurple_skirt = 5, + /obj/item/clothing/under/color/maroon_skirt = 5, + /obj/item/clothing/under/color/pink_skirt = 5, + /obj/item/clothing/under/assistantformal = 5, + /obj/item/clothing/under/assistantformal_fem = 5, /obj/item/clothing/shoes/black = 20, /obj/item/clothing/shoes/white = 20, + /obj/item/clothing/shoes/brown = 5, + /obj/item/clothing/shoes/blue = 5, + /obj/item/clothing/shoes/green = 5, + /obj/item/clothing/shoes/yellow = 5, + /obj/item/clothing/shoes/purple = 5, + /obj/item/clothing/shoes/red = 5, + /obj/item/clothing/shoes/white = 5, + ) + premium = list( + /obj/item/clothing/under/color/rainbow = 5, + /obj/item/clothing/under/color/rainbow_skirt = 5, + /obj/item/clothing/shoes/rainbow = 10, + ) + contraband = list( + /obj/item/clothing/under/psyche = 5, ) /obj/machinery/vending/loadout/accessory @@ -130,15 +262,32 @@ /obj/item/clothing/accessory/collar/pink = 5, /obj/item/clothing/accessory/collar/holo = 5, /obj/item/clothing/accessory/collar/shock = 5, + /obj/item/clothing/accessory/cowledvest = 5, /obj/item/storage/belt/fannypack = 1, /obj/item/storage/belt/fannypack/white = 5, /obj/item/clothing/accessory/fullcape = 5, /obj/item/clothing/accessory/halfcape = 5, /obj/item/clothing/accessory/hawaii = 5, + /obj/item/clothing/accessory/hawaii/red = 5, /obj/item/clothing/accessory/hawaii/random = 5, /obj/item/clothing/accessory/locket = 5, + /obj/item/clothing/accessory/metal_necklace = 5, + /obj/item/clothing/accessory/halo_projector = 5, /obj/item/storage/backpack/purse = 1, /obj/item/clothing/accessory/sash = 5, + /obj/item/clothing/accessory/mekkyaku = 5, + /obj/item/clothing/accessory/armsocks = 5, + /obj/item/clothing/accessory/armsock_left = 5, + /obj/item/clothing/accessory/armsock_right = 5, + /obj/item/clothing/accessory/gaiter = 5, + /obj/item/clothing/accessory/gaiter/tan = 5, + /obj/item/clothing/accessory/gaiter/gray = 5, + /obj/item/clothing/accessory/gaiter/green = 5, + /obj/item/clothing/accessory/gaiter/blue = 5, + /obj/item/clothing/accessory/gaiter/purple = 5, + /obj/item/clothing/accessory/gaiter/orange = 5, + /obj/item/clothing/accessory/gaiter/charcoal = 5, + /obj/item/clothing/accessory/gaiter/snow = 5, /obj/item/clothing/accessory/scarf = 5, /obj/item/clothing/accessory/scarf/red = 5, /obj/item/clothing/accessory/scarf/darkblue = 5, @@ -153,6 +302,7 @@ /obj/item/clothing/accessory/scarf/stripedred = 5, /obj/item/clothing/accessory/scarf/stripedgreen = 5, /obj/item/clothing/accessory/scarf/stripedblue = 5, + /obj/item/clothing/accessory/tajaran/scarf = 5, /obj/item/clothing/accessory/jacket = 5, /obj/item/clothing/accessory/jacket/checkered = 5, /obj/item/clothing/accessory/jacket/burgundy = 5, @@ -193,17 +343,29 @@ /obj/item/clothing/accessory/wcoat/swvest = 5, /obj/item/clothing/accessory/wcoat/swvest/blue = 5, /obj/item/clothing/accessory/wcoat/swvest/red = 5, + /obj/item/clothing/accessory/buttonup = 5, + /obj/item/clothing/accessory/buttonup/untucked = 5, + /obj/item/clothing/accessory/flops = 5, + /obj/item/clothing/accessory/civ_exos_mob = 5, /obj/item/storage/wallet = 5, /obj/item/storage/wallet/poly = 5, /obj/item/storage/wallet/womens = 5, + /obj/item/haircomb = 5, /obj/item/lipstick = 5, /obj/item/lipstick/purple = 5, /obj/item/lipstick/jade = 5, /obj/item/lipstick/black = 5, + /obj/item/lipstick/cyan = 5, + /obj/item/lipstick/maroon = 5, + /obj/item/lipstick/orange = 5, + /obj/item/lipstick/pink = 5, + /obj/item/lipstick/white = 5, + /obj/item/lipstick/yellow = 5, /obj/item/clothing/ears/earmuffs = 5, /obj/item/clothing/ears/earmuffs/headphones = 5, /obj/item/clothing/ears/earring/stud = 5, /obj/item/clothing/ears/earring/dangle = 5, + /obj/item/clothing/ears/laurel = 5, /obj/item/clothing/gloves/ring/mariner = 5, /obj/item/clothing/gloves/ring/engagement = 5, /obj/item/clothing/gloves/ring/seal/signet = 5, @@ -218,18 +380,44 @@ /obj/item/clothing/glasses/thin = 5, /obj/item/clothing/glasses/monocle = 5, /obj/item/clothing/glasses/goggles = 5, + /obj/item/clothing/glasses/regular/scanners = 5, + /obj/item/clothing/glasses/fluff/spiffygogs = 5, + /obj/item/clothing/glasses/redglasses = 5, + /obj/item/clothing/glasses/orangeglasses = 5, /obj/item/clothing/glasses/fluff/spiffygogs = 5, /obj/item/clothing/glasses/fakesunglasses = 5, /obj/item/clothing/glasses/fakesunglasses/aviator = 5, + /obj/item/clothing/glasses/sunglasses/fakeblindfold/whiteblindfold = 5, /obj/item/clothing/mask/bandana/blue = 5, /obj/item/clothing/mask/bandana/gold = 5, /obj/item/clothing/mask/bandana/green = 5, /obj/item/clothing/mask/bandana/red = 5, /obj/item/clothing/mask/surgical = 5, + /obj/item/clothing/mask/gas/half = 5, /obj/item/clothing/mask/warmer = 5, - ) - premium = list(/obj/item/bedsheet/rainbow = 1) - contraband = list(/obj/item/clothing/mask/gas/clown_hat = 1) + ) + premium = list( + /obj/item/bedsheet/rainbow = 5, + /obj/item/clothing/ears/laurel/silver = 5, + /obj/item/clothing/ears/laurel/gold = 5, + /obj/item/clothing/accessory/storage/laconic = 5, //putting all of the storage accessories in premium + /obj/item/clothing/accessory/storage/webbing = 5, //these can also be ordered from Cargo + /obj/item/clothing/accessory/storage/brown_vest = 5, + /obj/item/clothing/accessory/storage/black_vest = 5, + /obj/item/clothing/accessory/storage/white_vest = 5, + /obj/item/clothing/accessory/storage/black_drop_pouches = 5, + /obj/item/clothing/accessory/storage/brown_drop_pouches = 5, + /obj/item/clothing/accessory/storage/white_drop_pouches = 5, + ) + contraband = list( + /obj/item/clothing/mask/gas/clown_hat = 5, + /obj/item/clothing/accessory/disenchanted_talisman = 5, + /obj/item/clothing/glasses/badglasses = 5, + /obj/item/clothing/glasses/sunglasses/blindfold/whiteblindfold = 5, + /obj/item/clothing/mask/bandana/skull = 5, + /obj/item/clothing/mask/balaclava = 5, + /obj/item/clothing/mask/muzzle = 5, + ) price_default = 10 /obj/machinery/vending/loadout/clothing @@ -253,6 +441,12 @@ /obj/item/clothing/under/cheongsam/green = 5, /obj/item/clothing/under/cheongsam/purple = 5, /obj/item/clothing/under/cheongsam/darkblue = 5, + /obj/item/clothing/under/future_fashion = 5, + /obj/item/clothing/under/future_fashion/green_striped = 5, + /obj/item/clothing/under/future_fashion/light_blue_striped = 5, + /obj/item/clothing/under/future_fashion/orange_striped = 5, + /obj/item/clothing/under/future_fashion/purple_striped = 5, + /obj/item/clothing/under/future_fashion/red_striped = 5, /obj/item/clothing/under/croptop = 5, /obj/item/clothing/under/croptop/red = 5, /obj/item/clothing/under/croptop/grey = 5, @@ -262,43 +456,73 @@ /obj/item/clothing/under/dress/dress_fire = 5, /obj/item/clothing/under/dress/flamenco = 5, /obj/item/clothing/under/dress/flower_dress = 5, + /obj/item/clothing/under/festivedress = 5, + /obj/item/clothing/under/verglasdress = 5, + /obj/item/clothing/under/businessskirt_female = 5, + /obj/item/clothing/under/simpledress = 5, + /obj/item/clothing/under/dress/twistdress = 5, + /obj/item/clothing/under/dress/cropdress = 5, + /obj/item/clothing/under/dress/summer = 5, + /obj/item/clothing/under/dress/summer/blue = 5, + /obj/item/clothing/under/dress/summer/red = 5, + /obj/item/clothing/under/dress/summer/gold = 5, /obj/item/clothing/under/fluff/gnshorts = 5, + /obj/item/clothing/under/color/ranger = 5, /obj/item/clothing/under/color = 5, /obj/item/clothing/under/color/aqua = 5, /obj/item/clothing/under/color/black = 5, /obj/item/clothing/under/color/blackf = 5, - /obj/item/clothing/under/color/blackjumpskirt = 5, + /obj/item/clothing/under/color/darkblue = 5, /obj/item/clothing/under/color/blue = 5, /obj/item/clothing/under/color/brown = 5, - /obj/item/clothing/under/color/darkblue = 5, - /obj/item/clothing/under/color/darkred = 5, - /obj/item/clothing/under/color/green = 5, - /obj/item/clothing/under/color/grey = 5, - /obj/item/clothing/under/color/lightblue = 5, /obj/item/clothing/under/color/lightbrown = 5, + /obj/item/clothing/under/color/green = 5, /obj/item/clothing/under/color/lightgreen = 5, - /obj/item/clothing/under/color/lightpurple = 5, - /obj/item/clothing/under/color/lightred = 5, + /obj/item/clothing/under/color/grey = 5, /obj/item/clothing/under/color/orange = 5, /obj/item/clothing/under/color/pink = 5, - /obj/item/clothing/under/color/prison = 5, - /obj/item/clothing/under/color/ranger = 5, /obj/item/clothing/under/color/red = 5, /obj/item/clothing/under/color/white = 5, /obj/item/clothing/under/color/yellow = 5, /obj/item/clothing/under/color/yellowgreen = 5, + /obj/item/clothing/under/color/lightred = 5, + /obj/item/clothing/under/color/darkred = 5, + /obj/item/clothing/under/color/blackjumpskirt = 5, + /obj/item/clothing/under/color/pink_skirt = 5, + /obj/item/clothing/under/color/black_skirt = 5, + /obj/item/clothing/under/color/lgreen_skirt = 5, + /obj/item/clothing/under/color/green_skirt = 5, + /obj/item/clothing/under/color/orange_skirt = 5, + /obj/item/clothing/under/color/yellow_skirt = 5, + /obj/item/clothing/under/color/white_skirt = 5, + /obj/item/clothing/under/color/grey_skirt = 5, + /obj/item/clothing/under/color/lbrown_skirt = 5, + /obj/item/clothing/under/color/brown_skirt = 5, + /obj/item/clothing/under/color/red_skirt = 5, + /obj/item/clothing/under/color/teal_skirt = 5, + /obj/item/clothing/under/color/lblue_skirt = 5, + /obj/item/clothing/under/color/blue_skirt = 5, + /obj/item/clothing/under/color/lpurple_skirt = 5, + /obj/item/clothing/under/color/maroon_skirt = 5, + /obj/item/clothing/under/color/pink_skirt = 5, + /obj/item/clothing/under/assistantformal = 5, + /obj/item/clothing/under/assistantformal_fem = 5, /obj/item/clothing/under/brandjumpsuit/aether = 5, /obj/item/clothing/under/brandjumpsuit/focal = 5, /obj/item/clothing/under/brandjumpsuit/hephaestus = 5, /obj/item/clothing/under/brandjumpsuit/wardt = 5, /obj/item/clothing/under/kilt = 5, - /obj/item/clothing/under/fluff/latexmaid = 5, + /obj/item/clothing/under/blueshortskirt = 5, /obj/item/clothing/under/dress/lilacdress = 5, + /obj/item/clothing/under/dress/white = 5, /obj/item/clothing/under/dress/white2 = 5, + /obj/item/clothing/under/dress/white3 = 5, /obj/item/clothing/under/dress/white4 = 5, + /obj/item/clothing/under/fluff/latexmaid = 5, /obj/item/clothing/under/dress/maid = 5, /obj/item/clothing/under/dress/maid/sexy = 5, /obj/item/clothing/under/dress/maid/janitor = 5, + /obj/item/clothing/under/dress/maid/neko = 5, /obj/item/clothing/head/headband/maid = 5, /obj/item/clothing/under/kamishimo = 5, /obj/item/clothing/under/kimono = 5, @@ -325,6 +549,15 @@ /obj/item/clothing/under/oldwoman = 5, /obj/item/clothing/under/frontier = 5, /obj/item/clothing/under/brandjumpsuit/mbill = 5, + /obj/item/clothing/under/laconic = 5, + /obj/item/clothing/under/blueshift = 5, + /obj/item/clothing/under/office_worker = 5, + /obj/item/clothing/under/pants = 5, + /obj/item/clothing/under/pants/white = 5, + /obj/item/clothing/under/pants/red = 5, + /obj/item/clothing/under/pants/black = 5, + /obj/item/clothing/under/pants/tan = 5, + /obj/item/clothing/under/pants/khaki = 5, /obj/item/clothing/under/pants/baggy/ = 5, /obj/item/clothing/under/pants/baggy/classicjeans = 5, /obj/item/clothing/under/pants/baggy/mustangjeans = 5, @@ -351,8 +584,10 @@ /obj/item/clothing/under/pants/track/green = 5, /obj/item/clothing/under/pants/track/blue = 5, /obj/item/clothing/under/pants/yogapants = 5, + /obj/item/clothing/under/utility_fur_pants = 5, + /obj/item/clothing/under/tracksuit_blue = 5, /obj/item/clothing/under/ascetic = 5, - /obj/item/clothing/under/dress/white3 = 5, + /obj/item/clothing/under/ascetic_fem = 5, /obj/item/clothing/under/skirt/pleated = 5, /obj/item/clothing/under/dress/darkred = 5, /obj/item/clothing/under/dress/redeveninggown = 5, @@ -360,6 +595,7 @@ /obj/item/clothing/under/dress/sailordress = 5, /obj/item/clothing/under/dress/sari = 5, /obj/item/clothing/under/dress/sari/green = 5, + /obj/item/clothing/under/pentagramdress = 5, /obj/item/clothing/under/shorts/red = 5, /obj/item/clothing/under/shorts/green = 5, /obj/item/clothing/under/shorts/blue = 5, @@ -367,12 +603,17 @@ /obj/item/clothing/under/shorts/grey = 5, /obj/item/clothing/under/shorts/white = 5, /obj/item/clothing/under/shorts/jeans = 5, - /obj/item/clothing/under/shorts/jeans/ = 5, + /obj/item/clothing/under/shorts/jeans/female = 5, /obj/item/clothing/under/shorts/jeans/classic = 5, + /obj/item/clothing/under/shorts/jeans/classic/female = 5, /obj/item/clothing/under/shorts/jeans/mustang = 5, + /obj/item/clothing/under/shorts/jeans/mustang/female = 5, /obj/item/clothing/under/shorts/jeans/youngfolks = 5, + /obj/item/clothing/under/shorts/jeans/youngfolks/female = 5, /obj/item/clothing/under/shorts/jeans/black = 5, + /obj/item/clothing/under/shorts/jeans/black/female = 5, /obj/item/clothing/under/shorts/jeans/grey = 5, + /obj/item/clothing/under/shorts/jeans/grey/female = 5, /obj/item/clothing/under/shorts/khaki/ = 5, /obj/item/clothing/under/skirt/loincloth = 5, /obj/item/clothing/under/skirt/khaki = 5, @@ -384,7 +625,11 @@ /obj/item/clothing/under/skirt/outfit/plaid_red = 5, /obj/item/clothing/under/skirt/outfit/plaid_purple = 5, /obj/item/clothing/under/skirt/outfit/plaid_green = 5, + /obj/item/clothing/under/greyskirt_female = 5, + /obj/item/clothing/under/overalls = 5, + /obj/item/clothing/under/overalls_fem = 5, /obj/item/clothing/under/overalls/sleek = 5, + /obj/item/clothing/under/overalls/sleek_fem = 5, /obj/item/clothing/under/sl_suit = 5, /obj/item/clothing/under/gentlesuit = 5, /obj/item/clothing/under/gentlesuit/skirt = 5, @@ -405,16 +650,38 @@ /obj/item/clothing/under/suit_jacket/checkered/skirt = 5, /obj/item/clothing/under/suit_jacket/tan = 5, /obj/item/clothing/under/suit_jacket/tan/skirt = 5, + /obj/item/clothing/under/lawyer = 5, + /obj/item/clothing/under/lawyer/black = 5, + /obj/item/clothing/under/lawyer/black/skirt = 5, + /obj/item/clothing/under/lawyer/female = 5, + /obj/item/clothing/under/lawyer/red = 5, + /obj/item/clothing/under/lawyer/red/skirt = 5, + /obj/item/clothing/under/lawyer/blue = 5, + /obj/item/clothing/under/lawyer/blue/skirt = 5, + /obj/item/clothing/under/lawyer/bluesuit = 5, + /obj/item/clothing/under/lawyer/bluesuit/skirt = 5, + /obj/item/clothing/under/lawyer/purpsuit = 5, + /obj/item/clothing/under/lawyer/purpsuit/skirt = 5, + /obj/item/clothing/under/lawyer/oldman = 5, + /obj/item/clothing/under/fiendsuit = 5, + /obj/item/clothing/under/fienddress = 5, + /obj/item/clothing/under/sitri = 5, /obj/item/clothing/under/scratch = 5, /obj/item/clothing/under/scratch/skirt = 5, /obj/item/clothing/under/sundress = 5, /obj/item/clothing/under/sundress_white = 5, /obj/item/clothing/under/turtlebaggy = 5, + /obj/item/clothing/under/turtlebaggy/cream_fem = 5, /obj/item/clothing/under/turtlebaggy/purple = 5, + /obj/item/clothing/under/turtlebaggy/purple_fem = 5, /obj/item/clothing/under/turtlebaggy/red = 5, + /obj/item/clothing/under/turtlebaggy/red_fem = 5, /obj/item/clothing/under/turtlebaggy/blue = 5, + /obj/item/clothing/under/turtlebaggy/blue_fem = 5, /obj/item/clothing/under/turtlebaggy/green = 5, + /obj/item/clothing/under/turtlebaggy/green_fem = 5, /obj/item/clothing/under/turtlebaggy/black = 5, + /obj/item/clothing/under/turtlebaggy/black_fem = 5, /obj/item/clothing/under/rank/psych/turtleneck/sweater = 5, /obj/item/storage/box/fluff/swimsuit = 5, /obj/item/storage/box/fluff/swimsuit/blue = 5, @@ -432,19 +699,72 @@ /obj/item/storage/box/fluff/swimsuit/highclass = 3, /obj/item/storage/box/fluff/swimsuit/latex = 3, /obj/item/storage/box/rainponcho = 5, + /obj/item/clothing/under/redpyjamas = 5, + /obj/item/clothing/under/redpyjamas_fem = 5, + /obj/item/clothing/under/bluepyjamas = 5, + /obj/item/clothing/under/bluepyjamas_fem = 5, /obj/item/clothing/under/utility = 5, /obj/item/clothing/under/utility/grey = 5, /obj/item/clothing/under/utility/blue = 5, /obj/item/clothing/under/fluff/v_nanovest = 5, /obj/item/clothing/under/dress/westernbustle = 5, + /obj/item/clothing/under/dutchuniform = 5, + /obj/item/clothing/under/victorianblred = 5, + /obj/item/clothing/under/fem_victorianblred = 5, + /obj/item/clothing/under/victorianredvest = 5, + /obj/item/clothing/under/fem_victorianredvest = 5, + /obj/item/clothing/under/victorianvest = 5, + /obj/item/clothing/under/fem_victorianvest = 5, + /obj/item/clothing/under/victorianlightfire = 5, + /obj/item/clothing/under/fem_victorianlightfire = 5, + /obj/item/clothing/under/victorianreddress = 5, + /obj/item/clothing/under/victorianblackdress = 5, + /obj/item/clothing/under/highwayman_clothes = 5, + /obj/item/clothing/under/highwayman_clothes_fem = 5, /obj/item/clothing/under/wedding/bride_white = 5, + /obj/item/clothing/under/wedding/bride_orange = 5, + /obj/item/clothing/under/wedding/bride_purple = 5, + /obj/item/clothing/under/wedding/bride_blue = 5, + /obj/item/clothing/under/wedding/bride_red = 5, /obj/item/clothing/under/redcoatformal = 2, + /obj/item/clothing/under/navy_gray = 5, + /obj/item/clothing/under/smooth_gray = 5, + /obj/item/clothing/under/chiming_dress = 5, + /obj/item/clothing/under/hasie = 5, + /obj/item/clothing/under/littleblackdress = 5, + /obj/item/clothing/under/haltertop = 5, + /obj/item/clothing/under/fluff/siren = 5, + /obj/item/clothing/under/half_moon = 5, + /obj/item/clothing/under/bodysuit = 5, + /obj/item/clothing/under/bodysuit_fem = 5, + /obj/item/clothing/under/bodysuit/bodysuiteva = 5, + /obj/item/clothing/under/bodysuit/bodysuiteva_fem = 5, + /obj/item/clothing/under/bodysuit/alt = 5, + /obj/item/clothing/under/bodysuit/alt_fem = 5, + /obj/item/clothing/under/bodysuit/alt/sleeveless = 5, + /obj/item/clothing/under/bodysuit/alt_fem/sleeveless = 5, + /obj/item/clothing/under/bodysuit/alt/pants = 5, + /obj/item/clothing/under/bodysuit/alt_fem/pants = 5, + /obj/item/clothing/under/skinsuit = 5, + /obj/item/clothing/under/skinsuit_fem = 5, + /obj/item/clothing/under/skinsuit/gray = 5, + /obj/item/clothing/under/skinsuit_fem/gray = 5, + /obj/item/clothing/under/skinsuit/leotard = 5, + /obj/item/clothing/under/skinsuit_fem/leotard = 5, + /obj/item/clothing/under/skinsuit/leotard/gray = 5, + /obj/item/clothing/under/skinsuit_fem/leotard/gray = 5, + /obj/item/clothing/under/skinsuit_striped = 5, /obj/item/clothing/under/leotardcolor = 5, /obj/item/clothing/under/leotard = 5, + /obj/item/clothing/under/leotardwindow = 5, + /obj/item/clothing/under/bountyskin = 5, /obj/item/clothing/under/bunnysuit_f = 5, /obj/item/clothing/under/bunnysuit_m = 5, + /obj/item/clothing/under/fashionminiskirt = 5, /obj/item/clothing/under/tabard_w = 5, /obj/item/clothing/under/tabard_b = 5, + /obj/item/clothing/under/hawaiian = 5, + /obj/item/clothing/under/tourist = 5, /obj/item/clothing/under/toga = 5, /obj/item/clothing/under/countess = 5, /obj/item/clothing/under/baroness = 5, @@ -452,15 +772,37 @@ /obj/item/clothing/under/belial = 5, /obj/item/clothing/under/lilin = 5, /obj/item/clothing/under/asmodai = 5, - /obj/item/storage/backpack/ = 5, - /obj/item/storage/backpack/messenger = 5, - /obj/item/storage/backpack/satchel = 5, + /obj/item/clothing/under/tribal_tunic = 5, + /obj/item/clothing/under/tribal_tunic_fem = 5, + /obj/item/clothing/under/druidic_gown = 5, + /obj/item/clothing/under/druidic_gown_fem = 5, + /obj/item/clothing/under/acolyte_hunter = 5, + /obj/item/clothing/under/acolyte_hunter_fem = 5, + /obj/item/clothing/under/shamanblue = 5, + /obj/item/clothing/under/shamanblue_fem = 5, + /obj/item/clothing/under/shamanred = 5, + /obj/item/clothing/under/shamanred_fem = 5, + /obj/item/clothing/under/hunter = 5, + /obj/item/clothing/under/hunter_fem = 5, + /obj/item/clothing/under/gatherer = 5, + /obj/item/clothing/under/gatherer_fem = 5, + /obj/item/storage/backpack = 10, + /obj/item/storage/backpack/messenger = 10, + /obj/item/storage/backpack/satchel = 10, + /obj/item/storage/backpack/rig = 10, + /obj/item/storage/backpack/dufflebag = 10, ) premium = list( /obj/item/clothing/under/color/rainbow = 1, ) contraband = list( /obj/item/clothing/under/rank/clown = 1, + /obj/item/clothing/under/pants/ripped = 5, + /obj/item/clothing/under/pants/classicjeans/ripped = 5, + /obj/item/clothing/under/pants/mustangjeans/ripped = 5, + /obj/item/clothing/under/pants/blackjeans/ripped = 5, + /obj/item/clothing/under/pants/greyjeans/ripped = 5, + /obj/item/clothing/under/blackshortsripped = 5, ) price_default = 10 @@ -483,6 +825,7 @@ /obj/item/paicard = 5, /obj/item/communicator = 10, /obj/item/communicator/watch = 10, + /obj/item/clothing/gloves/size = 10, /obj/item/radio = 10, /obj/item/camera = 5, /obj/item/tape_recorder = 5, @@ -543,9 +886,13 @@ vend_delay = 16 products = list( /obj/item/clothing/suit/storage/apron = 5, + /obj/item/clothing/suit/storage/apron/white = 5, /obj/item/clothing/suit/storage/flannel/aqua = 5, /obj/item/clothing/suit/storage/toggle/bomber = 5, /obj/item/clothing/suit/storage/bomber/alt = 5, + /obj/item/clothing/suit/storage/toggle/bomber/pilot = 5, + /obj/item/clothing/suit/storage/toggle/fur_bomber = 5, + /obj/item/clothing/suit/storage/bomj = 5, /obj/item/clothing/suit/storage/flannel/brown = 5, /obj/item/clothing/suit/storage/toggle/cardigan = 5, /obj/item/clothing/accessory/poncho/roles/cloak/custom = 5, @@ -558,6 +905,7 @@ /obj/item/clothing/suit/greatcoat = 5, /obj/item/clothing/suit/storage/flannel = 5, /obj/item/clothing/suit/storage/greyjacket = 5, + /obj/item/clothing/suit/storage/stripe_jacket = 5, /obj/item/clothing/suit/storage/hazardvest = 5, /obj/item/clothing/suit/storage/toggle/hoodie/black = 5, /obj/item/clothing/suit/storage/toggle/hoodie/red = 5, @@ -577,6 +925,8 @@ /obj/item/clothing/suit/storage/fluff/jacket/special_forces = 5, /obj/item/clothing/suit/kamishimo = 5, /obj/item/clothing/suit/kimono = 5, + /obj/item/clothing/suit/storage/aureate = 5, + /obj/item/clothing/suit/storage/aureate/dark = 5, /obj/item/clothing/suit/storage/toggle/labcoat = 5, /obj/item/clothing/suit/storage/toggle/labcoat/green = 5, /obj/item/clothing/suit/leathercoat = 5, @@ -591,18 +941,81 @@ /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen/sleeveless = 5, /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen/sleeveless = 5, /obj/item/clothing/suit/storage/miljacket = 5, + /obj/item/clothing/suit/storage/miljacket/tan = 5, + /obj/item/clothing/suit/storage/miljacket/grey = 5, /obj/item/clothing/suit/storage/miljacket/alt = 5, + /obj/item/clothing/suit/storage/miljacket/navy = 5, + /obj/item/clothing/suit/storage/miljacket/black = 5, /obj/item/clothing/suit/storage/miljacket/green = 5, + /obj/item/clothing/suit/storage/miljacket/white = 5, + /obj/item/clothing/suit/storage/toggle/moto_jacket = 5, /obj/item/clothing/suit/storage/apron/overalls = 5, /obj/item/clothing/suit/storage/toggle/peacoat = 5, + /obj/item/clothing/suit/storage/dutchcoat = 5, + /obj/item/clothing/suit/storage/tailcoat = 5, + /obj/item/clothing/suit/storage/redladiesvictoriancoat = 5, + /obj/item/clothing/suit/storage/ladiesvictoriancoat = 5, + /obj/item/clothing/suit/darkfur = 5, + /obj/item/clothing/suit/storage/furcoat = 5, + /obj/item/clothing/suit/storage/noble_coat = 5, + /obj/item/clothing/suit/storage/triadkiller = 5, + /obj/item/clothing/suit/storage/hooded/mercy = 5, + /obj/item/clothing/suit/storage/bladerunner = 5, + /obj/item/clothing/suit/storage/overcoat_fancy = 5, + /obj/item/clothing/suit/storage/overcoat_fancy/black = 5, + /obj/item/clothing/suit/storage/cropped_turtleneck = 5, + /obj/item/clothing/suit/storage/cropped_hoodie = 5, + /obj/item/clothing/suit/storage/cropped_hoodie/croppier = 5, + /obj/item/clothing/suit/storage/cropped_hoodie/croppierer = 5, + /obj/item/clothing/suit/storage/cropped_hoodie/croppiest = 5, + /obj/item/clothing/suit/storage/leather_cropped = 5, + /obj/item/clothing/suit/storage/leather_supercropped = 5, + /obj/item/clothing/suit/cropped_sweater = 5, + /obj/item/clothing/suit/cropped_sweater/female = 5, /obj/item/clothing/accessory/poncho = 5, /obj/item/clothing/accessory/poncho/green = 5, /obj/item/clothing/accessory/poncho/red = 5, /obj/item/clothing/accessory/poncho/purple = 5, /obj/item/clothing/accessory/poncho/blue = 5, + /obj/item/clothing/accessory/poncho/dust_cloak = 5, + /obj/item/clothing/accessory/poncho/dust_cloak/dark = 5, + /obj/item/clothing/accessory/poncho/dust_cloak/white = 5, + /obj/item/clothing/accessory/poncho/roles/cloak/custom = 5, + /obj/item/clothing/accessory/poncho/roles/cloak/glowing = 5, + /obj/item/clothing/accessory/poncho/roles/cloak/glowingdark = 5, + /obj/item/clothing/accessory/poncho/rough_cloak = 5, + /obj/item/clothing/accessory/poncho/rough_cloak/tan = 5, + /obj/item/clothing/suit/storage/toggle/slimleather = 5, + /obj/item/clothing/suit/storage/toggle/heated/ronincoat = 5, + /obj/item/clothing/suit/storage/toggle/heated = 5, + /obj/item/clothing/suit/storage/toggle/heated/half_pint = 5, + /obj/item/clothing/suit/storage/runner/half_moon = 5, /obj/item/clothing/suit/jacket/puffer = 5, /obj/item/clothing/suit/jacket/puffer/vest = 5, + /obj/item/clothing/suit/storage/toggle/brown_fancycoat = 5, + /obj/item/clothing/suit/storage/toggle/brown_fancycoat/black = 5, /obj/item/clothing/suit/storage/flannel/red = 5, + /obj/item/clothing/suit/storage/cyberpunk = 5, + /obj/item/clothing/suit/storage/cyberpunk/green = 5, + /obj/item/clothing/suit/storage/cyberpunk/black = 5, + /obj/item/clothing/suit/storage/cyberpunk/white = 5, + /obj/item/clothing/suit/storage/cyberpunk/long = 5, + /obj/item/clothing/suit/storage/cyberpunk/long/green = 5, + /obj/item/clothing/suit/storage/cyberpunk/long/black = 5, + /obj/item/clothing/suit/storage/cyberpunk/long/white = 5, + /obj/item/clothing/suit/storage/toggle/cybersun_paramedic = 5, + /obj/item/clothing/suit/storage/drive = 5, + /obj/item/clothing/suit/storage/drive/boxer = 5, + /obj/item/clothing/suit/storage/tunnelsnake = 5, + /obj/item/clothing/suit/storage/violet = 5, + /obj/item/clothing/suit/storage/jamrock = 5, + /obj/item/clothing/suit/storage/khaki = 5, + /obj/item/clothing/suit/storage/punkvest = 5, + /obj/item/clothing/suit/storage/onestar = 5, + /obj/item/clothing/suit/storage/vest/formal/dark = 5, + /obj/item/clothing/suit/storage/vest/formal/dark/caped = 5, + /obj/item/clothing/suit/storage/vest/formal/bleached = 5, + /obj/item/clothing/suit/laconic = 5, /obj/item/clothing/suit/unathi/robe = 5, /obj/item/clothing/suit/storage/snowsuit = 5, /obj/item/clothing/suit/storage/toggle/internalaffairs = 5, @@ -622,19 +1035,38 @@ /obj/item/clothing/suit/varsity/green = 5, /obj/item/clothing/suit/varsity/blue = 5, /obj/item/clothing/suit/varsity/brown = 5, + /obj/item/clothing/suit/storage/pullover = 5, + /obj/item/clothing/suit/storage/pullover/nt = 5, + /obj/item/clothing/suit/storage/mekkyaku = 5, + /obj/item/clothing/suit/storage/toggle/navy_coat_blue = 5, + /obj/item/clothing/suit/storage/toggle/navy_coat_brown = 5, + /obj/item/clothing/suit/storage/toggle/navy_coat_green = 5, + /obj/item/clothing/suit/storage/utility_fur_coat = 5, /obj/item/clothing/suit/storage/hooded/wintercoat = 5, /obj/item/clothing/suit/storage/hooded/wintercoat/aformal = 5, + /obj/item/clothing/suit/storage/hooded/wintercoat/olive = 5, + /obj/item/clothing/suit/storage/hooded/techpriest = 5, + /obj/item/clothing/suit/storage/hooded/vainglorious = 5, + /obj/item/clothing/suit/storage/hooded/raincoat = 5, + /obj/item/clothing/suit/storage/hooded/rainponcho = 5, /obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey = 5, - /obj/item/clothing/suit/storage/gothcoat = 3, - /obj/item/clothing/suit/storage/hobo = 3, - /obj/item/clothing/suit/storage/kamina = 3, - /obj/item/clothing/suit/nerdshirt = 3, + /obj/item/clothing/suit/storage/gothcoat = 5, + /obj/item/clothing/suit/storage/hobo = 5, + /obj/item/clothing/suit/storage/kamina = 5, + /obj/item/clothing/suit/highwayman_jacket = 5, + /obj/item/clothing/suit/nerdshirt = 5, ) premium = list( /obj/item/clothing/suit/imperium_monk = 3, + /obj/item/clothing/suit/storage/hooded/wintercoat/ratvar/fake = 3, + /obj/item/clothing/suit/storage/hooded/wintercoat/narsie/fake = 3, + /obj/item/clothing/suit/storage/hooded/wintercoat/cosmic = 3, ) contraband = list( /obj/item/toy/katana = 1, + /obj/item/clothing/accessory/poncho/rough_cloak_torn = 5, + /obj/item/clothing/accessory/poncho/rough_cloak_torn/tan = 5, + /obj/item/clothing/suit/storage/toggle/varsity/worn = 5, ) price_default = 10 @@ -644,6 +1076,8 @@ product_ads = "Don't let your art be stifled!;Remember, practice makes perfect!;Break a leg!;Don't make me get the cane!;Thespian's Delight entering stage right!;Costumes for your acting needs!" icon_state = "Theater_b" products = list( + /obj/item/clothing/under/ballet = 5, + /obj/item/clothing/shoes/ballet = 5, /obj/item/clothing/suit/storage/hooded/carp_costume = 3, /obj/item/clothing/suit/storage/hooded/carp_costume = 3, /obj/item/clothing/suit/chickensuit = 3, @@ -686,6 +1120,7 @@ /obj/item/clothing/under/owl = 3, /obj/item/clothing/mask/gas/owl_mask = 3, /obj/item/clothing/under/waiter = 3, + /obj/item/clothing/under/waiter_fem = 3, /obj/item/clothing/suit/storage/apron = 3, /obj/item/clothing/under/pirate = 3, /obj/item/clothing/head/pirate = 3, @@ -787,6 +1222,10 @@ /obj/item/clothing/under/general = 3, /obj/item/clothing/under/american = 3, /obj/item/clothing/under/prussian = 3, + /obj/item/clothing/suit/samurai_replica = 3, + /obj/item/clothing/head/samurai_replica = 3, + /obj/item/clothing/mask/samurai = 3, + /obj/item/clothing/mask/samurai/colorable = 3, ) premium = list( /obj/item/clothing/suit/imperium_monk = 3, diff --git a/code/modules/loadout/loadout_suit.dm b/code/modules/loadout/loadout_suit.dm index d946895514e5..67ea272130d0 100644 --- a/code/modules/loadout/loadout_suit.dm +++ b/code/modules/loadout/loadout_suit.dm @@ -240,7 +240,7 @@ name = "Winter Coat" path = /obj/item/clothing/suit/storage/hooded/wintercoat -/datum/loadout_entry/suit/wintercoat +/datum/loadout_entry/suit/wintercoat/formal name = "Winter Coat - Assistant Formal" path = /obj/item/clothing/suit/storage/hooded/wintercoat/aformal @@ -488,6 +488,10 @@ name = "Brown Fancy Coat" path = /obj/item/clothing/suit/storage/toggle/brown_fancycoat +/datum/loadout_entry/suit/blackfancycoat + name = "Black Fancy Coat" + path = /obj/item/clothing/suit/storage/toggle/brown_fancycoat/black + /datum/loadout_entry/suit/motojacket name = "Motorcycle Jacket" path = /obj/item/clothing/suit/storage/toggle/moto_jacket @@ -520,6 +524,10 @@ name = "Fancy Overcoat Brown" path = /obj/item/clothing/suit/storage/overcoat_fancy +/datum/loadout_entry/suit/overcoat_fancy/black + name = "Fancy Overcoat Black" + path = /obj/item/clothing/suit/storage/overcoat_fancy/black + /datum/loadout_entry/suit/drive name = "Relatable Jacket" path = /obj/item/clothing/suit/storage/drive From 9e4a02ead7efe81fda86b91d1ea19434d6680553 Mon Sep 17 00:00:00 2001 From: DeltaDav <121488347+DeltaDav@users.noreply.github.com> Date: Wed, 22 Jan 2025 18:39:05 +0100 Subject: [PATCH 16/16] Easy and simple fix to the Scoophead (#6971) --- .../levels/nebula_tradeport.dmm | 194 +++++++----------- .../nebula_tradeport-shuttles.dm | 2 +- 2 files changed, 78 insertions(+), 118 deletions(-) diff --git a/maps/sectors/nebula_tradeport/levels/nebula_tradeport.dmm b/maps/sectors/nebula_tradeport/levels/nebula_tradeport.dmm index e2f1549489e5..9762a57a72b0 100644 --- a/maps/sectors/nebula_tradeport/levels/nebula_tradeport.dmm +++ b/maps/sectors/nebula_tradeport/levels/nebula_tradeport.dmm @@ -19715,9 +19715,6 @@ /obj/effect/floor_decal/spline/fancy/wood, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel) -"bqy" = ( -/turf/simulated/wall/prepainted/exploration, -/area/shuttle/scoophead/main2) "bqF" = ( /obj/effect/floor_decal/corner/red/border{ dir = 9 @@ -19764,7 +19761,7 @@ id = "scoophead_office" }, /turf/simulated/floor/plating, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "bsc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -19785,7 +19782,7 @@ dir = 9 }, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "btw" = ( /obj/machinery/atmospherics/portables_connector{ dir = 1 @@ -19870,7 +19867,7 @@ id = "scoophead_office" }, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "bEl" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 10 @@ -19913,7 +19910,7 @@ icon_state = "4-8" }, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "bHd" = ( /obj/structure/aquarium/prefilled, /turf/simulated/floor/carpet/turcarpet, @@ -20561,7 +20558,7 @@ req_one_access = null }, /turf/simulated/floor/plating, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "dzE" = ( /obj/structure/toilet{ dir = 4 @@ -20599,7 +20596,7 @@ id = "scoophead_room" }, /turf/simulated/floor/plating, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "dCd" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 9 @@ -20656,7 +20653,7 @@ dir = 4 }, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "dGF" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, /obj/structure/curtain/black, @@ -20739,12 +20736,6 @@ /obj/machinery/fire_alarm/south_mount, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room1) -"dPi" = ( -/obj/structure/cable/pink{ - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/main) "dQr" = ( /obj/structure/bed/padded, /obj/machinery/fire_alarm/north_mount, @@ -20962,10 +20953,6 @@ dir = 8; light_range = 12 }, -/obj/machinery/power/apc/hyper/west_mount, -/obj/structure/cable/pink{ - dir = 8 - }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/scoophead/main) "ekB" = ( @@ -21129,7 +21116,7 @@ pixel_x = -32 }, /turf/simulated/floor/carpet/patterened/blue, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "eEX" = ( /obj/structure/simple_door/hardwood, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -21347,7 +21334,7 @@ id = "scoophead_office" }, /turf/simulated/floor/plating, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "fir" = ( /obj/machinery/computer/ship/sensors, /obj/effect/floor_decal/techfloor{ @@ -21465,7 +21452,7 @@ }, /obj/machinery/power/apc/alarms_hidden/south_mount, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "fFF" = ( /obj/structure/table/steel_reinforced, /obj/machinery/atmospherics/component/unary/vent_pump/on{ @@ -22119,7 +22106,7 @@ id = "scoophead_office" }, /turf/simulated/floor/plating, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "hyI" = ( /obj/structure/table/hardwoodtable, /obj/machinery/chemical_dispenser/catering/bar_coffee{ @@ -22242,6 +22229,9 @@ /obj/machinery/light{ dir = 4 }, +/obj/structure/cable/pink{ + icon_state = "2-4" + }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/scoophead/main) "hMU" = ( @@ -22644,7 +22634,7 @@ icon_state = "4-8" }, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "iQo" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/meter, @@ -22693,7 +22683,7 @@ /obj/structure/curtain/open/shower, /obj/structure/simple_door/wood, /turf/simulated/floor/tiled/neutral, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "jdu" = ( /obj/machinery/washing_machine, /obj/item/storage/laundry_basket{ @@ -22777,7 +22767,7 @@ pixel_x = 32 }, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "jpc" = ( /obj/structure/window/reinforced/polarized{ dir = 8; @@ -22785,7 +22775,7 @@ }, /obj/spawner/window/low_wall/reinforced/full/firelocks, /turf/simulated/floor/plating, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "juq" = ( /obj/effect/debris/cleanable/dirt, /turf/simulated/floor/tiled/old_tile/blue, @@ -22968,7 +22958,7 @@ dir = 4 }, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "jQe" = ( /obj/machinery/computer/ship/helm{ dir = 1 @@ -23276,6 +23266,10 @@ /obj/machinery/atmospherics/pipe/tank/air{ dir = 8 }, +/obj/structure/cable/pink{ + icon_state = "2-4"; + dir = 8 + }, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/scoophead/engineering) "kJj" = ( @@ -23575,9 +23569,6 @@ /obj/effect/floor_decal/corner/blue/border{ dir = 8 }, -/obj/structure/cable/pink{ - icon_state = "1-2" - }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/scoophead/main) "ltU" = ( @@ -23588,7 +23579,7 @@ /area/sector/nebula_tradeport/motel) "luK" = ( /turf/simulated/floor/wood, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "luQ" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, /obj/structure/curtain/open/black, @@ -24005,12 +23996,12 @@ /obj/effect/floor_decal/corner/blue/border{ dir = 4 }, -/obj/structure/cable/pink{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 6 }, +/obj/structure/cable/pink{ + icon_state = "1-8" + }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/scoophead/main) "mAL" = ( @@ -24116,9 +24107,6 @@ }, /turf/simulated/wall/r_wall/prepainted/command, /area/shuttle/arrowhead) -"mLx" = ( -/turf/simulated/wall/prepainted/command, -/area/shuttle/scoophead/main2) "mMt" = ( /obj/effect/shuttle_landmark/triumph/trade/arrowhead, /obj/overmap/entity/visitable/ship/landable/trade/arrowhead, @@ -24274,7 +24262,7 @@ icon_state = "4-8" }, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "nkf" = ( /obj/machinery/atmospherics/pipe/tank/air{ dir = 8 @@ -24457,9 +24445,6 @@ req_access = list(160); req_one_access = null }, -/obj/structure/cable/pink{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -24733,7 +24718,7 @@ /obj/item/pen/fountain, /obj/item/pen, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "oFP" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -24842,7 +24827,7 @@ id = "scoophead_room" }, /turf/simulated/floor/wood, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "pfv" = ( /obj/structure/cable/yellow{ icon_state = "0-8" @@ -25412,6 +25397,12 @@ }, /turf/simulated/floor/tiled/white, /area/sector/nebula_tradeport/medical/public) +"qOQ" = ( +/obj/structure/cable/pink{ + icon_state = "4-8" + }, +/turf/simulated/wall/prepainted/command, +/area/shuttle/scoophead/engineering) "qPf" = ( /obj/effect/debris/cleanable/molten_item, /turf/simulated/floor/plating, @@ -25484,14 +25475,7 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/scoophead/main) "qXy" = ( -/obj/structure/cable/pink{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/cyan, -/obj/structure/cable/pink{ - icon_state = "2-4"; - dir = 4 - }, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/scoophead/engineering) "qYk" = ( @@ -25515,7 +25499,7 @@ /obj/structure/bed/pod, /obj/item/bedsheet/brown, /turf/simulated/floor/carpet/patterened/blue, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "rbV" = ( /obj/effect/floor_decal/techfloor{ dir = 1 @@ -25601,9 +25585,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, -/obj/structure/cable/pink{ - icon_state = "1-2" - }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/scoophead/main) "rrC" = ( @@ -25812,20 +25793,6 @@ /obj/structure/undies_wardrobe, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room7) -"rYx" = ( -/obj/machinery/door/airlock/command{ - name = "Captain's Quarters"; - req_access = list(160); - req_one_access = null - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/obj/structure/cable/pink{ - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/shuttle/scoophead/main2) "rYV" = ( /obj/machinery/light, /obj/structure/flora/pottedplant/drooping, @@ -25920,9 +25887,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, -/obj/structure/cable/pink{ - icon_state = "4-8" - }, /turf/simulated/wall/rshull, /area/shuttle/scoophead/main) "swc" = ( @@ -26306,7 +26270,7 @@ /obj/item/storage/single_use/mre/random, /obj/item/storage/single_use/mre/random, /turf/simulated/floor/carpet/patterened/blue, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "tBI" = ( /obj/structure/closet/secure_closet/personal, /obj/item/storage/box/glasses/meta, @@ -26519,10 +26483,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 6 }, +/obj/machinery/power/apc/hyper/west_mount, /obj/structure/cable/pink{ + icon_state = "0-8"; dir = 1 }, -/obj/machinery/power/apc/hyper/west_mount, +/obj/structure/cable/pink{ + icon_state = "4-8" + }, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/scoophead/engineering) "umb" = ( @@ -26537,7 +26505,7 @@ gps_tag = "SCOOP" }, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "umU" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 10 @@ -26580,7 +26548,7 @@ dir = 4 }, /turf/simulated/wall/prepainted/command, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "uuk" = ( /obj/structure/noticeboard{ pixel_y = 29 @@ -26702,7 +26670,7 @@ "uFC" = ( /obj/structure/table/woodentable, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "uHN" = ( /obj/machinery/light{ dir = 1 @@ -26830,7 +26798,7 @@ pixel_x = 32 }, /turf/simulated/floor/wood, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "vff" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -27126,7 +27094,7 @@ dir = 4 }, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "wlu" = ( /obj/machinery/shipsensors, /turf/simulated/floor/plating, @@ -27178,7 +27146,7 @@ dir = 4 }, /turf/simulated/floor/tiled/neutral, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "wqt" = ( /obj/structure/shuttle/engine/heater{ dir = 4 @@ -27220,7 +27188,7 @@ dir = 9 }, /turf/simulated/floor/carpet/patterened/red, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "wvG" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled/neutral, @@ -27371,8 +27339,7 @@ dir = 8 }, /obj/structure/cable/pink{ - icon_state = "2-4"; - dir = 8 + icon_state = "1-2" }, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/scoophead/engineering) @@ -27392,10 +27359,6 @@ }, /turf/simulated/floor/wood, /area/sector/nebula_tradeport/motel/room7) -"wSZ" = ( -/obj/spawner/window/low_wall/reinforced/full/firelocks, -/turf/simulated/floor/plating, -/area/shuttle/scoophead/main2) "wUd" = ( /obj/structure/bed/padded, /obj/machinery/fire_alarm/north_mount, @@ -27412,9 +27375,6 @@ /obj/structure/cable/pink{ icon_state = "4-8" }, -/obj/structure/cable/pink{ - icon_state = "2-4" - }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/scoophead/main) "wXc" = ( @@ -27614,13 +27574,13 @@ }, /obj/machinery/computer/shuttle_control/explore/trade/scoophead, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "xvE" = ( /obj/structure/bed/chair/shuttle{ dir = 8 }, /turf/simulated/floor/tiled/techfloor, -/area/shuttle/scoophead/main2) +/area/shuttle/scoophead/main) "xwL" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 @@ -54449,13 +54409,13 @@ aDh aDh acd aDh -wSZ -wSZ -wSZ -bqy -bqy -bqy -bqy +gsa +gsa +gsa +kJj +kJj +kJj +kJj aDh aDh awV @@ -54642,15 +54602,15 @@ aDh aDh aDh acd -wSZ -wSZ +gsa +gsa btq umb -mLx +yfg wqg jbA -bqy -bqy +kJj +kJj aDh aDh awV @@ -54836,11 +54796,11 @@ aDh aDh aDh acd -wSZ +gsa xuJ xvE fES -mLx +yfg rai luK eDY @@ -55030,7 +54990,7 @@ aDh aDh aDh aDh -wSZ +gsa dFp jPy nhC @@ -55224,15 +55184,15 @@ aDh aDh aDh aDh -bqy -bqy -mLx -rYx -mLx +kJj +kJj +yfg +hIZ +yfg utC -mLx +yfg jpc -wSZ +gsa aDh aDh awV @@ -57170,7 +57130,7 @@ wWV rqL lsj lsj -dPi +lEv qXs ski aDh @@ -57747,7 +57707,7 @@ aDh aDh aDh qhX -mNP +qOQ nQY mNP mNP diff --git a/maps/sectors/nebula_tradeport/nebula_tradeport-shuttles.dm b/maps/sectors/nebula_tradeport/nebula_tradeport-shuttles.dm index 2d883688a035..e2a7277d220a 100644 --- a/maps/sectors/nebula_tradeport/nebula_tradeport-shuttles.dm +++ b/maps/sectors/nebula_tradeport/nebula_tradeport-shuttles.dm @@ -112,7 +112,7 @@ name = "Scoophead Engine Bay" /area/shuttle/scoophead/main2 - name = "Scoophead TraderSection" + name = "Scoophead Trader Section" //Arrowhead Shuttle