From c58adf1ac0b4597a201c3fa499651f590544a20f Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sun, 25 Sep 2022 16:55:53 -0400 Subject: [PATCH 01/47] fixes psilocybin --- code/modules/reagents/reagents/drugs.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/reagents/reagents/drugs.dm b/code/modules/reagents/reagents/drugs.dm index 3dba29d6f73..28a42a5b48f 100644 --- a/code/modules/reagents/reagents/drugs.dm +++ b/code/modules/reagents/reagents/drugs.dm @@ -143,6 +143,7 @@ M.druggy = max(M.druggy, 30) + var/drug_strength = 20 var/effective_dose = dose if(issmall(M)) effective_dose *= 2 if(effective_dose < 1 * threshold) @@ -156,6 +157,7 @@ M.make_jittery(5) M.make_dizzy(5) M.druggy = max(M.druggy, 35) + M.hallucination = max(M.hallucination, drug_strength * threshold) if(prob(5) && prob_proc == TRUE) M.emote(pick("twitch", "giggle")) prob_proc = FALSE @@ -164,6 +166,7 @@ M.make_jittery(10) M.make_dizzy(10) M.druggy = max(M.druggy, 40) + M.hallucination = max(M.hallucination, drug_strength * threshold) if(prob(10) && prob_proc == TRUE) M.emote(pick("twitch", "giggle")) prob_proc = FALSE From 441a8bbb05c49464e5d2902e2ad22e18cc0ea70f Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sun, 25 Sep 2022 16:58:11 -0400 Subject: [PATCH 02/47] I wanna test changelogs --- html/changelogs/cameron - drugfix.yml | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 html/changelogs/cameron - drugfix.yml diff --git a/html/changelogs/cameron - drugfix.yml b/html/changelogs/cameron - drugfix.yml new file mode 100644 index 00000000000..bd7f032f5d0 --- /dev/null +++ b/html/changelogs/cameron - drugfix.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Cameron + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "psilocybin now makes you hallucinate." From 076137b780c80857a8aee8a61b160f2bf039372d Mon Sep 17 00:00:00 2001 From: "C.L" Date: Mon, 26 Sep 2022 01:00:17 -0400 Subject: [PATCH 03/47] Fixes inability to use multitool on upgraded shields --- .../objects/items/devices/personal_shield_generator_vr.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/devices/personal_shield_generator_vr.dm b/code/game/objects/items/devices/personal_shield_generator_vr.dm index d6b63c4c41a..812f356b38b 100644 --- a/code/game/objects/items/devices/personal_shield_generator_vr.dm +++ b/code/game/objects/items/devices/personal_shield_generator_vr.dm @@ -504,10 +504,10 @@ w_class = ITEMSIZE_SMALL /obj/item/device/personal_shield_generator/belt/mining/attackby(obj/item/weapon/W, mob/user, params) - if(modifier_type == /datum/modifier/shield_projection/mining/strong) - to_chat(user, "This shield generator is already upgraded!") - return if(istype(W, /obj/item/borg/upgrade/shield_upgrade)) + if(modifier_type == /datum/modifier/shield_projection/mining/strong) + to_chat(user, "This shield generator is already upgraded!") + return modifier_type = /datum/modifier/shield_projection/mining/strong to_chat(user, "You upgrade the [src] with the [W]!") user.drop_from_inventory(W) From 3d13836700ca4c68dcc1f817b5ec23fe6ce42688 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Mon, 26 Sep 2022 01:04:11 -0400 Subject: [PATCH 04/47] Makes it mention in the desc if it's upgraded --- .../objects/items/devices/personal_shield_generator_vr.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/game/objects/items/devices/personal_shield_generator_vr.dm b/code/game/objects/items/devices/personal_shield_generator_vr.dm index 812f356b38b..6d105b7b542 100644 --- a/code/game/objects/items/devices/personal_shield_generator_vr.dm +++ b/code/game/objects/items/devices/personal_shield_generator_vr.dm @@ -29,6 +29,7 @@ action_button_name = "Toggle Shield" var/obj/item/weapon/gun/energy/gun/generator/active_weapon var/obj/item/weapon/cell/device/bcell = null + var/upgraded = 0 // If the PSG has been upgraded by some method or not. Only used for the mining belt ATM. var/generator_hit_cost = 100 // Power used when a special effect (such as a bullet being blocked) is performed! Could also be expanded to other things. @@ -78,6 +79,8 @@ /obj/item/device/personal_shield_generator/examine(mob/user) . = ..() if(Adjacent(user)) + if(upgraded) + . += "The unit appears to be upgraded." if(bcell) . += "The internal cell is [round(bcell.percent() )]% charged." else @@ -509,6 +512,7 @@ to_chat(user, "This shield generator is already upgraded!") return modifier_type = /datum/modifier/shield_projection/mining/strong + upgraded = 1 to_chat(user, "You upgrade the [src] with the [W]!") user.drop_from_inventory(W) qdel(W) From 8ca1b30f5a1bc3d3fc6a3d84625796924d418dc7 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Mon, 26 Sep 2022 01:19:14 -0400 Subject: [PATCH 05/47] Makes mechas able to suck ore into boxes. I forgot ripleys were even a thing for the 50th time. --- code/game/mecha/equipment/tools/drill.dm | 3 ++- code/game/mecha/working/ripley.dm | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/game/mecha/equipment/tools/drill.dm b/code/game/mecha/equipment/tools/drill.dm index 2b64f93616b..a7038eaa628 100644 --- a/code/game/mecha/equipment/tools/drill.dm +++ b/code/game/mecha/equipment/tools/drill.dm @@ -48,7 +48,8 @@ if(ore_box) for(var/obj/item/weapon/ore/ore in range(chassis,1)) if(get_dir(chassis,ore)&chassis.dir) - ore.forceMove(ore_box) + ore_box.stored_ore[ore.material]++ + qdel(ore) else if(isliving(target)) drill_mob(target, chassis.occupant) return 1 diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index ce54008c451..61b4d90183d 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -38,7 +38,8 @@ if(ore_box) for(var/obj/item/weapon/ore/ore in range(1, src)) if(ore.Adjacent(src) && ((get_dir(src, ore) & dir) || ore.loc == loc)) //we can reach it and it's in front of us? grab it! - ore.forceMove(ore_box) + ore_box.stored_ore[ore.material]++ + qdel(ore) /obj/mecha/working/ripley/Destroy() for(var/atom/movable/A in src.cargo) From 3836925fbaf7794240ac8d364312fb43f68a5dac Mon Sep 17 00:00:00 2001 From: "C.L" Date: Tue, 27 Sep 2022 22:32:45 -0400 Subject: [PATCH 06/47] Fixes belly spiral from being cut off. Looked like this pre-fix https://cdn.discordapp.com/attachments/1008937132259278969/1024508027182792794/unknown.png --- code/modules/mob/new_player/sprite_accessories_extra.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/new_player/sprite_accessories_extra.dm b/code/modules/mob/new_player/sprite_accessories_extra.dm index 555c8e460f3..e410bd2eb24 100644 --- a/code/modules/mob/new_player/sprite_accessories_extra.dm +++ b/code/modules/mob/new_player/sprite_accessories_extra.dm @@ -581,7 +581,7 @@ shadekin_snoot name = "Belly Spiral" icon_state = "bellyspiral" color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_TORSO) + body_parts = list(BP_TORSO,BP_GROIN) /datum/sprite_accessory/marking/vr/fluffy_cuffs name = "Wrist Fluff" From 53e92c51a1772d53e6e1ffd0bc0ab3625e4e20cb Mon Sep 17 00:00:00 2001 From: VerySoft Date: Wed, 28 Sep 2022 21:44:19 -0400 Subject: [PATCH 07/47] Complicates Pakkuns Pakkuns now occasionally try to rest! When they rest, they set their digest mode to unabsorb! So, if you end up absorbed you can still escape eventually. Resting Pakkun also have their AI set to sleep, so they will not engage, so this may be able to be used to sneak past, or up to them! Also makes it so that when you help click them while they are resting, they will wake up! and re-enable their AI, if they have one. They also turn their digest mode back to the default setting when they stop resting. All of this of course, only happens when they don't have a client. --- .../living/simple_mob/subtypes/vore/pakkun.dm | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm b/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm index c3053586341..354554bd3af 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm @@ -20,6 +20,7 @@ icon_dead = "pakkun-dead" icon_living = "pakkun" icon_state = "pakkun" + icon_rest = "pakkun-rest" icon = 'icons/mob/vore.dmi' faction = "pakkun" @@ -46,8 +47,46 @@ projectilesound = 'sound/effects/slime_squish.ogg' ai_holder_type = /datum/ai_holder/simple_mob/ranged/pakkun + vore_default_mode = DM_SELECT var/extra_posessive = FALSE // Enable if you want their tummy hugs to be inescapable + var/autorest_cooldown = 100 + +/mob/living/simple_mob/vore/pakkun/Life() + . = ..() + if(autorest_cooldown) + autorest_cooldown -- + else if(prob(5) && ai_holder.stance == STANCE_IDLE) + autorest_cooldown = rand(50,200) + lay_down() + +/mob/living/simple_mob/vore/pakkun/lay_down() + . = ..() + if(client) + return + if(!ai_holder) + return + + if(resting) + vore_selected.digest_mode = DM_UNABSORB + ai_holder.go_sleep() + + else + vore_selected.digest_mode = vore_default_mode + ai_holder.go_wake() + +/mob/living/simple_mob/vore/pakkun/attack_hand(mob/user) + if(stat == DEAD) + return ..() + if(user.a_intent != I_HELP) + return ..() + if(resting) + playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + user.visible_message("\The [user] shakes \the [src] awake.","You shake \the [src] awake!") + lay_down() + return + else + return ..() /datum/ai_holder/simple_mob/ranged/pakkun pointblank = TRUE @@ -121,6 +160,7 @@ icon_dead = "snapdragon-dead" icon_living = "snapdragon" icon_state = "snapdragon" + icon_rest = "snapdragon-rest" extra_posessive = TRUE //you're gonna get KEPT, at least the first time you go in maxHealth = 100 @@ -138,8 +178,10 @@ icon_dead = "snappy-dead" icon_living = "snappy" icon_state = "snappy" + icon_rest = "snappy-rest" ai_holder_type = /datum/ai_holder/simple_mob/ranged/pakkun/snappy + vore_default_mode = DM_HOLD var/list/petters = list() /datum/ai_holder/simple_mob/ranged/pakkun/snappy/list_targets() @@ -172,4 +214,3 @@ most of her girth. Your movements are rewarded only with squeezing from outside, the skin of the reptile easily stretching out to match your movements no matter how hard you try to push. If anything, \ wriggling about just seems to prompt the playful creature to mess with you more, mooshing her paws into the bulges you make, wrapping both arms around you and squeezing you tight, making it absolutely \ plain that she's more than happy to just keep you in there - and is more than capable of doing so if she so chooses." - From 2db85ad4b0c8231be763302bad7d7084092e4b14 Mon Sep 17 00:00:00 2001 From: VerySoft Date: Wed, 28 Sep 2022 22:54:16 -0400 Subject: [PATCH 08/47] dassun --- code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm b/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm index 354554bd3af..2972d33b184 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/pakkun.dm @@ -54,6 +54,11 @@ /mob/living/simple_mob/vore/pakkun/Life() . = ..() + if(client) + return + if(!ai_holder) + return + if(autorest_cooldown) autorest_cooldown -- else if(prob(5) && ai_holder.stance == STANCE_IDLE) From fac651dee95952950ec0eb6ae71d708985113620 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Wed, 28 Sep 2022 23:54:07 -0400 Subject: [PATCH 09/47] Fixes build mode and makes it not terrible. - Makes Basic build mode warn you before you delete the ground and space everyone - Makes Basic build mode turn the turf you deleted into the base turf for the area. If area is not available, it goes with the base turf of the Z level. - Makes Advanced build mode start with Null. No more spawning lockers and qdel()ing players! - Fixes a longstanding bug where if you cancelled selection in build mode and then tried to select something from the list, it defaulted to a locker. Instead, if you cancel it, it defaults back to null and lists work like normal. --- code/modules/admin/verbs/buildmode.dm | 28 +++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm index 485cc88e226..048f15efb38 100644 --- a/code/modules/admin/verbs/buildmode.dm +++ b/code/modules/admin/verbs/buildmode.dm @@ -189,6 +189,7 @@ var/atom/movable/throw_atom = null var/list/selected_mobs = list() var/copied_faction = null + var/warned = 0 /obj/effect/bmode/buildholder/Destroy() qdel(builddir) @@ -219,7 +220,7 @@ screen_loc = "NORTH,WEST+2" var/varholder = "name" var/valueholder = "derp" - var/objholder = /obj/structure/closet + var/objholder = null var/objsay = 1 var/wall_holder = /turf/simulated/wall @@ -251,8 +252,8 @@ if(BUILDMODE_BASIC) return 1 - if(BUILDMODE_ADVANCED) - objholder = get_path_from_partial_text(/obj/structure/closet) + if(BUILDMODE_ADVANCED) //BUILDMODE-ADVANCED-DEBUGGING-COMMENT + objholder = get_path_from_partial_text() if(BUILDMODE_EDIT) var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine") @@ -330,7 +331,13 @@ return else if(istype(object,/turf/simulated/floor)) var/turf/T = object - T.ChangeTurf(/turf/space) + if(!holder.warned) + var/warning = tgui_alert(user, "Are you -sure- you want to delete this turf and make it the base turf for this Z level?", "GRIEF ALERT", list("No", "Yes")) + if(warning == "Yes") + holder.warned = 1 + else + return + T.ChangeTurf(get_base_turf_by_area(T)) //Defaults to Z if area does not have a special base turf. return else if(istype(object,/turf/simulated/wall/r_wall)) var/turf/T = object @@ -358,8 +365,15 @@ if(NORTHWEST) var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) WIN.set_dir(NORTHWEST) + else if(istype(object,/turf) && pa.Find("ctrl") && pa.Find("alt") && pa.Find("middle")) + var/turf/T = object + var/obj/item/toy/plushie/teshari/easter_egg = new /obj/item/toy/plushie/teshari(T) + easter_egg.name = "coding teshari plushie" + easter_egg.desc = "A small purple teshari with a plush keyboard attached to it. Where did this come from?" + easter_egg.color = "#a418c7" - if(BUILDMODE_ADVANCED) + + if(BUILDMODE_ADVANCED) //BUILDMODE-ADVANCED-DEBUGGING-COMMENT if(pa.Find("left") && !pa.Find("ctrl")) if(ispath(holder.buildmode.objholder,/turf)) var/turf/T = get_turf(object) @@ -624,7 +638,7 @@ to_chat(user, span("notice", "Band-selected [i] mobs.")) return -/obj/effect/bmode/buildmode/proc/get_path_from_partial_text(default_path) +/obj/effect/bmode/buildmode/proc/get_path_from_partial_text(default_path) //BUILDMODE-ADVANCED-DEBUGGING-COMMENT var/desired_path = tgui_input_text(usr, "Enter full or partial typepath.","Typepath","[default_path]") if(!desired_path) //VOREStation Add - If you don't give it anything it builds a list of every possible thing in the game and crashes your client. @@ -647,8 +661,6 @@ result = matches[1] else result = tgui_input_list(usr, "Select an atom type", "Spawn Atom", matches, strict_modern = TRUE) - if(!objholder) - result = default_path return result /obj/effect/bmode/buildmode/proc/make_rectangle(var/turf/A, var/turf/B, var/turf/wall_type, var/turf/floor_type) From c4c1388186bb76dbeeedec33e8945b553e5f8b46 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Wed, 28 Sep 2022 23:56:33 -0400 Subject: [PATCH 10/47] Get those debug comments outta here! --- code/modules/admin/verbs/buildmode.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm index 048f15efb38..3bbf730705c 100644 --- a/code/modules/admin/verbs/buildmode.dm +++ b/code/modules/admin/verbs/buildmode.dm @@ -252,7 +252,7 @@ if(BUILDMODE_BASIC) return 1 - if(BUILDMODE_ADVANCED) //BUILDMODE-ADVANCED-DEBUGGING-COMMENT + if(BUILDMODE_ADVANCED) objholder = get_path_from_partial_text() if(BUILDMODE_EDIT) @@ -373,7 +373,7 @@ easter_egg.color = "#a418c7" - if(BUILDMODE_ADVANCED) //BUILDMODE-ADVANCED-DEBUGGING-COMMENT + if(BUILDMODE_ADVANCED) if(pa.Find("left") && !pa.Find("ctrl")) if(ispath(holder.buildmode.objholder,/turf)) var/turf/T = get_turf(object) @@ -638,7 +638,7 @@ to_chat(user, span("notice", "Band-selected [i] mobs.")) return -/obj/effect/bmode/buildmode/proc/get_path_from_partial_text(default_path) //BUILDMODE-ADVANCED-DEBUGGING-COMMENT +/obj/effect/bmode/buildmode/proc/get_path_from_partial_text(default_path) var/desired_path = tgui_input_text(usr, "Enter full or partial typepath.","Typepath","[default_path]") if(!desired_path) //VOREStation Add - If you don't give it anything it builds a list of every possible thing in the game and crashes your client. From 86786f53b2d95a503ad9d2a87011d75fe51faedf Mon Sep 17 00:00:00 2001 From: "C.L" Date: Thu, 29 Sep 2022 16:01:45 -0400 Subject: [PATCH 11/47] README edit. Makes a small edit nudging people towards the GitHub Wiki for more information. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 51ceb23af65..130dddb98df 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ Going to make a Pull Request? Make sure you read the [CONTRIBUTING.md](.github/CONTRIBUTING.md) first! +Want to make a test server or your own private server? Read our [GitHub Wiki!](https://github.com/VOREStation/VOREStation/wiki) + VOREStation is a fork of the Polaris code branch, itself a fork of the Baystation12 code branch, for the game Space Station 13. ![Render Nanomaps](https://github.com/VOREStation/VOREStation/workflows/Render%20Nanomaps/badge.svg) From c9a1f6cbb6ea9d463168bbc3d3fe99d456475d80 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Thu, 29 Sep 2022 17:07:04 -0400 Subject: [PATCH 12/47] spiral --- icons/mob/human_races/markings_alt.dmi | Bin 62926 -> 62946 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/human_races/markings_alt.dmi b/icons/mob/human_races/markings_alt.dmi index b041524bd1b0f238332e4b17d18f2c58f90d03d2..5543599989fba6dffcb7967f2cfcf9dc222c15ce 100644 GIT binary patch delta 6340 zcmai2cU)7;w%!!QbEJrk5-CSSP>?1_CwM?mLBK-?DN2(L5(uH~cq||a2oVsai6AOX zKtxImDpiF@jkJKYfCva7gaAq2#B=Vu@7{NR@8yroo;_=3)>?b5Z@x8M^E?ytJa-Rq zHCD=cZ*yG|b9i6AU`6t96%0=bN(qu5mr>K-+j1KJ_>1)wRJ;lSmKF>v%D8{JHR#wl zY9`{?x|r3r_lL~;;$Ea*Z?t}-QGV5J8@qXv^dj!ln>e^Dmw-RO;<{z~PEB!hL8*Fr z+glP0-*K7FlKMfhJHfrEVRCxSymWtH>_yc-C2XosSRB3JX|^wbpZ5gfo|UXs#G{M? zldat?Pg2t_`6%!!?RMH}=2?dN?djR-Ga0-#w|@Ke!%=@Ztt6o=>u*IdYpJ1QmxqK^uJB%<2B{ zLd06E6*ANhH2C3A#VTkx+JCWOIgRhQ#1d&N@}=?^8i*VEcB)@)SGy}JC6ywC+k0nswU@Bg7OJQjPH(Yh~X)ysmHGmXh4#r0@ezour%RhYq5 zadPUAw6m@AT6$(&gwZcp2-~A;OFAPwDvuup;;>ENp#Afsn{4A9SO~K4_d}mw+WlhA zfE;YCoB!eSf_gar8ZWoIm91~b184^{&i@8IOzmZbpr2E?pby@z-8>Mah3nm>fR${)jmgl3p3WGOuDJGx2zECOVE8>&VxnMlAbzq-!q9hO0bO$p` ze>=0q)AXIAGX(i{?N$K|_Q4*A3$%UNKv4+Fp8@WG!GnezRIuOGajSajb8#EaC{L0& z6?m~aYP9Zb3M0J*`7toYkw`-&YIO~^Z|aEMqY6RLryMBZY_!)hG0lEIThX_6SXg-Z zvyl*uc~~zN|I%)wI8UR?#EC%HLVy1vOc}#mobk|MckRSU=tiKVioY6VP(x>XCp(OU zVEw(q!V3|)iMedoUY9+Nd@|P}SX>a6wF^3r0qx#Qad5$4SmM43UxdL&O(-yTvOV_Vv_3tj%M`66S zS%)Rn9f&?ghZ0}-fDnLGH0LA@=Oz``4j4FBOBj{uVxL4eyslOyvGd-hPuE!AJaHPR zUND8JAR}1W2D|HL{2Ffy>qjJ4Uk+=dr#luL$yAoE9PN%&1Zpp zyZX`f8hNw4IyrGn6X_E4zS5m}c@X3|hdOCC;9^+(+{I?SH)T;q!VoGx@A;0{@!@mo z^aJ;!qaiJ-bVwyk2MbxePl~JCE5<4$c%7}dwHiv^Y$+npj`-!(7t{-V9HQMv*M7^- zWn05@ZMiAO&u7H`mIFgGzw_;aKHUxCd4faxICZ;R_L^<}XdTt)#n?i#xb7bV`>7at zy=EYcIc^#bx5}`%4|YdleU zi|}-VC%fMTHTLc*VjTUb zF}ua1A_B|-!|#*msGez4OhkUnWTL6K(0B6q3_EYCk~d(pfrxsaSCA>K!-hWH0C6f` zv-+gLe95qH6BjdyfJKeEDN@+MN?v{llE)W}ah2Jh_h5WvZyK-Uv8H3|NIAenhno&h z=6_Q@mBW7aA%vAB!ATPYO zgu_ob0j-8+#Vl7-zyU%{Y9pN-9r_i%A=0|FBwJT;?U)gh+=fYcG`j)hvcVSVVOs+x zRWXc}$b}lxCC1A1vQuNml$hbYN30(|LKGdV3O6t0dYn!{hOhtlDoO~~BWZ(~) zO^Q};3gKbPh0`66;~GYl3R!(WLY5O7S8-1FrnSBs+KsX7b_mU^pq(*pCTx84PqSp#!Z=S=k$HHf z#YyI-Y0T_$oNw~37 zq_w%(_)b!i*BjyGzKu@rEG+2B7&>0V ztd~RNVOHv=kc}%+xP(1#n|*Q{l?LNRaW_)Rc2M%Daf)dWB$RZ<_@oUS_bCsFT#Q^^ zEbPAA?3L-VpRhT)r1mVF)^BfW+?)xoQaZMYT-a4+r-0KrUZk)M@-F`S1UP;rpwqa@ zyYqoo%z6k~C>wPI9!QflyM#ii?@vm7|4Dtw9Dh*|zb7&QR+%u)T!Fk%u% zNzQhZ+~~z7-rdCyQxs?NYsvXtAfIeTOEa*6FkP&yR#xTmSK{pKWpfJ)lj^}c2?=hj zl}uF~9dWY^#akU69SI2z)!ye0I3GVhKOe@4Bwd&m;qfiTQ-cqmgY-@Et`@`LaGVKC zTm8dHdhhaF8Y1A9<;gY=))qrpxYCE1`=!R;UeV!&bg~puQdk(c`4dViyGnGps#Z1J zpz6Uj6f4@F^Yy{F(iUI>zh>D&F98P>e<-AvVZ7s7JLygAra|{~)n(L08G)-Nrlz+g zT^FM$GV|KAWt^=0QXA~%U1Q<3M8@aM>YTX--$iNn`#lv46*Tk9yfh-ms^XX$Kt*qft!9z|#{3o{zqZUSu(CR;o^*G2U!CPnOt9`UMN;z7ETT6*vuBuj9A|+8 z1_{`Rd`1!JVZh()fK~uV_lTuy&=BAPhXkEe~v8Xcd7zr_BQ*()kT3n!J3eKv7<8A?RBOahq^%@=1X~`A90Rd z!Z}Z^ow(PU76sP0eiEGoZTwDA@E(GvHB0odoTsOP z|4M%T5AGw6C&q1N6way|8^stinB-1|a^AsKyS{L%KFln7ltVc;7*U+X z@7)oU2F+QSg%$ZQx>-eI!yi3Sn7+mx}-f1QNG2__ngoKC&mmjCS4@(4-X)8}3 z`W&nB`GupWVdos@aQP=g>s0u;u1}TU@VCXoFOdX#ani{WLPVQD2S96jDA{9Hp9LaL zd5n4KA}xpgR+qgR&oLDHhjUF}cok}{XBMT??FZNV#B(xKOtZ$2*gZmvT5}TjR}Q@I zo3zwNQ@bwA3w>j_HB8?0ynI<+C&z+b_t-RLCW^c%V;#V`#o+|Tu{;#_^tg@&- znmX!NQ?L0JGkU$4=3Hh+ud^t|IWx&WiqZVS!qIErJ7V}tUX@vxn3xzWUkKin8V>JJ zpQRuL;DZL3En&u|w|zfK(EPvWfBWk^E_z9o77z=HTBCLd1+#6qP)4`Cd}N5bIDj@ax{F<>8<{-6P&Qg zm6es3Yll@03?wHYgOFL!IpelT zBe|uVy1hS~Xe7>>>Sp3{*{H$u^?Uv9cER;*;zY~s2D5SC!%M_meN{EJ-M;d@OAi(z z8k{}Ai&Ulex>2i7W3fliLcEa8hZ@VWbJut0p(tkbLj*==@WgEQXhB&LRXV>gP z?N~B_J!E-Sbh|4^*Cik*+T&XR&TRRzmpkPJ;;tK3dk9H` ze*V3l7nJ4nu>f-y!PY^}-XO}K%=;|z8X5-vO#LZMZd=AVBfB>ED5lel+@|4-ah1ck z;cT_}Aj4QkmIita;`S>V8{1_-&rv=!#-3oyGd1rQv}VyX$DhYugNc)Rdo|>285bbv zTQNP;&30q(MF6Nh!B68Kx&L=L_MZ{yf*VghF_yBkBa2udwugYWhDaYp~W&D$FUdv%8)Lmf)Td znOo$%6N#c`j-^AdbUOS6S4y{ent~{S?hSARip(-ijEzhB6D^9vCU}M~bBbc=f;P?`Us7ZKo_W zWe&<2s0gkFkSRAh^(KaXn`fAr>IBf?&^)I7aqHao!S&lF0m+`-1*bsfiU|t`<7or8 zD0~-c5zi+yuraexLEoFzYr1NiNhTRp2hg^ZLzc`3GGY41XMSlPYM()JaNyW?~x-3+_y6-Z&Pev4s6)8g>UG)%}Z zFyw6s8T*FoW)9t!4Vw;20qxmO)qJ6qAC#~!|8#dLRYWZeQAM`Lg`;+Vr z{~D)JJQ{kc#I>u4Hqxn!fbp>Xsf@|;Z`o7N+`>G|eOmSQEhXD8nZ<2Q+|D8~mTxP! zN>q^TBSm&x^Ch;rsYfi4CHRCS?=Uy%ZEvsfc>vVm855|2*{qQhTx0?a&xAwmcCtMA zn`r&)>_t_GKQV`7(7ldB1hqGI<&A_GeQ#X5b@k2Q6Ng}f4HI}W2Ti_3?b1~yV<b&{V4dqdk z?TWI}8!ZzybF7Y{lscHp#yASd`~NNlFXm|VCX}{Pash_o<70@ zb1s{(S^xX)3A_eZPyce}|66iVIe>RHaQ4+}U^MeZf|DTmEh%LuV3{5?dD?hir z#sK6W)MRe67C2r3-hvndRf-TDKh)m9`uy4IBCWT6j&NIxRp1A1>L8!uGzmlB_1=IJ zj|T%xKq~6#h7Rb(#;U2S?*-Kch(dk=ftClw6~vl7vz!gYlT6V37)e-%4TeFdyapgB zw%Wb}l0R7g)>52z8uney%@ohEkZWyg^8l41pcr?^)IWk;RD9QQ+uboY-L2o(dRHIe z1r}n{N~Qp*`ytmqhq@wRlzWwE!wwlMNg^jd22~lLGpaz3&f>^z*QtF#VKni(6v zbSmRqf+i$TiAcg{hN!xx{wCwl!HM`^esVFB;B-s7!`hDOmOif>j3#XL z2gzrS5;;@h6-dh&Mdvpg3H0}~Gi!O<;JQl2zI3%Q9ZHHft)AC3stcw7{ z{q13M!)eiMX~)_imjSPhOQZGSSvR)%=e{xUt#L{vhlEur&JfO$+|J*OkAK|nH~mHg z+$yMqrC;Da5k)jhLa=8naj0KvNxy|DXDX>#ews( zy$RHM__{d~`5Wg-F#q6R)Zss0fByH4&VNqQMK;gQoZy)KzY2zMmOgXJ!npi*_dov& DF{IHu delta 6320 zcmai2dpy)z*Z-kZrxTUaO=S>KZpmfjHsctI3eg3{C`lo5zmDH@oKQk25@tlvMXpJV zp;F|2DTIa?3?_ydV+=Fq-Q%3+ectDJKkxJU!*BL)@84Q`t-aQFeb*kLi?z|k?kR}8 zEm6F(*0DF}8C_E&rpg>?fc$ON;-So)OHZ85ejYfoL?&XjHXkjsJ$^#LwPO2?9zW7{ z9wz^fiysi>2rorB#_6l^ovqPtA);|>4r?5O|ujXM?ywk+{beXQzLDJ{cgWqTtA|_k6n1C>ux1_fpE&Z9kk!45=Zo?fJf|tVyM;7g|E$5&$(2ec1Fj`sl(5_d%hHE~! zC;^@Rk{Xq$xLch}D$@5tI<45`vH11$jBqASxcq+4iKu8*vD;@~ZbL-On$Uc!cq${* zF&8thV}#&|)2SsQ&uR+l?njofDEY}g&irH69`cYVWJ&j_T`23X{E*dd7zyK&*#?hA zpuVXJH*Dyn8}dH19#ST21!n!$8Q(?Ov<8|tuT@*NWH+y%wus6?__9a+PG8Auys8p8 z{a+=X9S$%!nH6Pp6WV#2|N8Ptp%D_OxBR|q@LPi~EC_Nd%bwT(L7B~cq7SP{*2arJ zqP|q&nP)H0-sgOy^;6*kMMl{(i*rsEAD`0%lNkbAXgzwULj+jYU+F!=a@?xJzB1Gb z8)w4M#3qr=PzSQho0zkZX)&~5)E=MRTuf`P9Mx$sF%&=@D&^Nz-fTBo2jO?I-Y}wC zx$E$iTObh#f=*{Dx_}3?O$j&vf}ZICNf3nov;oG0Cv?yX!YEe1Ufj_*Y+aFDNAz}M zzA1Jf&qO?J;B}2)M|EopJdLvC6a3YgHCEzdJTVAjDM2|!WZ@^rqA?K11F9SG>f^t}I^odrWsHgXMmo($eosnqm@PW}=F`Od77`q2GSM1*12?5jJ} zRt$%IulLBVuPjLjYH_+gaOag-yUY}!7+kGccg@#fq`qli35Ej zYtZ2FZyxGE2GuN|ww>P@+VZ$}bpiVM6Orbqa3o>-Yp=KSGyNby-K5{G{!BN1Gxo!^ zvCnwWbF!oj8L$;9?o3Np8p)b%7(d`QTXI4D5Rj0)N9H?8v+vC%&sVDH?;@B9O@WYG_nkA* zQk%f+sM0igs%;I^S#dtT7a5#d*Q&&Lb^*FixUaSjaXie|mgz+op1bkc=;gUdzgvb2 zvQsjGjB_YkIBpTQQ|H`+jd+~(m%%Y8cl!FKrU2Jg9sCQgb(_1hQ{r+S$ic%JDnud#UB2eQIk~G|-Oq|eMm`7g ze1?~&ap#5rUGh>q`Yhw1{WfEi2=uwD?~l|162474=+v;aMpa?}B$8>Cv;mc`VtO>y z^N;5Nb=!_ki@1yn-{0EJ_d9TyX8||gcb1x@R&(Nx!*si^#(`#mh}3erCd0ei1U3@5 zcf}bY+;dcyf7cg4Ein?Z&_g+j_z5LO+v^-sM^ne`wEX#yW+s=x6FYQH9}l@iH{D<% zV}*f{PtR7(+DT#7>{4fr*M|GNo?+RJMwH6zGa4+7STO+N9th#2d{f$>Q%2PqpL;ke zyY&_&Bwy~>F5O1!w4qHG9XAgP<)-3Apr>b3pCa96!3io2RWBtya?|4;Y}T0o(+Hpz zZ>v%l&k5)nI~p349l@G9>H$J&Vq8EREm`9Q!X@wnF(*xS)r3`@^LeBb4D?ri3XZxP zerVcBL*Oe**8B7sg9mib+oV$p zU#S;*UM-YC=8Po6$JK8?MkrJkMXA*-QW9AN(@rYDkV6KdvP*4^10Idcv1V%bIc)q` zb6Ug8Igey_=v4IFQFHT4jme5xG-jr081MPMqX`)Lo3n*FK!Zz=sz`28K#U{>ww^xL z=*qiN=J0vZu8tU>9@;WIdc9o1Xy$9O;_*wDFDq0?AA-s4k({0uIg)7N=k~Rre@N>qWfVmijmmcbiLX%Mj|j_H>4c1ZXtq9L&aR4 zdj$P<6vALFqGFyNPa`mcoo{|juW!`ae68Hkcl2{o8}-)49YIs~gtPS@Zf!J3Ox$y1 zEBxxL3d^BQQR=g@wxVsv{+DPXInZbjh4rD{48}G9= zY8eO|Y8FmhU+nA6%c@H!6jc@R=G&7=0#3Ao{0LUS4Q$L8EZ3eaefBAuh*NVYnI2MT z77V-qlW{1XB~xjr)>YQiIcUh4`wAv#d}vCK6~^J=%+8~TPu4ZOUa@7G^R9Y zx?j(4^q9M3X21csM;HrUUaH&U)mna$@hz$A2ny zYtHHRaFfC7fYT_rPSebAj~-M;^+_k0c<59;n(E!?N2|?KfNVNm*hzK8~vdKl_NA9CPFPu)V?Oqmdr}wsZ(CxCrl?~c4Bn@K^5^W&FT^QXsL7q|Fr)oS zO0K}ugWR|Z&(J?n;R`=+r@%_q^&K5H7|hRs3XO%IeNsY~W*UYbmX|+Ucp-h#SkF!9 z&g&jVr7uhz1v8q_(a|HLjVT`x0BZL6|AN=O5EgvB`F%t3`iq;nVbpk})uf+;_M76= zXtb-VtC_V%FopfON}S@Vdg1M%!4PVEOTB&yf0;w<3QQK4n}q$In0#?cEb#0ws^`*( zh-D6=-AfgeCeD?;(9`$rdCiCyX1`kP_~p~Y%u0G=X&$in=7i{-SgoGiG@Xe;f!BD4 z3Wb8wn$+$qb8klnik##`Xn1xw3Hn+9iBKjUnHG5sYQKdvw5iKj`!}J3o)}zxxD+zw z{{>gw1b0zeUx zGiXekrs%Sz7Ar0e2I$aMeQ4{F@csM_A2DI=wej_L6zw5T`g4+n1OaMtw>tg~kc3WS zv~Y;K5!SNy~Mu-0S*OGYEnm$fJEr^D(-ZG1tM1Al;w{>9Ta-XVbDyUK$8 zlDx7F(;AHB(CZ!b*a~|6Wk0`CmLB6s00JgEC+=W`))dcW3EmqB=A(^(47~06a@Uik z0h3)qy_0W-m9Evy3^_R-*JsF}OncF#G*y~;4 zzq{6eH%TzXe5}DOA12nl*z1|x+1Y7Fpi9V?O5B9S`MmsL>yOVH5J}dX@}jX6|IMOo z#PN5+y;>SbcHJ8u&qon?iwTV26|zUeBL({IAJ{<-%kgLI7yTPd=RZ=!H%|wV>=MJB zc^=7auX#vz$&SnaR!pBo7<$)yc6OUT2&?27DP%kT= zz{6Nh2!Qyx5u^6rJi28rF97PSkom@9j}EBRD*6)S zcQ?AFIc<-TL?j@Qwayt!Zzs58lfnbQU})mJ+2OjRGip`zh(5P8Gifvi^TbInbb`=u zXPe3;#vnO;uYdZ}i}q9RZi=mzrJG{wMg+KJoBe@{G)dKyU7Cf}%%(P0)Yj@VNg(Ve zb_bJhz&^~Wmqqn}<=omT7}ZL|5+g>Wh!fWqQ!GuhD~2KsRu()_DrV&7u5?j|Zw}&r zK3@CYXZfF?RXd!47K3o66JpRIq@Y09OhV8-wSV+)AlgC3w8@~s1AV}#m`1nYxH8rp z30@^;*#W{czU%@2(4zRa+^x8|4lJ`&nHIH-LdbP||0X8ve3YMR|Ku(-`E=*0uX7Fh zyUCecN=J!ow%J8o9^7%58;`E#<;lIIqEf1-k~zMuX9&F(gT0q)GsU3nDpkQFR5&E^ zpo{LaUbs9N5jh8^uIxT>iq*2T`$jD;svV{p{&prMl6wJyUgR&QVfpiA7yH)ZfpW0- ztwQ+vyB+(#y0NzearCNef5AC2yN@yWX!+rmPkTI*sBM^Znh@rqS_a+$N(r65@H7?w zbgwdb=9hynny=<{amO^V zb_-efs))akNH6RE$4k5|$$NQfv}*cgipk#E9e=s+no|WXu}B_zAktn}PK`~oCr_JaAy&-&(`94nLs_u= zT|{6E>Uj_e&Z6&O{u+_DL|Voc1_tkmzk3%$q9hCt4?jaWSYOdX?nMhBUzpa<;X4Go zPG-T)Ffp?!3AjpNq%2gHs(^rZc~=bh7v2Ou`6s~IR|Q-HIAp%WFp*T8Vuz{g*aPTI z<|J>#dy{&MPI&?V_O5_kd#jXwq1PX<<=DPdqv3#5m33DGX$gLjaOdL zI&+U2G>df6*7Z$HT>Y4EEHZScU8_>g5r{ktpa3A4L$%?%Bk`2w->36xm#9yG{g{s@ zVRl2~5N}zaQ!Homv0=9z0u^c4KOGd|$0~0`88Vyh!c)SoW$6RJctX$QEI>iYQAs?d zXSzzWu}UKJuCMO0F8{^$^YRX_ub%pg=A8E-v*%c1>WR2R%t22vmlr0RBHAt&hHrfk zx#3${WPm&N&BB!u*yCRP#JzBX|XlLno^CxrxtxV+7gYUd~n*VZt2F>2R)aOf)2cuR{ zGn;>0=KbB-b=lIEfZ(9u3HE?wh(j9*>zSPI+Ub}Mr$H$%<_#~;<0>b&72*BYd^U3S4^HOCx>(DADhOE2tjwEPXvK1%sl6&;-arGc{5U^F`hBxV)PZ7T}9(l#M4M7QU{pn1`!P!1<4)kPX zV2jACHUr=HYj=DEeV3GvcO>pdQGZc0*`KXTpG!7T$IWa)<9EBoXJBjy>Nf{?`?=o(hO z(%EeYIUxrHtkYw|w|*s`W1!5-%L~yApiOM-Mvdx202JOIF3uDNUrKB&VrUMhlYgV| zD3H(0__DPau%_uC19|ymg+@i51MD|c`!h}=w}6&D=#_Z)?nfhy$Z`#jz@ZEm312L=`3nBv0iqc^mMZ1|>x#AdvP2c{QC$30Wb;Pb8h;FOMxX46TD8P*wniNVyX91o!hnBi$Bh3iER) z-tN+(W99ROSa#_OKZHMa{pa8g4-Ww9Hr`Jq@j`3Wa^S&>%31FE3};JIqN+3LV3?C2 zlC*LsxyRxVsQWfnf8X!AppD)JyLQ@vz3p88l(8BUE|IIH=ilxx{|>D4|5uFsr@PPp c6_f%*gvmt>>fT! Date: Thu, 29 Sep 2022 17:21:17 -0400 Subject: [PATCH 13/47] Ghost default swap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Admins are going to more than likely want to aghost if they slam the ghost button and then the enter key. Players trying to ghost might not know better, so let's default to 'Stay in body' so they don't slam enter and make a mistake. Make it so they have to consciously click 'Ghost' 🆑 - tweak: Made it so the ghost command defaults are less disruptive. /🆑 --- code/modules/mob/dead/observer/observer.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index fd2c9b5258d..0a774d72959 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -224,13 +224,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp else var/response if(src.client && src.client.holder) - response = tgui_alert(src, "You have the ability to Admin-Ghost. The regular Ghost verb will announce your presence to dead chat. Both variants will allow you to return to your body using 'aghost'.\n\nWhat do you wish to do?", "Are you sure you want to ghost?", list("Ghost", "Admin Ghost", "Stay in body")) + response = tgui_alert(src, "You have the ability to Admin-Ghost. The regular Ghost verb will announce your presence to dead chat. Both variants will allow you to return to your body using 'aghost'.\n\nWhat do you wish to do?", "Are you sure you want to ghost?", list("Admin Ghost", "Ghost", "Stay in body")) if(response == "Admin Ghost") if(!src.client) return src.client.admin_ghost() else - response = tgui_alert(src, "Are you -sure- you want to ghost?\n(You are alive, or otherwise have the potential to become alive. Don't abuse ghost unless you are inside a cryopod or equivalent! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", list("Ghost", "Stay in body")) // VOREStation edit because we don't make players stay dead for 30 minutes. + response = tgui_alert(src, "Are you -sure- you want to ghost?\n(You are alive, or otherwise have the potential to become alive. Don't abuse ghost unless you are inside a cryopod or equivalent! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", list("Stay in body", "Ghost")) if(response != "Ghost") return resting = 1 From 31a2a3a4b89ced493d21308fd0515589f82dd276 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Thu, 29 Sep 2022 19:38:56 -0400 Subject: [PATCH 14/47] Adds in 'compliance implant' - Adds in a 'compliance implant'. This is an implant that works just like a compliance disk, in case people want to do law stuff without NIFs. (Also works on NIFs as well as requested.) - Is able to be found in contraband packs, trash piles, and is contraband in the security vending machine. (Since putting it in the 'gadget' vending machine didn't seem right.) Works exactly like a compliance disk does but also is a removable implant for non-NIF'd people. --- code/game/objects/items/contraband_vr.dm | 1 + .../items/weapons/implants/implant_vr.dm | 75 ++++++++++++++++++- code/game/objects/structures/trash_pile_vr.dm | 1 + code/modules/economy/vending_machines_vr.dm | 1 + 4 files changed, 77 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/contraband_vr.dm b/code/game/objects/items/contraband_vr.dm index 79a19b7794e..67377884864 100644 --- a/code/game/objects/items/contraband_vr.dm +++ b/code/game/objects/items/contraband_vr.dm @@ -51,6 +51,7 @@ /obj/item/device/perfect_tele, /obj/item/device/sleevemate, /obj/item/weapon/disk/nifsoft/compliance, + /obj/item/weapon/implanter/compliance, /obj/item/seeds/ambrosiadeusseed, /obj/item/seeds/ambrosiavulgarisseed, /obj/item/seeds/libertymycelium, diff --git a/code/game/objects/items/weapons/implants/implant_vr.dm b/code/game/objects/items/weapons/implants/implant_vr.dm index a2f22438bdf..7145e842899 100644 --- a/code/game/objects/items/weapons/implants/implant_vr.dm +++ b/code/game/objects/items/weapons/implants/implant_vr.dm @@ -132,4 +132,77 @@ src.imp = new /obj/item/weapon/implant/sizecontrol( src ) ..() update() - return \ No newline at end of file + return + + +////////////////////////////// +// Compliance Implant +////////////////////////////// +/obj/item/weapon/implanter/compliance + name = "compliance implant" + desc = "Implant which allows for implanting 'laws' or 'commands' in the host. Has a minature keyboard for typing laws into." + description_info = {"An implant that allows for a 'law' or 'command' to be uploaded in the implanted host. +In un-modified organics, this is performed through manipulation of the nervous system and release of chemicals to ensure continued compliance. +In synthetics or modified organics, this implant uploads a virus to any compatable hardware. +Due to the small chemical capacity of the implant, the life of the implant is relatively small, wearing off within 24 hours or sooner. +Obviously lethal commands such as telling the subject to kill themselves or harm others will result in the command being disregarded."} + + description_fluff = "Due to the illegality of these types of implants, they are often made in clandestine facilities with a complete lack of quality control \ + and as such, may malfunction or simply not work whatsoever. After loyalty implants were outlawed in many civilized areas of space, an abundance of readily \ + available implanters and implants became available for purchase on the black market, with some deciding to modify them. Now, they are often used by illegal \ + entities to perform espionage and in some parts of space are used off the books for interrogation. Most of the makers of these modified implants have put in \ + safeties to prevent lethal or actively harmful commands from being input to lessen the severity of the crime if they are caught. This one has a golden stamp \ + with the shape of a star on it, the letters 'KE' in black text on it." + +/obj/item/weapon/implanter/compliance/New() + src.imp = new /obj/item/weapon/implant/compliance( src ) + ..() + update() + return + +/obj/item/weapon/implanter/compliance/attack_self(mob/user) + if(istype(imp,/obj/item/weapon/implant/compliance)) + var/obj/item/weapon/implant/compliance/implant = imp + var/newlaws = tgui_input_text(user, "Please Input Laws", "Compliance Laws", "", multiline = TRUE, prevent_enter = TRUE) + newlaws = sanitize(newlaws,2048) + if(newlaws) + to_chat(user,"You set the laws to:
[newlaws]") + implant.laws = newlaws //Organic + else //No using other implants. + to_chat(user,"A red warning pops up on the implanter's micro-screen: 'INVALID IMPLANT DETECTED.'") + + +/obj/item/weapon/implant/compliance + name = "compliance implant" + desc = "Implant which allows for forcing obedience in the host." + icon_state = "implant_evil" + var/active = TRUE + var/laws = "CHANGE BEFORE IMPLANTATION" + var/nif_payload = /datum/nifsoft/compliance + +/obj/item/weapon/implant/compliance/get_data() + var/dat = {" +Implant Specifications:
+Name:Compliance Implant
+Life:24 Hours
+
+Function: Forces a subject to follow a set of laws.
+
+Set Laws:[laws]"} + return dat + +/obj/item/weapon/implant/compliance/post_implant(mob/source, mob/living/user = usr) + if(!ishuman(source)) //No compliance implanting non-humans. + return + + var/mob/living/carbon/human/target = source + if(!target.nif || target.nif.stat != NIF_WORKING) //No nif or their NIF is broken. + to_chat(target, "You suddenly feel compelled to follow the following commands: [laws]") + to_chat(target, "((OOC NOTE: Obviously lethal commands or commands that harm others should be disregarded.))") + to_chat(target, "((OOC NOTE: Your new commands can be checked at any time by using the 'notes' command in chat. Additionally, if you did not agree to this, you are not compelled to follow the implant.))") + target.add_memory(laws) + return + else //You got a nif...Upload time. + new nif_payload(target.nif,laws) + to_chat(target, "((OOC NOTE: Obviously lethal commands or commands that harm others should be disregarded.))") + to_chat(target, "((OOC NOTE: If you did not agree to this, you are not compelled to follow the laws.))") \ No newline at end of file diff --git a/code/game/objects/structures/trash_pile_vr.dm b/code/game/objects/structures/trash_pile_vr.dm index d1e9a0593e2..ccd069386bf 100644 --- a/code/game/objects/structures/trash_pile_vr.dm +++ b/code/game/objects/structures/trash_pile_vr.dm @@ -302,6 +302,7 @@ prob(1);/obj/item/weapon/beartrap, prob(1);/obj/item/weapon/cell/hyper/empty, prob(1);/obj/item/weapon/disk/nifsoft/compliance, + prob(1);/obj/item/weapon/implanter/compliance, prob(1);/obj/item/weapon/material/knife/tacknife, prob(1);/obj/item/weapon/storage/box/survival/space, prob(1);/obj/item/weapon/storage/secure/briefcase/trashmoney, diff --git a/code/modules/economy/vending_machines_vr.dm b/code/modules/economy/vending_machines_vr.dm index e7479d1823a..76ca60a1506 100644 --- a/code/modules/economy/vending_machines_vr.dm +++ b/code/modules/economy/vending_machines_vr.dm @@ -7,6 +7,7 @@ products += list(/obj/item/weapon/gun/energy/taser = 8,/obj/item/weapon/gun/energy/stunrevolver = 4, /obj/item/weapon/reagent_containers/spray/pepper = 6,/obj/item/taperoll/police = 6, /obj/item/clothing/glasses/omnihud/sec = 6) + contraband += list(/obj/item/weapon/implanter/compliance = 1) ..() /obj/machinery/vending/tool/New() From fe8a1b68ff7c2b53f3424fe024956b6a6bd44b2c Mon Sep 17 00:00:00 2001 From: "C.L" Date: Thu, 29 Sep 2022 20:01:47 -0400 Subject: [PATCH 15/47] span --- code/game/objects/items/weapons/implants/implant_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/implants/implant_vr.dm b/code/game/objects/items/weapons/implants/implant_vr.dm index 7145e842899..64e6218496a 100644 --- a/code/game/objects/items/weapons/implants/implant_vr.dm +++ b/code/game/objects/items/weapons/implants/implant_vr.dm @@ -169,7 +169,7 @@ Obviously lethal commands such as telling the subject to kill themselves or harm to_chat(user,"You set the laws to:
[newlaws]") implant.laws = newlaws //Organic else //No using other implants. - to_chat(user,"A red warning pops up on the implanter's micro-screen: 'INVALID IMPLANT DETECTED.'") + to_chat(user,"A red warning pops up on the implanter's micro-screen: 'INVALID IMPLANT DETECTED.'") /obj/item/weapon/implant/compliance From 694bd5b0985e4caab5befd40d583abf25dc679f3 Mon Sep 17 00:00:00 2001 From: "DESKTOP-4BUBN9N\\Mike" Date: Fri, 30 Sep 2022 01:24:53 +0100 Subject: [PATCH 16/47] stops absorbed chimeras going feral --- .../carbon/human/species/station/station_special_vr.dm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm index 6900fd5afb6..7e3e1370af9 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm @@ -142,14 +142,14 @@ cause = "jittery" //check to see if they go feral if they weren't before - if(!feral) + if(!feral && !isbelly(H.loc)) // if stress is below 15, no chance of snapping. Also if they weren't feral before, they won't suddenly become feral unless they get MORE stressed if((currentstress > laststress) && prob(clamp(currentstress-15, 0, 100)) ) go_feral(H, currentstress, cause) feral = currentstress //update the local var //they didn't go feral, give 'em a chance of hunger messages - else if(H.nutrition <= 200 && prob(0.5) && !isbelly(H.loc)) + else if(H.nutrition <= 200 && prob(0.5)) switch(H.nutrition) if(150 to 200) to_chat(H,"You feel rather hungry. It might be a good idea to find some some food...") @@ -158,7 +158,8 @@ danger = TRUE //now the check's done, update their brain so it remembers how stressed they were - B.laststress = currentstress + if(B && !isbelly(H.loc)) //another sanity check for brain implant shenanigans, also no you don't get to hide in a belly and get your laststress set to a huge amount to skip rolls + B.laststress = currentstress // Handle being feral if(feral) From b0955f6fe232a320d0aa85605cc6e7c81e583874 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Thu, 29 Sep 2022 20:33:43 -0400 Subject: [PATCH 17/47] Wording change --- code/game/objects/items/weapons/implants/implant_vr.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/implants/implant_vr.dm b/code/game/objects/items/weapons/implants/implant_vr.dm index 64e6218496a..35b733de4f4 100644 --- a/code/game/objects/items/weapons/implants/implant_vr.dm +++ b/code/game/objects/items/weapons/implants/implant_vr.dm @@ -198,11 +198,11 @@ Obviously lethal commands such as telling the subject to kill themselves or harm var/mob/living/carbon/human/target = source if(!target.nif || target.nif.stat != NIF_WORKING) //No nif or their NIF is broken. to_chat(target, "You suddenly feel compelled to follow the following commands: [laws]") - to_chat(target, "((OOC NOTE: Obviously lethal commands or commands that harm others should be disregarded.))") + to_chat(target, "((OOC NOTE: Obviously suicidal commands should be disregarded. The implant doesn't stop your self preservation.))") to_chat(target, "((OOC NOTE: Your new commands can be checked at any time by using the 'notes' command in chat. Additionally, if you did not agree to this, you are not compelled to follow the implant.))") target.add_memory(laws) return else //You got a nif...Upload time. new nif_payload(target.nif,laws) - to_chat(target, "((OOC NOTE: Obviously lethal commands or commands that harm others should be disregarded.))") + to_chat(target, "((OOC NOTE: Obviously suicidal commands should be disregarded. The implant doesn't stop your self preservation.))") to_chat(target, "((OOC NOTE: If you did not agree to this, you are not compelled to follow the laws.))") \ No newline at end of file From 71089efa78fb1349da3d36ebe04b65504e23d134 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Thu, 29 Sep 2022 21:03:40 -0400 Subject: [PATCH 18/47] Wording --- code/game/objects/items/weapons/implants/implant_vr.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/weapons/implants/implant_vr.dm b/code/game/objects/items/weapons/implants/implant_vr.dm index 35b733de4f4..01d81326dbf 100644 --- a/code/game/objects/items/weapons/implants/implant_vr.dm +++ b/code/game/objects/items/weapons/implants/implant_vr.dm @@ -198,11 +198,11 @@ Obviously lethal commands such as telling the subject to kill themselves or harm var/mob/living/carbon/human/target = source if(!target.nif || target.nif.stat != NIF_WORKING) //No nif or their NIF is broken. to_chat(target, "You suddenly feel compelled to follow the following commands: [laws]") - to_chat(target, "((OOC NOTE: Obviously suicidal commands should be disregarded. The implant doesn't stop your self preservation.))") + to_chat(target, "((OOC NOTE: Commands that go against server rules should be disregarded and ahelped.))") to_chat(target, "((OOC NOTE: Your new commands can be checked at any time by using the 'notes' command in chat. Additionally, if you did not agree to this, you are not compelled to follow the implant.))") target.add_memory(laws) return else //You got a nif...Upload time. new nif_payload(target.nif,laws) - to_chat(target, "((OOC NOTE: Obviously suicidal commands should be disregarded. The implant doesn't stop your self preservation.))") - to_chat(target, "((OOC NOTE: If you did not agree to this, you are not compelled to follow the laws.))") \ No newline at end of file + to_chat(target, "((OOC NOTE: Commands that go against server rules should be disregarded and ahelped.))") + to_chat(target, "((OOC NOTE: If you did not agree to this, you are not compelled to follow the laws.))") From b4ef66b5114ae2d5f0a788a57f0d5acbd1118d55 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Thu, 29 Sep 2022 21:05:09 -0400 Subject: [PATCH 19/47] Update implant_vr.dm --- code/game/objects/items/weapons/implants/implant_vr.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/implants/implant_vr.dm b/code/game/objects/items/weapons/implants/implant_vr.dm index 01d81326dbf..bfb7f595315 100644 --- a/code/game/objects/items/weapons/implants/implant_vr.dm +++ b/code/game/objects/items/weapons/implants/implant_vr.dm @@ -144,8 +144,7 @@ description_info = {"An implant that allows for a 'law' or 'command' to be uploaded in the implanted host. In un-modified organics, this is performed through manipulation of the nervous system and release of chemicals to ensure continued compliance. In synthetics or modified organics, this implant uploads a virus to any compatable hardware. -Due to the small chemical capacity of the implant, the life of the implant is relatively small, wearing off within 24 hours or sooner. -Obviously lethal commands such as telling the subject to kill themselves or harm others will result in the command being disregarded."} +Due to the small chemical capacity of the implant, the life of the implant is relatively small, wearing off within 24 hours or sooner."} description_fluff = "Due to the illegality of these types of implants, they are often made in clandestine facilities with a complete lack of quality control \ and as such, may malfunction or simply not work whatsoever. After loyalty implants were outlawed in many civilized areas of space, an abundance of readily \ From 39ef5899f2671e1006037e330da2caf38c3147e2 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Thu, 29 Sep 2022 21:14:39 -0400 Subject: [PATCH 20/47] RCON Sanitization - Makes RCON tags less exploitable. --- code/modules/power/breaker_box.dm | 5 +++-- code/modules/power/smes_construction.dm | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm index e666ba6f578..2dffe3c228f 100644 --- a/code/modules/power/breaker_box.dm +++ b/code/modules/power/breaker_box.dm @@ -40,7 +40,7 @@ /obj/machinery/power/breakerbox/activated/Initialize() . = ..() return INITIALIZE_HINT_LATELOAD - + /obj/machinery/power/breakerbox/activated/LateInitialize() set_state(1) @@ -96,7 +96,8 @@ /obj/machinery/power/breakerbox/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if(istype(W, /obj/item/device/multitool)) - var/newtag = tgui_input_text(user, "Enter new RCON tag. Use \"NO_TAG\" to disable RCON or leave empty to cancel.", "SMES RCON system") + var/newtag = tgui_input_text(user, "Enter new RCON tag. Use \"NO_TAG\" to disable RCON or leave empty to cancel.", "SMES RCON system", "", MAX_NAME_LEN) + newtag = sanitize(newtag,MAX_NAME_LEN) if(newtag) RCon_tag = newtag to_chat(user, "You changed the RCON tag to: [newtag]") diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index 381f6b09f69..15c2f61f0da 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -312,7 +312,8 @@ // Multitool - change RCON tag if(istype(W, /obj/item/device/multitool)) - var/newtag = tgui_input_text(user, "Enter new RCON tag. Use \"NO_TAG\" to disable RCON or leave empty to cancel.", "SMES RCON system") + var/newtag = tgui_input_text(user, "Enter new RCON tag. Use \"NO_TAG\" to disable RCON or leave empty to cancel.", "SMES RCON system", "", MAX_NAME_LEN) + newtag = sanitize(newtag,MAX_NAME_LEN) if(newtag) RCon_tag = newtag to_chat(user, "You changed the RCON tag to: [newtag]") From 01bee93e1ec43ec40bb63d99741e54226b1d0a20 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Thu, 29 Sep 2022 21:31:24 -0400 Subject: [PATCH 21/47] Navbeacon sanitization --- code/game/machinery/navbeacon.dm | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 1e1fff180ed..be37e988b86 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -150,7 +150,7 @@ Transponder Codes:
    "} usr.set_machine(src) if(href_list["locedit"]) - var/newloc = sanitize(tgui_input_text(usr, "Enter New Location", "Navigation Beacon", location)) + var/newloc = sanitize(tgui_input_text(usr, "Enter New Location", "Navigation Beacon", location, MAX_NAME_LEN)) if(newloc) location = newloc updateDialog() @@ -158,12 +158,14 @@ Transponder Codes:
      "} else if(href_list["edit"]) var/codekey = href_list["code"] - var/newkey = tgui_input_text(usr, "Enter Transponder Code Key", "Navigation Beacon", codekey) + var/newkey = tgui_input_text(usr, "Enter Transponder Code Key", "Navigation Beacon", codekey, MAX_NAME_LEN) + newkey = sanitize(newkey,MAX_NAME_LEN) if(!newkey) return var/codeval = codes[codekey] - var/newval = tgui_input_text(usr, "Enter Transponder Code Value", "Navigation Beacon", codeval) + var/newval = tgui_input_text(usr, "Enter Transponder Code Value", "Navigation Beacon", codeval, MAX_NAME_LEN) + newval = sanitize(newval,MAX_NAME_LEN) if(!newval) newval = codekey return @@ -180,11 +182,13 @@ Transponder Codes:
        "} else if(href_list["add"]) - var/newkey = tgui_input_text(usr, "Enter New Transponder Code Key", "Navigation Beacon") + var/newkey = tgui_input_text(usr, "Enter New Transponder Code Key", "Navigation Beacon", null, MAX_NAME_LEN) + newkey = sanitize(newkey,MAX_NAME_LEN) if(!newkey) return - var/newval = tgui_input_text(usr, "Enter New Transponder Code Value", "Navigation Beacon") + var/newval = tgui_input_text(usr, "Enter New Transponder Code Value", "Navigation Beacon", null, MAX_NAME_LEN) + newval = sanitize(newval,MAX_NAME_LEN) if(!newval) newval = "1" return From 9f7e4f0d7c59b078eee6e0f6fbdb0e7f7244e013 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Thu, 29 Sep 2022 22:06:29 -0400 Subject: [PATCH 22/47] Gyrotron sanitization --- code/modules/power/fusion/gyrotron/gyrotron.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/power/fusion/gyrotron/gyrotron.dm b/code/modules/power/fusion/gyrotron/gyrotron.dm index b2b33ef96bd..b84d04871e4 100644 --- a/code/modules/power/fusion/gyrotron/gyrotron.dm +++ b/code/modules/power/fusion/gyrotron/gyrotron.dm @@ -53,7 +53,8 @@ GLOBAL_LIST_EMPTY(gyrotrons) /obj/machinery/power/emitter/gyrotron/attackby(var/obj/item/W, var/mob/user) if(istype(W, /obj/item/device/multitool)) - var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", "Gyrotron", id_tag) + var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", "Gyrotron", id_tag, MAX_NAME_LEN) + new_ident = sanitize(new_ident,MAX_NAME_LEN) if(new_ident && user.Adjacent(src)) id_tag = new_ident return From 6236a1319497dc36d77c86eb044859325cb5395b Mon Sep 17 00:00:00 2001 From: "C.L" Date: Thu, 29 Sep 2022 23:02:23 -0400 Subject: [PATCH 23/47] Sanitization and better TGUI utilization - Sanitizes some more things so you can't put HTML into it. - Utilizes TGUI better to show the user the max they can post. - Limits some things like circuits so you can't insert 50000 characters. --- code/game/machinery/pointdefense.dm | 12 +++++++----- code/game/machinery/telecomms/logbrowser.dm | 9 +++++---- .../game/machinery/telecomms/machine_interactions.dm | 9 +++++---- code/game/machinery/telecomms/telemonitor.dm | 5 +++-- code/game/machinery/telecomms/traffic_control.dm | 3 ++- code/game/objects/items/bodybag.dm | 2 +- code/game/objects/items/devices/gps.dm | 8 ++++---- code/game/objects/items/devices/tvcamera.dm | 3 ++- .../objects/items/weapons/implants/implantcase.dm | 2 +- code/modules/admin/verbs/randomverbs.dm | 6 +++++- code/modules/integrated_electronics/core/pins.dm | 5 +++-- code/modules/integrated_electronics/core/tools.dm | 2 +- .../modules/integrated_electronics/subtypes/input.dm | 3 ++- .../integrated_electronics/subtypes/memory.dm | 5 +++-- code/modules/mob/living/carbon/human/human_powers.dm | 6 +++--- code/modules/overmap/ships/computers/helm.dm | 5 +++-- code/modules/power/fusion/core/_core.dm | 3 ++- .../power/fusion/fuel_assembly/fuel_control.dm | 3 ++- .../power/fusion/fuel_assembly/fuel_injector.dm | 3 ++- .../power/fusion/gyrotron/gyrotron_control.dm | 3 ++- code/modules/power/turbine.dm | 6 ++++-- code/modules/shuttles/shuttle_console.dm | 3 ++- code/modules/tgui/modules/overmap.dm | 5 +++-- 23 files changed, 67 insertions(+), 44 deletions(-) diff --git a/code/game/machinery/pointdefense.dm b/code/game/machinery/pointdefense.dm index f19b80befc7..33c485a36e6 100644 --- a/code/game/machinery/pointdefense.dm +++ b/code/game/machinery/pointdefense.dm @@ -94,7 +94,8 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense) /obj/machinery/pointdefense_control/attackby(var/obj/item/W, var/mob/user) if(W?.is_multitool()) - var/new_ident = tgui_input_text(user, "Enter a new ident tag.", "[src]", id_tag) + var/new_ident = tgui_input_text(user, "Enter a new ident tag.", "[src]", id_tag, MAX_NAME_LEN) + new_ident = sanitize(new_ident,MAX_NAME_LEN) if(new_ident && new_ident != id_tag && user.Adjacent(src) && CanInteract(user, GLOB.tgui_physical_state)) // Check for duplicate controllers with this ID for(var/obj/machinery/pointdefense_control/PC as anything in pointdefense_controllers) @@ -211,7 +212,8 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense) /obj/machinery/power/pointdefense/attackby(var/obj/item/W, var/mob/user) if(W?.is_multitool()) - var/new_ident = tgui_input_text(user, "Enter a new ident tag.", "[src]", id_tag) + var/new_ident = tgui_input_text(user, "Enter a new ident tag.", "[src]", id_tag, MAX_NAME_LEN) + new_ident = sanitize(new_ident,MAX_NAME_LEN) if(new_ident && new_ident != id_tag && user.Adjacent(src) && CanInteract(user, GLOB.tgui_physical_state)) to_chat(user, "You register [src] with the [new_ident] network.") id_tag = new_ident @@ -295,7 +297,7 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense) var/obj/machinery/pointdefense_control/PC = get_controller() if(!istype(PC)) return - + // Compile list of known targets var/list/existing_targets = list() for(var/weakref/WR in PC.targets) @@ -319,7 +321,7 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense) engaging = target Shoot(target) return - + /obj/machinery/power/pointdefense/proc/targeting_check(var/obj/effect/meteor/M) // Target in range var/list/connected_z_levels = GetConnectedZlevels(get_z(src)) @@ -330,7 +332,7 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense) // If we can shoot it, then shoot if(emagged || !space_los(M)) return FALSE - + return TRUE /obj/machinery/power/pointdefense/RefreshParts() diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index 461a2004817..2de8d04a492 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -46,7 +46,7 @@ for(var/c in SelectedServer.log_entries) i++ var/datum/comm_log_entry/C = c - + // This is necessary to prevent leaking information to the clientside var/static/list/acceptable_params = list("uspeech", "intelligible", "message", "name", "race", "job", "timecode") var/list/parameters = list() @@ -74,7 +74,7 @@ if(!ui) ui = new(user, src, "TelecommsLogBrowser", name) ui.open() - + /obj/machinery/computer/telecomms/server/tgui_act(action, params) if(..()) return TRUE @@ -128,7 +128,8 @@ . = TRUE if("network") - var/newnet = tgui_input_text(usr, "Which network do you want to view?", "Comm Monitor", network) + var/newnet = tgui_input_text(usr, "Which network do you want to view?", "Comm Monitor", network, 15) + newnet = sanitize(newnet,15) if(newnet && ((usr in range(1, src) || issilicon(usr)))) if(length(newnet) > 15) @@ -139,7 +140,7 @@ set_temp("NEW NETWORK TAG SET IN ADDRESS \[[network]\]", "good") . = TRUE - + if("cleartemp") temp = null . = TRUE diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 1a9fc2246e1..ca8a74312aa 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -41,7 +41,7 @@ /obj/machinery/telecomms/tgui_data(mob/user) var/list/data = list() - + data["temp"] = temp data["on"] = on @@ -81,7 +81,7 @@ "index" = i, ))) data["linked"] = linked - + var/list/filter = list() for(var/x in freq_listening) filter.Add(list(list( @@ -213,7 +213,7 @@ /obj/machinery/telecomms/bus/Options_Act(action, params) if(..()) return TRUE - + switch(action) if("change_freq") . = TRUE @@ -267,7 +267,7 @@ /obj/machinery/telecomms/receiver/Options_Act(action, params) if(..()) return TRUE - + switch(action) if("range") var/new_range = params["range"] @@ -296,6 +296,7 @@ if("network") var/newnet = tgui_input_text(usr, "Specify the new network for this machine. This will break all current links.", src, network) + newnet = sanitize(newnet,15) if(newnet && canAccess(usr)) if(length(newnet) > 15) diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm index 3014474b8ea..cf9ab2096dc 100644 --- a/code/game/machinery/telecomms/telemonitor.dm +++ b/code/game/machinery/telecomms/telemonitor.dm @@ -100,7 +100,8 @@ . = TRUE if("network") - var/newnet = tgui_input_text(usr, "Which network do you want to view?", "Comm Monitor", network) + var/newnet = tgui_input_text(usr, "Which network do you want to view?", "Comm Monitor", network, 15) + newnet = sanitize(newnet,15) //Honestly, I'd be amazed if someone managed to do HTML in 15 chars. if(newnet && ((usr in range(1, src) || issilicon(usr)))) if(length(newnet) > 15) set_temp("FAILED: NETWORK TAG STRING TOO LENGTHY", "bad") @@ -108,7 +109,7 @@ network = newnet machinelist = list() set_temp("NEW NETWORK TAG SET IN ADDRESS \[[network]\]", "good") - + . = TRUE if("cleartemp") diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm index cf7f9946aae..17dbed4e2cc 100644 --- a/code/game/machinery/telecomms/traffic_control.dm +++ b/code/game/machinery/telecomms/traffic_control.dm @@ -192,7 +192,8 @@ if(href_list["network"]) - var/newnet = tgui_input_text(usr, "Which network do you want to view?", "Comm Monitor", network) + var/newnet = tgui_input_text(usr, "Which network do you want to view?", "Comm Monitor", network, 15) + newnet = sanitize(newnet,15) if(newnet && ((usr in range(1, src) || issilicon(usr)))) if(length(newnet) > 15) diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 862d4e6cdaf..94a24c9ee8b 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -33,7 +33,7 @@ /obj/structure/closet/body_bag/attackby(var/obj/item/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/pen)) - var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null) + var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null, MAX_NAME_LEN ) if (user.get_active_hand() != W) return if (!in_range(src, user) && src.loc != user) diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 21ec2ea3b66..980685f1241 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -137,7 +137,7 @@ var/list/GPS_list = list() if(emped) to_chat(user, "It's busted!") return - + toggle_tracking() if(tracking) to_chat(user, "[src] is no longer tracking, or visible to other GPS devices.") @@ -194,7 +194,7 @@ var/list/GPS_list = list() dat["curr_z"] = curr.z dat["curr_z_name"] = strip_improper(using_map.get_zlevel_name(curr.z)) dat["z_level_detection"] = using_map.get_map_levels(curr.z, long_range) - + var/list/gps_list = list() for(var/obj/item/device/gps/G in GPS_list - src) @@ -250,7 +250,7 @@ var/list/GPS_list = list() dat += "" var/gps_ref = "\ref[gps["ref"]]" dat += "[gps["gps_tag"]][gps["area_name"]]" - + if(istype(gps_data["ref"], /obj/item/device/gps/internal/poi)) dat += "[gps["local"] ? "[gps["direction"]] Dist: [round(gps["distance"], 10)]m" : "[gps["z_name"]]"]" else @@ -323,7 +323,7 @@ var/list/GPS_list = list() . = TRUE if(href_list["tag"]) - var/a = tgui_input_text(usr, "Please enter desired tag.", name, gps_tag) + var/a = tgui_input_text(usr, "Please enter desired tag.", name, gps_tag, 10) a = uppertext(copytext(sanitize(a), 1, 11)) if(in_range(src, usr)) gps_tag = a diff --git a/code/game/objects/items/devices/tvcamera.dm b/code/game/objects/items/devices/tvcamera.dm index 849a649894f..a9e5613a926 100644 --- a/code/game/objects/items/devices/tvcamera.dm +++ b/code/game/objects/items/devices/tvcamera.dm @@ -65,7 +65,8 @@ if(..()) return 1 if(href_list["channel"]) - var/nc = tgui_input_text(usr, "Channel name", "Select new channel name", channel) + var/nc = tgui_input_text(usr, "Channel name", "Select new channel name", channel, MAX_NAME_LEN) + nc = sanitize(nc,MAX_NAME_LEN) if(nc) channel = nc camera.c_tag = channel diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm index 1517e2ada31..5e81318ac6b 100644 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ b/code/game/objects/items/weapons/implants/implantcase.dm @@ -21,7 +21,7 @@ /obj/item/weapon/implantcase/attackby(obj/item/weapon/I as obj, mob/user as mob) ..() if (istype(I, /obj/item/weapon/pen)) - var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null) + var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null, MAX_NAME_LEN) if (user.get_active_hand() != I) return if((!in_range(src, usr) && src.loc != user)) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 4ae6532daf6..5133728ac0c 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -86,10 +86,14 @@ if (!holder) return - var/msg = sanitize(tgui_input_text(usr, "Message:", text("Subtle PM to [M.key]"))) + var/msg = tgui_input_text(usr, "Message:", text("Subtle PM to [M.key]")) if (!msg) return + + if(!(msg[1] == "<" && msg[length(msg)] == ">")) //You can use HTML but only if the whole thing is HTML. Tries to prevent admin 'accidents'. + msg = sanitize(msg) + if(usr) if (usr.client) if(usr.client.holder) diff --git a/code/modules/integrated_electronics/core/pins.dm b/code/modules/integrated_electronics/core/pins.dm index c402cf022d2..1d972fa0d72 100644 --- a/code/modules/integrated_electronics/core/pins.dm +++ b/code/modules/integrated_electronics/core/pins.dm @@ -154,12 +154,13 @@ list[]( var/new_data = null switch(type_to_use) if("string") - new_data = tgui_input_text(usr, "Now type in a string.","[src] string writing", istext(default) ? default : null) + new_data = tgui_input_text(usr, "Now type in a string.","[src] string writing", istext(default) ? default : null, MAX_NAME_LEN) + new_data = sanitize(new_data,MAX_NAME_LEN) if(istext(new_data) && holder.check_interactivity(user) ) to_chat(user, "You input [new_data] into the pin.") return new_data if("number") - new_data = tgui_input_number(usr, "Now type in a number.","[src] number writing", isnum(default) ? default : null) + new_data = tgui_input_number(usr, "Now type in a number.","[src] number writing", isnum(default) ? default : null, MAX_NAME_LEN) if(isnum(new_data) && holder.check_interactivity(user) ) to_chat(user, "You input [new_data] into the pin.") return new_data diff --git a/code/modules/integrated_electronics/core/tools.dm b/code/modules/integrated_electronics/core/tools.dm index dcaaf58057a..bc3b9493e26 100644 --- a/code/modules/integrated_electronics/core/tools.dm +++ b/code/modules/integrated_electronics/core/tools.dm @@ -122,7 +122,7 @@ switch(type_to_use) if("string") accepting_refs = 0 - new_data = tgui_input_text(usr, "Now type in a string.","[src] string writing") + new_data = tgui_input_text(usr, "Now type in a string.","[src] string writing", null, MAX_MESSAGE_LEN) new_data = sanitizeSafe(new_data, MAX_MESSAGE_LEN, 0, 0) if(istext(new_data) && CanInteract(user, GLOB.tgui_physical_state)) data_to_write = new_data diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 332b7bb580c..914a20a70d2 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -72,7 +72,8 @@ power_draw_per_use = 4 /obj/item/integrated_circuit/input/textpad/ask_for_input(mob/user) - var/new_input = tgui_input_text(user, "Enter some words, please.","Number pad", get_pin_data(IC_OUTPUT, 1)) + var/new_input = tgui_input_text(user, "Enter some words, please.","Number pad", get_pin_data(IC_OUTPUT, 1),MAX_NAME_LEN) + new_input = sanitize(new_input,MAX_NAME_LEN) if(istext(new_input) && CanInteract(user, GLOB.tgui_physical_state)) set_pin_data(IC_OUTPUT, 1, new_input) push_data() diff --git a/code/modules/integrated_electronics/subtypes/memory.dm b/code/modules/integrated_electronics/subtypes/memory.dm index 0148c01c05e..022eeb3da95 100644 --- a/code/modules/integrated_electronics/subtypes/memory.dm +++ b/code/modules/integrated_electronics/subtypes/memory.dm @@ -96,13 +96,14 @@ switch(type_to_use) if("string") accepting_refs = 0 - new_data = tgui_input_text(usr, "Now type in a string.","[src] string writing") + new_data = tgui_input_text(usr, "Now type in a string.","[src] string writing", MAX_NAME_LEN) + new_data = sanitize(new_data,MAX_NAME_LEN) if(istext(new_data) && CanInteract(user, GLOB.tgui_physical_state)) O.data = new_data to_chat(user, "You set \the [src]'s memory to [O.display_data(O.data)].") if("number") accepting_refs = 0 - new_data = tgui_input_number(usr, "Now type in a number.","[src] number writing") + new_data = tgui_input_number(usr, "Now type in a number.","[src] number writing", MAX_NAME_LEN) if(isnum(new_data) && CanInteract(user, GLOB.tgui_physical_state)) O.data = new_data to_chat(user, "You set \the [src]'s memory to [O.display_data(O.data)].") diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index f8d49b046ad..39ecfba3878 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -94,9 +94,9 @@ if(!target) return - text = tgui_input_text(usr, "What would you like to say?", "Speak to creature", null, null) + text = tgui_input_text(usr, "What would you like to say?", "Speak to creature", null, MAX_MESSAGE_LEN) - text = sanitize(text) + text = sanitize(text, MAX_MESSAGE_LEN) if(!text) return @@ -217,7 +217,7 @@ if(isSynthetic()) output += "Current Battery Charge: [nutrition]\n" - + var/toxDam = getToxLoss() if(toxDam) output += "System Instability: [toxDam > 25 ? "Severe" : "Moderate"]. Seek charging station for cleanup.\n" diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm index 64212fd3601..37c625dc895 100644 --- a/code/modules/overmap/ships/computers/helm.dm +++ b/code/modules/overmap/ships/computers/helm.dm @@ -157,7 +157,8 @@ GLOBAL_LIST_EMPTY(all_waypoints) switch(action) if("add") var/datum/computer_file/data/waypoint/R = new() - var/sec_name = tgui_input_text(usr, "Input navigation entry name", "New navigation entry", "Sector #[known_sectors.len]") + var/sec_name = tgui_input_text(usr, "Input navigation entry name", "New navigation entry", "Sector #[known_sectors.len]", MAX_NAME_LEN) + sec_name = sanitize(sec_name,MAX_NAME_LEN) if(tgui_status(usr, state) != STATUS_INTERACTIVE) return FALSE if(!sec_name) @@ -244,7 +245,7 @@ GLOBAL_LIST_EMPTY(all_waypoints) else autopilot = !autopilot . = TRUE - + if("apilot_lock") autopilot_disabled = !autopilot_disabled autopilot = FALSE diff --git a/code/modules/power/fusion/core/_core.dm b/code/modules/power/fusion/core/_core.dm index 308c9307839..dfcf908107a 100644 --- a/code/modules/power/fusion/core/_core.dm +++ b/code/modules/power/fusion/core/_core.dm @@ -149,7 +149,8 @@ GLOBAL_LIST_EMPTY(fusion_cores) return if(istype(W, /obj/item/device/multitool)) - var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", "Fusion Core", id_tag) + var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", "Fusion Core", id_tag, MAX_NAME_LEN) + new_ident = sanitize(new_ident,MAX_NAME_LEN) if(new_ident && user.Adjacent(src)) id_tag = new_ident return diff --git a/code/modules/power/fusion/fuel_assembly/fuel_control.dm b/code/modules/power/fusion/fuel_assembly/fuel_control.dm index 24394b79733..621847f79b6 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_control.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_control.dm @@ -117,7 +117,8 @@ /obj/machinery/computer/fusion_fuel_control/attackby(var/obj/item/W, var/mob/user) ..() if(istype(W, /obj/item/device/multitool)) - var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", "Fuel Control", monitor.fuel_tag) + var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", "Fuel Control", monitor.fuel_tag, MAX_NAME_LEN) + new_ident = sanitize(new_ident,MAX_NAME_LEN) if(new_ident && user.Adjacent(src)) monitor.fuel_tag = new_ident return diff --git a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm index 77b703e85e7..08c413cd021 100644 --- a/code/modules/power/fusion/fuel_assembly/fuel_injector.dm +++ b/code/modules/power/fusion/fuel_assembly/fuel_injector.dm @@ -43,7 +43,8 @@ GLOBAL_LIST_EMPTY(fuel_injectors) /obj/machinery/fusion_fuel_injector/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/device/multitool)) - var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", "Fuel Injector", id_tag) + var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", "Fuel Injector", id_tag, MAX_NAME_LEN) + new_ident = sanitize(new_ident,MAX_NAME_LEN) if(new_ident && user.Adjacent(src)) id_tag = new_ident return diff --git a/code/modules/power/fusion/gyrotron/gyrotron_control.dm b/code/modules/power/fusion/gyrotron/gyrotron_control.dm index 9ff359fd290..1979e091ad8 100644 --- a/code/modules/power/fusion/gyrotron/gyrotron_control.dm +++ b/code/modules/power/fusion/gyrotron/gyrotron_control.dm @@ -119,7 +119,8 @@ /obj/machinery/computer/gyrotron_control/attackby(var/obj/item/W, var/mob/user) ..() if(istype(W, /obj/item/device/multitool)) - var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", "Gyrotron Control", monitor.gyro_tag) + var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", "Gyrotron Control", monitor.gyro_tag, MAX_NAME_LEN) + new_ident = sanitize(new_ident,MAX_NAME_LEN) if(new_ident && user.Adjacent(src)) monitor.gyro_tag = new_ident return diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 77a5659cdda..9f542db4cc7 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -124,7 +124,8 @@ if(default_deconstruction_crowbar(user, W)) return if(istype(W, /obj/item/device/multitool)) - var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", name, comp_id) + var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", name, comp_id, MAX_NAME_LEN) + new_ident = sanitize(new_ident,MAX_NAME_LEN) if(new_ident && user.Adjacent(src)) comp_id = new_ident return @@ -337,7 +338,8 @@ /obj/machinery/computer/turbine_computer/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/device/multitool)) - var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", name, id) + var/new_ident = tgui_input_text(usr, "Enter a new ident tag.", name, id, MAX_NAME_LEN) + new_ident = sanitize(new_ident,MAX_NAME_LEN) if(new_ident && user.Adjacent(src)) id = new_ident return diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm index ce64593b9da..f3731ba2eb3 100644 --- a/code/modules/shuttles/shuttle_console.dm +++ b/code/modules/shuttles/shuttle_console.dm @@ -111,7 +111,8 @@ return TRUE if("set_codes") - var/newcode = tgui_input_text(usr, "Input new docking codes", "Docking codes", shuttle.docking_codes) + var/newcode = tgui_input_text(usr, "Input new docking codes", "Docking codes", shuttle.docking_codes, MAX_NAME_LEN) + newcode = sanitize(newcode,MAX_NAME_LEN) if(newcode && !..()) shuttle.set_docking_codes(uppertext(newcode)) return TRUE diff --git a/code/modules/tgui/modules/overmap.dm b/code/modules/tgui/modules/overmap.dm index a9fff0e6d40..13d80d9f93a 100644 --- a/code/modules/tgui/modules/overmap.dm +++ b/code/modules/tgui/modules/overmap.dm @@ -307,7 +307,8 @@ /* HELM */ if("add") var/datum/computer_file/data/waypoint/R = new() - var/sec_name = tgui_input_text(usr, "Input navigation entry name", "New navigation entry", "Sector #[known_sectors.len]") + var/sec_name = tgui_input_text(usr, "Input navigation entry name", "New navigation entry", "Sector #[known_sectors.len]", MAX_NAME_LEN) + sec_name = sanitize(sec_name,MAX_NAME_LEN) if(!sec_name) sec_name = "Sector #[known_sectors.len]" R.fields["name"] = sec_name @@ -383,7 +384,7 @@ else autopilot = !autopilot . = TRUE - + if("apilot_lock") autopilot_disabled = !autopilot_disabled autopilot = FALSE From 100e62f4f2ea63f62983c3b7fe879916c4672e46 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Fri, 30 Sep 2022 00:59:37 -0400 Subject: [PATCH 24/47] Adds new helpers for area calculation Fixes champagne --- code/_helpers/unsorted.dm | 26 ++++++++++++++++++++++++++ code/modules/overmap/champagne.dm | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 84844936c4f..d0a7bff2e0e 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -643,6 +643,20 @@ Turf and target are seperate in case you want to teleport some distance from a t for(var/turf/T in N) turfs += T return turfs + +//Takes: An instance of the area. +//Returns: A list of all turfs in that area. +//Side note: I don't know why this was never a thing. Did everyone just ignore the Blueprint item?! - C.L. +/proc/get_current_area_turfs(var/area/checked_area) + if(!checked_area) + return null + + var/list/turfs = new/list() + for(var/turf/counted_turfs in checked_area.contents) //Cheap. Efficient. Lovely. + turfs += counted_turfs + return turfs + + //Takes: Area type as text string or as typepath OR an instance of the area. //Returns: A list of all atoms (objs, turfs, mobs) in areas of that type of that type in the world. /proc/get_area_all_atoms(var/areatype) @@ -659,6 +673,18 @@ Turf and target are seperate in case you want to teleport some distance from a t atoms += A return atoms + +//Takes: Area as an instance of the area. +//Returns: A list of all atoms (objs, turfs, mobs) in the selected area. +/proc/get_current_area_atoms(var/area/checked_area) + if(!checked_area) + return null + + var/list/atoms = new/list() + for(var/atom/A in checked_area.contents) + atoms += A + return atoms + /datum/coords //Simple datum for storing coordinates. var/x_pos = null var/y_pos = null diff --git a/code/modules/overmap/champagne.dm b/code/modules/overmap/champagne.dm index 0d36766535b..593be7f2a6d 100644 --- a/code/modules/overmap/champagne.dm +++ b/code/modules/overmap/champagne.dm @@ -47,7 +47,7 @@ to_chat(user, "[comp] is already in a shuttle.") return // Count turfs in the area - var/list/turfs = get_area_turfs(my_area) + var/list/turfs = get_current_area_turfs(my_area) if(turfs.len > max_area_turfs) to_chat(user, "The new shuttle area is too large.") return From 41973fcdecec468a83258c4de4e9db77e91fbc3b Mon Sep 17 00:00:00 2001 From: "C.L" Date: Fri, 30 Sep 2022 18:21:06 -0400 Subject: [PATCH 25/47] Mining bugfix Some turfs didn't have the proper resource name to be spawned so it resulted in bugs. --- code/modules/random_map/noise/ore.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/random_map/noise/ore.dm b/code/modules/random_map/noise/ore.dm index 8a0b014303b..1ad91538668 100644 --- a/code/modules/random_map/noise/ore.dm +++ b/code/modules/random_map/noise/ore.dm @@ -76,10 +76,10 @@ T.resources["silver"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) T.resources["uranium"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) T.resources["phoron"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) - T.resources["osmium"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) + T.resources["platinum"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) T.resources["verdantium"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["lead"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) - T.resources["hydrogen"] = 0 + T.resources["mhydrogen"] = 0 T.resources["diamond"] = 0 T.resources["hematite"] = 0 T.resources["marble"] = 0 @@ -95,8 +95,8 @@ T.resources["diamond"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["verdantium"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) T.resources["phoron"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) - T.resources["osmium"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) - T.resources["hydrogen"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) + T.resources["platinum"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) + T.resources["mhydrogen"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) T.resources["marble"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) T.resources["lead"] = rand(RESOURCE_LOW_MIN, RESOURCE_HIGH_MAX) T.resources["hematite"] = 0 @@ -117,4 +117,4 @@ else if(value < deep_val) return "R" else - return "D" \ No newline at end of file + return "D" From 32a10b048c6406297e7fb19d3551dfdd1f6dfe56 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Fri, 30 Sep 2022 18:22:42 -0400 Subject: [PATCH 26/47] Update _aerostat.dm --- maps/expedition_vr/aerostat/_aerostat.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/maps/expedition_vr/aerostat/_aerostat.dm b/maps/expedition_vr/aerostat/_aerostat.dm index f2404f2f7e2..629e995f958 100644 --- a/maps/expedition_vr/aerostat/_aerostat.dm +++ b/maps/expedition_vr/aerostat/_aerostat.dm @@ -76,10 +76,10 @@ T.resources["silver"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) T.resources["uranium"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) T.resources["phoron"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) - T.resources["osmium"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) + T.resources["platinum"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) T.resources["verdantium"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["lead"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) - T.resources["hydrogen"] = 0 + T.resources["mhydrogen"] = 0 T.resources["diamond"] = 0 T.resources["hematite"] = 0 T.resources["marble"] = 0 @@ -95,8 +95,8 @@ T.resources["diamond"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["verdantium"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) T.resources["phoron"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) - T.resources["osmium"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) - T.resources["hydrogen"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) + T.resources["platinum"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) + T.resources["mhydrogen"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) T.resources["marble"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) T.resources["lead"] = rand(RESOURCE_LOW_MIN, RESOURCE_HIGH_MAX) T.resources["hematite"] = 0 From c0c8ca6eb6426eb64e0a1c086ef834369d6788d7 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Fri, 30 Sep 2022 20:50:10 -0400 Subject: [PATCH 27/47] god has left us MAJOR: - Completely revamps the blueprints. - Ports /tg/ blueprints and bastardizes them. Blueprint functions: - Create/modify an existing area (in a 3x3 square. Good for expanding an area to include walls or finetuning) - Create new area or merge two areas. (Allows you to make a new area if the room is airtight or merge two areas together.) - Change area name. - Wire Legend. Allows you to see what wires do. (Move this into its own seperate item) MINOR: - Adds a new global list "wire_name_directory" that is important for revealing wires. - Gave vent pumps, vent scrubbers, and air alarms a new update_area proc that is involved when their area is updated due to a blueprints being used. - Gave areas a 'setup' proc that is called when a new area is created via blueprints. Sets the area vars to what would be default (power off) Adds a new 'areasize' variable to areas that lets you know how large they are. - Added procs to areas to check the power in an area and check change the name of an area properly. - adds a new range_turfs and rect_turfs define. Unused for now. --- .../components/unary/vent_pump.dm | 7 + .../components/unary/vent_scrubber.dm | 6 + code/__defines/turfs.dm | 11 + code/_global_vars/lists/misc.dm | 3 +- code/datums/wires/wires.dm | 1 + code/game/area/areas_vr.dm | 41 ++ code/game/machinery/air_alarm.dm | 20 +- code/game/objects/items/blueprints_vr.dm | 695 ++++++++++++++++++ 8 files changed, 776 insertions(+), 8 deletions(-) create mode 100644 code/game/objects/items/blueprints_vr.dm diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 145381146fd..4b8970fd94d 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -94,6 +94,13 @@ assign_uid() id_tag = num2text(uid) +/obj/machinery/atmospherics/unary/vent_pump/proc/update_area() + initial_loc = get_area(loc) + area_uid = "\ref[initial_loc]" + assign_uid() + id_tag = num2text(uid) + + /obj/machinery/atmospherics/unary/vent_pump/Destroy() unregister_radio(src, frequency) if(initial_loc) diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 64a57a744e0..fe3e68130fa 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -43,6 +43,12 @@ assign_uid() id_tag = num2text(uid) +/obj/machinery/atmospherics/unary/vent_scrubber/proc/update_area() + initial_loc = get_area(loc) + area_uid = "\ref[initial_loc]" + assign_uid() + id_tag = num2text(uid) + /obj/machinery/atmospherics/unary/vent_scrubber/Destroy() unregister_radio(src, frequency) if(initial_loc) diff --git a/code/__defines/turfs.dm b/code/__defines/turfs.dm index 1c4b228b63c..421bfc258f4 100644 --- a/code/__defines/turfs.dm +++ b/code/__defines/turfs.dm @@ -28,3 +28,14 @@ #define OUTDOORS_NO 0 // Ditto. #define OUTDOORS_AREA -1 // If a turf has this, it will defer to the area's settings on init. // Note that after init, it will be either YES or NO. + +//supposedly the fastest way to do this according to https://gist.github.com/Giacom/be635398926bb463b42a +///Returns a list of turf in a square +#define RANGE_TURFS(RADIUS, CENTER) \ + RECT_TURFS(RADIUS, RADIUS, CENTER) + +#define RECT_TURFS(H_RADIUS, V_RADIUS, CENTER) \ + block( \ + locate(max(CENTER.x-(H_RADIUS),1), max(CENTER.y-(V_RADIUS),1), CENTER.z), \ + locate(min(CENTER.x+(H_RADIUS),world.maxx), min(CENTER.y+(V_RADIUS),world.maxy), CENTER.z) \ + ) \ No newline at end of file diff --git a/code/_global_vars/lists/misc.dm b/code/_global_vars/lists/misc.dm index a16573905e0..97cc3753a1e 100644 --- a/code/_global_vars/lists/misc.dm +++ b/code/_global_vars/lists/misc.dm @@ -2,7 +2,8 @@ GLOBAL_LIST_INIT(speech_toppings, list("|" = "i", "+" = "b", "_" = "u")) GLOBAL_LIST_EMPTY(meteor_list) /// List of wire colors for each object type of that round. One for airlocks, one for vendors, etc. -GLOBAL_LIST_EMPTY(wire_color_directory) // This is an associative list with the `holder_type` as the key, and a list of colors as the value. +GLOBAL_LIST_EMPTY(wire_color_directory) // This is an associative list with the `holder_type` as the key, and a list of colors as the value. +GLOBAL_LIST_EMPTY(wire_name_directory) // This is an associative list // Reference list for disposal sort junctions. Filled up by sorting junction's New() GLOBAL_LIST_EMPTY(tagger_locations) diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index 83ebb65fa8f..9a411c60ee3 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -43,6 +43,7 @@ if(!GLOB.wire_color_directory[holder_type]) randomize() GLOB.wire_color_directory[holder_type] = colors + GLOB.wire_name_directory[holder_type] = proper_name else colors = GLOB.wire_color_directory[holder_type] diff --git a/code/game/area/areas_vr.dm b/code/game/area/areas_vr.dm index e356063e2ab..f9326745660 100644 --- a/code/game/area/areas_vr.dm +++ b/code/game/area/areas_vr.dm @@ -5,6 +5,9 @@ var/block_suit_sensors = FALSE //If mob size is limited in the area. var/turf/ceiling_type + // Size of the area in open turfs, only calculated for indoors areas. + var/areasize = 0 + /area/Entered(var/atom/movable/AM, oldLoc) . = ..() if(enter_message && isliving(AM)) @@ -29,3 +32,41 @@ var/turf/TA = GetAbove(T) if(isopenspace(TA)) TA.ChangeTurf(ceiling_type, TRUE, TRUE, TRUE) + +/** + * Setup an area (with the given name) + * + * Sets the area name, sets all status var's to false and adds the area to the sorted area list + * //NOTE: Virgo does not have a sorted area list. + */ +/area/proc/setup(a_name) + name = a_name + power_equip = FALSE + power_light = FALSE + power_environ = FALSE + always_unpowered = FALSE + update_areasize() + +/area/proc/update_areasize() + if(outdoors) + return FALSE + areasize = 0 + for(var/turf/simulated/floor/T in contents) + areasize++ + +/proc/rename_area(a, new_name) + var/area/A = get_area(a) + var/prevname = "[A.name]" + set_area_machinery(A, new_name, prevname) + A.name = new_name + A.update_areasize() + return TRUE + +/area/proc/power_check() + if(!requires_power || !apc) + power_light = 0 + power_equip = 0 + power_environ = 0 + power_change() // all machines set to current power level, also updates lighting icon + if(no_spoilers) + set_spoiler_obfuscation(TRUE) \ No newline at end of file diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm index ca40f0dc530..82d6fa0f6f4 100644 --- a/code/game/machinery/air_alarm.dm +++ b/code/game/machinery/air_alarm.dm @@ -154,6 +154,12 @@ update_icon() +/obj/machinery/alarm/proc/update_area() + alarm_area = get_area(src) + area_uid = "\ref[alarm_area]" + if(name == "alarm") + name = "[alarm_area.name] Air Alarm" + /obj/machinery/alarm/Initialize() . = ..() set_frequency(frequency) @@ -540,9 +546,9 @@ var/list/list/environment_data = list() data["environment_data"] = environment_data - + DECLARE_TLV_VALUES - + var/pressure = environment.return_pressure() LOAD_TLV_VALUES(TLV["pressure"], pressure) environment_data.Add(list(list( @@ -551,7 +557,7 @@ "unit" = "kPa", "danger_level" = TEST_TLV_VALUES ))) - + var/temperature = environment.temperature LOAD_TLV_VALUES(TLV["temperature"], temperature) environment_data.Add(list(list( @@ -573,7 +579,7 @@ "unit" = "%", "danger_level" = TEST_TLV_VALUES ))) - + if(!locked || issilicon(user) || data["remoteUser"]) var/list/list/vents = list() data["vents"] = vents @@ -595,7 +601,7 @@ "extdefault"= (info["external"] == ONE_ATMOSPHERE), "intdefault"= (info["internal"] == 0), ))) - + var/list/list/scrubbers = list() data["scrubbers"] = scrubbers @@ -622,7 +628,7 @@ data["scrubbers"] = scrubbers data["mode"] = mode - + var/list/list/modes = list() data["modes"] = modes modes[++modes.len] = list("name" = "Filtering - Scrubs out contaminants", "mode" = AALARM_MODE_SCRUBBING, "selected" = mode == AALARM_MODE_SCRUBBING, "danger" = 0) @@ -682,7 +688,7 @@ else target_temperature = input_temperature + T0C return TRUE - + // Account for remote users here. // Yes, this is kinda snowflaky; however, I would argue it would be far more snowflakey // to include "custom hrefs" and all the other bullshit that nano states have just for the diff --git a/code/game/objects/items/blueprints_vr.dm b/code/game/objects/items/blueprints_vr.dm new file mode 100644 index 00000000000..16a8f71fee6 --- /dev/null +++ b/code/game/objects/items/blueprints_vr.dm @@ -0,0 +1,695 @@ +#define BP_MAX_ROOM_SIZE 300 + +// WARNING: ESOTERIC BULLSHIT INSIDE OF THIS FILE. +// This is a port of /tg/'s blueprints that also have Virgo modifications as well. +// However it is heavily modified and lacking the 't-ray' scanner functionality that /TG/ has. We have our own t-rays after all. +// This works and uses a bunch of really odd hacks and trickery to get it to all function. +// If you're looking at this a few years from now and going 'What the hell were they thinking' just know that this was the best we had at the time. + +// Now that I've scared away half the people looking at this file, here's the relevant info: + +// Banning areas: Go to /obj/item/areaeditor/proc/get_area_type and /proc/create_area and add the /area to: (area_or_turf_fail_types) +// That will bar people from doing ANYTHING to those areas. No creating inside of them. No merging into them. Etc. + +// Disallow creation but allow merge/expansion: Go to the same two above again. +// Add the /area to 'blacklisted_areas' in /proc/create_area + + +/area/tether/surfacebase/outside + name = "Outside - Surface" + +/area/groundbase/unexplored/outdoors + name = "\improper Rascal's Pass" + +/area/groundbase/mining + name = "Mining" + +/area/groundbase/unexplored/rock + name = "\improper Rascal's Pass" + +/area/maintenance/groundbase/level1 + name = "Groundbase Level One Maint" + +/area/submap/groundbase/wilderness + name = "Groundbase Wilderness" + +//TG blueprints. +#define AREA_ERRNONE 0 +#define AREA_STATION 1 +#define AREA_SPACE 2 +#define AREA_SPECIAL 3 + +/obj/item/areaeditor + name = "area modification item" + icon = 'icons/obj/items.dmi' + icon_state = "blueprints" + attack_verb = list("attacked", "bapped", "hit") + in_use = FALSE + preserve_item = 1 + var/uses_charges = 0 // If the area editor has limited uses. + var/charges = 0 // The amount of uses the area editor has. + + var/can_create_areas_in = AREA_SPACE // Must be standing in space to create + var/can_create_areas_into = AREA_SPACE // New areas will only overwrite space area turfs. + var/can_expand_areas_in = AREA_STATION // Must be standing in station to expand + var/can_expand_areas_into = AREA_SPACE // Can expand station areas only into space. + var/can_rename_areas_in = AREA_STATION // Only station areas can be reanamed + + + var/const/ROOM_ERR_LOLWAT = 0 // Don't touch these three consts or BYOND will literally tear out your throat + var/const/ROOM_ERR_SPACE = -1 + var/const/ROOM_ERR_TOOLARGE = -2 + var/const/ROOM_ERR_FORBIDDEN = -3 + + var/list/areaColor_turfs = list() + var/legend = 0 //If viewing wires or not. + + //Allows you to build new areas in these areas easily. + var/static/list/BUILDABLE_AREA_TYPES = list( + /area/space, + /area/mine, + //TETHER STUFF BELOW THIS + /area/tether/surfacebase/outside, + //GROUNDBASE STUFF BELOW THIS + /area/groundbase/unexplored/outdoors, + /area/maintenance/groundbase/level1, + /area/submap/groundbase/wilderness, + /area/groundbase/mining + ) + //Forbids you from doing anything to these areas. + var/static/list/SPECIALS = list( + /turf/space, + /area/shuttle, + /area/admin, + /area/arrival, + /area/centcom, + /area/asteroid, + /area/tdome, + /area/syndicate_station, + /area/wizard_station, + /area/prison, + /area/holodeck, + /area/turbolift + // /area/derelict //commented out, all hail derelict-rebuilders! + ) + + + +/obj/item/areaeditor/attack_self(mob/user) //Convert this to TGUI sometime to disallow browser exploits. + add_fingerprint(user) + . = "[src] \ +

        [station_name()] [src.name]

        " + switch(get_area_type()) + if(AREA_SPACE) + . += "

        According to the [src.name], you are now in an unclaimed territory.

        " + if(AREA_SPECIAL) + . += "

        This place is not noted on the [src.name].

        " + return //If we're in a special area, no modifying. + . += "

        Create or modify an existing area (3x3 space)

        " + . += "

        Create new area or merge two areas. (Whole Room)

        " + . += "There is a note on the corner of the [src.name]: Use 3x3 for fine-tuning and including walls into your area!" + + +/obj/item/areaeditor/Topic(href, href_list) + if(..()) + return TRUE + if ((usr.restrained() || usr.stat || usr.get_active_hand() != src)) + return + if(href_list["create_area"]) + if(in_use) + return + var/area/A = get_area(usr) + if(A.flags & BLUE_SHIELDED) + to_chat(usr, span_warning("You cannot edit restricted areas.")) + return + in_use = TRUE + create_area(usr) + in_use = FALSE + if(href_list["create_area_whole"]) + if(in_use) + return + in_use = TRUE + var/area/A = create_area_whole(usr) + if(A && (A.flags & BLUE_SHIELDED)) + to_chat(usr, span_warning("You cannot edit restricted areas.")) + in_use = FALSE + return + in_use = FALSE + updateUsrDialog() + +//Station blueprints!!! +/obj/item/areaeditor/blueprints + name = "station blueprints" + desc = "Blueprints of the station. There is a \"Classified\" stamp and several coffee stains on it." + var/list/image/showing = list() + var/client/viewing + + +/obj/item/areaeditor/blueprints/Destroy() + //clear_viewer() + return ..() + + +/obj/item/areaeditor/blueprints/attack_self(mob/user) + . = ..() + var/area/A = get_area(user) + if(!legend) + if(get_area_type() == AREA_STATION) + . += "

        According to \the [src], you are now in \"[html_encode(A.name)]\".

        " + . += "

        Change area name

        " + . += "

        View wire colour legend

        " + //if(!viewing) + // . += "

        View structural data

        " + //else + // . += "

        Refresh structural data

        " + // . += "

        Hide structural data

        " + else + if(legend == TRUE) + . += "<< Back" + . += view_wire_devices(user); + else + //legend is a wireset + . += "<< Back" + . += view_wire_set(user, legend) + var/datum/browser/popup = new(user, "blueprints", "[src]", 700, 500) + popup.set_content(.) + popup.open() + onclose(user, "blueprints") + + +/obj/item/areaeditor/blueprints/Topic(href, href_list) + if(..()) + return + if(href_list["edit_area"]) + if(get_area_type()!=AREA_STATION) + return + if(in_use) + return + in_use = TRUE + edit_area() + in_use = FALSE + if(href_list["exit_legend"]) + legend = FALSE; + if(href_list["view_legend"]) + legend = TRUE; + if(href_list["view_wireset"]) + legend = href_list["view_wireset"]; + /* + if(href_list["view_blueprints"]) + set_viewer(usr, span_notice("You flip the blueprints over to view the complex information diagram.")) + if(href_list["hide_blueprints"]) + clear_viewer(usr,span_notice("You flip the blueprints over to view the simple information diagram.")) + if(href_list["refresh"]) + clear_viewer(usr) + set_viewer(usr) + */ + attack_self(usr) //this is not the proper way, but neither of the old update procs work! it's too ancient and I'm tired shush. + + +//Code for viewing pipes or whatnot. Think t-ray scanner. +//Code for viewing pipes or whatnot. Think t-ray scanner. +//Code for viewing pipes or whatnot. Think t-ray scanner. +/* +/obj/item/areaeditor/blueprints/proc/get_images(turf/central_turf, viewsize) + . = list() + var/list/dimensions = getviewsize(viewsize) + var/horizontal_radius = dimensions[1] / 2 + var/vertical_radius = dimensions[2] / 2 + for(var/turf/nearby_turf as anything in RECT_TURFS(horizontal_radius, vertical_radius, central_turf)) + if(nearby_turf.blueprint_data) + . += nearby_turf.blueprint_data +*/ +/* +/obj/item/areaeditor/blueprints/proc/set_viewer(mob/user, message = "") + if(user?.client) + if(viewing) + clear_viewer() + viewing = user.client + showing = get_images(get_turf(viewing.eye || user), viewing.view) + viewing.images |= showing + if(message) + to_chat(user, message) +*/ +/* +/obj/item/areaeditor/blueprints/proc/clear_viewer(mob/user, message = "") + if(viewing) + viewing.images -= showing + viewing = null + showing.Cut() + if(message) + to_chat(user, message) +*/ +/obj/item/areaeditor/blueprints/dropped(mob/user) + ..() + //clear_viewer() + if(areaColor_turfs.len) + seeAreaColors_remove() + legend = FALSE + + + +/obj/item/areaeditor/proc/get_area_type(area/A) + if (!A) + A = get_area(usr) + if(A.outdoors) + return AREA_SPACE + + for (var/type in BUILDABLE_AREA_TYPES) + if ( istype(A,type) ) + return AREA_SPACE + + for (var/type in SPECIALS) + if ( istype(A,type) ) + return AREA_SPECIAL + return AREA_STATION + + +/obj/item/areaeditor/blueprints/proc/view_wire_devices(mob/user) + var/message = "
        You examine the wire legend.
        " + for(var/wireset in GLOB.wire_color_directory) + //if(istype(wireset,/datum/wires/grid_checker))//Uncomment this in if you want the grid checker minigame to not be revealed here. + // continue + message += "
        [GLOB.wire_name_directory[wireset]]" + message += "

        " + return message + +/obj/item/areaeditor/blueprints/proc/view_wire_set(mob/user, wireset) + //for some reason you can't use wireset directly as a derefencer so this is the next best :/ + for(var/device in GLOB.wire_color_directory) + if("[device]" == wireset) //I know... don't change it... + var/message = "

        [GLOB.wire_name_directory[device]]:" + for(var/Col in GLOB.wire_color_directory[device]) + var/wire_name = GLOB.wire_color_directory[device][Col] + if(!findtext(wire_name, WIRE_DUD_PREFIX)) //don't show duds + message += "

        [Col]: [wire_name]

        " + message += "

        " + return message + return "" + + +/obj/item/areaeditor/proc/edit_area() + var/area/A = get_area(usr) + var/prevname = "[A.name]" + var/str = tgui_input_text(usr, "New area name", "Area Creation", max_length = MAX_NAME_LEN) + str = sanitize(str,MAX_NAME_LEN) + if(!str || !length(str) || str==prevname) //cancel + return + if(length(str) > 50) + to_chat(usr, span_warning("The given name is too long. The area's name is unchanged.")) + return + + rename_area(A, str) + + to_chat(usr, span_notice("You rename the '[prevname]' to '[str]'.")) + log_and_message_admins("has changed the area '[prevname]' title to '[str]'.") + A.update_areasize() + interact() + return TRUE + +//Blueprint Subtypes + +/obj/item/areaeditor/blueprints/cyborg + name = "station schematics" + desc = "A digital copy of the station blueprints stored in your memory." + + +/proc/set_area_machinery(area/area, title, oldtitle) + if(!oldtitle) // or replacetext goes to infinite loop + return + for(var/obj/machinery/alarm/airpanel in area) + airpanel.name = replacetext(airpanel.name,oldtitle,title) + airpanel.update_area() + for(var/obj/machinery/power/apc/apcpanel in area) + apcpanel.name = replacetext(apcpanel.name,oldtitle,title) + apcpanel.update_area() //DECIDE IF THIS IS WANTED OR NOT. This can mean that the APC will overwrite the current APC the area being expanded has since areas cant have multiple APCs. + for(var/obj/machinery/atmospherics/unary/vent_scrubber/scrubber in area) + scrubber.name = replacetext(scrubber.name,oldtitle,title) + scrubber.update_area() + for(var/obj/machinery/atmospherics/unary/vent_pump/vent in area) + vent.name = replacetext(vent.name,oldtitle,title) + vent.update_area() + for(var/obj/machinery/door/door in area) + door.name = replacetext(door.name,oldtitle,title) + for(var/obj/machinery/firealarm/firepanel in area) + firepanel.name = replacetext(firepanel.name,oldtitle,title) + area.update_areasize() + //TODO: much much more. Unnamed airlocks, cameras, etc. + +/proc/detect_room(turf/origin, list/break_if_found, max_size=INFINITY) + if(origin.blocks_air) + return list(origin) + + . = list() + var/list/checked_turfs = list() + var/list/found_turfs = list(origin) + while(length(found_turfs)) + var/turf/sourceT = found_turfs[1] + found_turfs.Cut(1, 2) + var/dir_flags = checked_turfs[sourceT] + for(var/dir in GLOB.alldirs) + if(length(.) > max_size) + return + if(dir_flags & dir) // This means we've checked this dir before, probably from the other turf + continue + var/turf/checkT = get_step(sourceT, dir) + if(!checkT) + continue + + checked_turfs[sourceT] |= dir + checked_turfs[checkT] |= turn(dir, 180) + .[sourceT] |= dir + .[checkT] |= turn(dir, 180) + if(break_if_found[checkT.type] || break_if_found[checkT.loc.type]) + return FALSE + + //BEGIN ESOTERIC BULLSHIT + //log_debug("Origin: [origin.c_airblock(checkT)] SourceT: [sourceT.c_airblock(checkT)] 0=NB 1=AB 2=ZB, 3=B") + if(origin.c_airblock(checkT)) //If everything breaks and it doesn't want to work, turn on the above debug and check this line. C.L. 0 = not blocked. + continue + //END ESOTERIC BULLSHIT + + found_turfs += checkT // Since checkT is connected, add it to the list to be processed + if(found_turfs.len) + found_turfs += origin //If this isn't done, it just adds the 8 tiles around the user. + return found_turfs + +/proc/create_area(mob/creator) + // Passed into the above proc as list/break_if_found + // WHATEVER YOU DO, DO NOT LEAVE THE LAST THING IN THE LIST BELOW HAVE A COMMA OR EVERYTHING EVER WILL BREAK + // AND ENGINEERS ALL OVER THE WORLD WILL HARMBATON YOU + // ENSURE THE LAST AREA OR TURF LISTED IS SIMPLY "/area/clownhideout" AND NOT "/area/clownhideout," OR YOU WILL IMMEDIATELY DIE + var/static/list/area_or_turf_fail_types = typecacheof(list( + /turf/space, + /area/shuttle, + /area/admin, + /area/arrival, + /area/centcom, + /area/asteroid, + /area/tdome, + /area/syndicate_station, + /area/wizard_station, + /area/prison, + /area/holodeck, + /turf/simulated/wall/elevator, + /area/turbolift + )) + + // Ignore these areas and dont let people expand them. They can expand into them though + var/static/list/blacklisted_areas = typecacheof(list( + /area/space, + /area/mine, + //TETHER STUFF BELOW THIS + /area/tether/surfacebase/outside, + //GROUNDBASE STUFF BELOW THIS + /area/groundbase/unexplored/outdoors, + /area/maintenance/groundbase/level1, + /area/submap/groundbase/wilderness, + /area/groundbase/mining + )) + + var/list/turfs = detect_room(get_turf(creator), area_or_turf_fail_types, BP_MAX_ROOM_SIZE*2) + if(!turfs) + to_chat(creator, span_warning("The new area must have a floor and not a part of a shuttle.")) + return + if(length(turfs) > BP_MAX_ROOM_SIZE) + to_chat(creator, span_warning("The room you're in is too big. It is [length(turfs) >= BP_MAX_ROOM_SIZE *2 ? "more than 100" : ((length(turfs) / BP_MAX_ROOM_SIZE)-1)*100]% larger than allowed.")) + return + var/list/areas = list("New Area" = /area) + + for(var/i in 1 to length(turfs)) + var/area/place = get_area(turfs[i]) + if(blacklisted_areas[place.type]) + continue + if(!place.requires_power || (place.flags & BLUE_SHIELDED)) + continue // No expanding powerless rooms etc + areas[place.name] = place + + var/area_choice = tgui_input_list(creator, "Choose an area to expand or make a new area", "Area Expansion", areas) + if(isnull(area_choice)) + to_chat(creator, span_warning("No choice selected. No adjustments made.")) + return + area_choice = areas[area_choice] + + var/area/newA + var/area/oldA = get_area(get_turf(creator)) + if(!isarea(area_choice)) + var/str = tgui_input_text(creator, "New area name", "Blueprint Editing", max_length = MAX_NAME_LEN) + str = sanitize(str,MAX_NAME_LEN) + if(!str || !length(str)) //cancel + return + if(length(str) > 50) + to_chat(creator, "Name too long.") + return + for(var/area/A in world) //Check to make sure we're not making a duplicate name. Sanity. + if(A.name == str) + to_chat(creator, "An area in the world alreay has this name.") + return + newA = new area_choice + newA.setup(str) + newA.has_gravity = oldA.has_gravity + else + newA = area_choice + + for(var/i in 1 to length(turfs)) + var/turf/thing = turfs[i] + newA.contents += thing + + + set_area_machinery(newA, newA.name, oldA.name)// Change the name and area defines of all the machinery to the correct area. + oldA.power_check() //Simply makes the area turn the power off if you nicked an APC from it. + to_chat(creator, span_notice("You have created a new area, named [newA.name]. It is now weather proof, and constructing an APC will allow it to be powered.")) + return TRUE + + + +// USED FOR VARIANT ROOM CREATION. +// OLD CODE. DON'T TOUCH OR 100 RABID SQUIRRELS WILL DEVOUR YOU. +// I say old code, but it truly isn't. It's a bastardization of the new create_area code and the old create_area code. +// In essence, it does a few things: Ensure no blacklisted areas are nearby, get the nearby areas (to allow merging), and allow you to make a whole near area. +/obj/item/areaeditor/proc/create_area_whole(mob/creator) //Gets the entire enclosed space and makes a new area out of it. Can overwrite old areas. + + //TODO: Convert this and the one in create_area to a global list. + var/static/list/area_or_turf_fail_types = typecacheof(list( + /turf/space, + /area/shuttle, + /area/admin, + /area/arrival, + /area/centcom, + /area/asteroid, + /area/tdome, + /area/syndicate_station, + /area/wizard_station, + /area/prison, + /area/holodeck, + /turf/simulated/wall/elevator, + /area/turbolift + )) + + var/static/list/blacklisted_areas = typecacheof(list( + /area/space, + /area/mine, + //TETHER STUFF BELOW THIS + /area/tether/surfacebase/outside, + //GROUNDBASE STUFF BELOW THIS + /area/groundbase/unexplored/outdoors, + /area/maintenance/groundbase/level1, + /area/submap/groundbase/wilderness, + /area/groundbase/mining + )) + + var/res = detect_room_ex(get_turf(creator), can_create_areas_into, area_or_turf_fail_types) + if(!res) + to_chat(creator, span_warning("There is an area forbidden from being edited here! Use the fine-tune area creator! (3x3)")) + return + + if(!istype(res,/list)) + switch(res) + if(ROOM_ERR_SPACE) + to_chat(creator, "The new area must be completely airtight!") + return + if(ROOM_ERR_TOOLARGE) + to_chat(creator, "The new area too large!") + return + if(ROOM_ERR_FORBIDDEN) + to_chat(creator, "There is an area forbidden from being edited here!") + return + else + to_chat(creator, "Error! Please notify administration!") + return + var/list/turf/turfs = res + + var/list/areas = list("New Area" = /area) //The list of areas surrounding the user. + var/area/newA //The new area + var/area/oldA = get_area(get_turf(creator)) //The old area (area currently standing in) + var/str //What the new area is named. + + var/list/nearby_turfs_to_check = detect_room(get_turf(creator), area_or_turf_fail_types, BP_MAX_ROOM_SIZE*2) //Get the nearby areas. + + if(!nearby_turfs_to_check) + to_chat(creator, span_warning("The new area must have a floor and not a part of a shuttle.")) + return + if(length(turfs) > BP_MAX_ROOM_SIZE) + to_chat(creator, span_warning("The room you're in is too big. It is [length(turfs) >= BP_MAX_ROOM_SIZE *2 ? "more than 100" : ((length(turfs) / BP_MAX_ROOM_SIZE)-1)*100]% larger than allowed.")) + return + + for(var/i in 1 to length(nearby_turfs_to_check)) + var/area/place = get_area(nearby_turfs_to_check[i]) + if(blacklisted_areas[place.type]) + if(!creator.lastarea != place) //Stops them from merging a blacklisted area to make it larger. Allows them to merge a blacklisted area into an allowed area. (Expansion!) + continue + if(!place.requires_power || (place.flags & BLUE_SHIELDED)) + continue // No expanding powerless rooms etc + areas[place.name] = place + + var/area_choice = tgui_input_list(creator, "Choose an area to merge into the area you are currently standing on OR make a new area..", "Area Expansion", areas) + if(isnull(area_choice)) //They pressed cancel. + to_chat(creator, "No changes made.") + return + + area_choice = areas[area_choice] + + if(!isarea(area_choice)) //They chose "New Area" + str = tgui_input_text(creator, "New area name", "Blueprint Editing", max_length = MAX_NAME_LEN) + str = sanitize(str,MAX_NAME_LEN) + if(!str || !length(str)) //cancel + return + if(length(str) > 50) + to_chat(creator, "Name too long.") + return + for(var/area/A in world) //Check to make sure we're not making a duplicate name. Sanity. + if(A.name == str) + to_chat(creator, "An area in the world alreay has this name.") + return + newA = new area_choice + newA.setup(str) + newA.has_gravity = oldA.has_gravity + else + newA = area_choice + + if(str) //New area, new name. + newA.setup(str) + else + newA.setup(newA.name) + move_turfs_to_area(turfs, newA) + newA.has_gravity = oldA.has_gravity + set_area_machinery(newA, newA.name, oldA.name) + oldA.power_check() //Simply makes the area turn the power off if you nicked an APC from it. + to_chat(creator, span_notice("You have created a new area, named [newA.name]. It is now weather proof, and constructing an APC will allow it to be powered.")) + + + spawn(5) + interact() + return + +/obj/item/areaeditor/proc/move_turfs_to_area(var/list/turf/turfs, var/area/A) + for(var/T in turfs) + ChangeArea(T, A) + + +/obj/item/areaeditor/proc/detect_room_ex(var/turf/first, var/allowedAreas = AREA_SPACE, list/forbiddenAreas) + if(!istype(first)) + return ROOM_ERR_LOLWAT + if(forbiddenAreas[first.loc.type] || forbiddenAreas[first.type]) //Is the area of the starting turf a banned area? Is the turf a banned area? + return ROOM_ERR_FORBIDDEN + var/list/turf/found = new + var/list/turf/pending = list(first) + while(pending.len) + if (found.len+pending.len > BP_MAX_ROOM_SIZE) + return ROOM_ERR_TOOLARGE + var/turf/T = pending[1] //why byond havent list::pop()? + pending -= T + for (var/dir in cardinal) + var/turf/NT = get_step(T,dir) + if (!isturf(NT) || (NT in found) || (NT in pending)) + continue + if(forbiddenAreas[NT.loc.type]) + return ROOM_ERR_FORBIDDEN + // We ask ZAS to determine if its airtight. Thats what matters anyway right? + if(air_master.air_blocked(T, NT)) + // Okay thats the edge of the room + if(get_area_type(NT.loc) == AREA_SPACE && air_master.air_blocked(NT, NT)) + found += NT // So we include walls/doors not already in any area + continue + if (istype(NT, /turf/space)) + return ROOM_ERR_SPACE //omg hull breach we all going to die here + if (istype(NT, /turf/simulated/shuttle)) + return ROOM_ERR_SPACE // Unsure why this, but was in old code. Trusting for now. + if (NT.loc != first.loc && !(get_area_type(NT.loc) & allowedAreas)) + // Edge of a protected area. Lets stop here... + continue + if (!istype(NT, /turf/simulated)) + // Great, unsimulated... eh, just stop searching here + continue + // Okay, NT looks promising, lets continue the search there! + pending += NT + found += T + // end while + return found + + + + + + + +//Nice verbs for the engineer to see where areas start/end. + +/obj/item/areaeditor/verb/seeRoomColors() + set src in usr + set category = "Blueprints" + set name = "Show Room Colors" + + // If standing somewhere we can expand from, use expand perms, otherwise create + var/canOverwrite = (get_area_type() & can_expand_areas_in) ? can_expand_areas_into : can_create_areas_into + var/res = detect_room_ex(get_turf(usr), canOverwrite) + if(!istype(res, /list)) + switch(res) + if(ROOM_ERR_SPACE) + to_chat(usr, "The new area must be completely airtight!") + return + if(ROOM_ERR_TOOLARGE) + to_chat(usr, "The new area too large!") + return + else + to_chat(usr, "Error! Please notify administration!") + return + // Okay we got a room, lets color it + seeAreaColors_remove() + var/icon/green = new('icons/misc/debug_group.dmi', "green") + for(var/turf/T in res) + usr << image(green, T, "blueprints", TURF_LAYER) + areaColor_turfs += T + to_chat(usr, "The space covered by the new area is highlighted in green.") + +/obj/item/areaeditor/verb/seeAreaColors() + set src in usr + set category = "Blueprints" + set name = "Show Area Colors" + + // Remove any existing + seeAreaColors_remove() + + to_chat(usr, "\The [src] shows nearby areas in different colors.") + var/i = 0 + for(var/area/A in range(usr)) + if(get_area_type(A) == AREA_SPACE) + continue // Don't overlay all of space! + var/icon/areaColor = new('icons/misc/debug_rebuild.dmi', "[++i]") + to_chat(usr, "- [A] as [i]") + for(var/turf/T in A.contents) + usr << image(areaColor, T, "blueprints", TURF_LAYER) + areaColor_turfs += T + +/obj/item/areaeditor/verb/seeAreaColors_remove() + set src in usr + set category = "Blueprints" + set name = "Remove Area Colors" + + areaColor_turfs.Cut() + if(usr.client.images.len) + for(var/image/i in usr.client.images) + if(i.icon_state == "blueprints") + usr.client.images.Remove(i) + + +#undef BP_MAX_ROOM_SIZE \ No newline at end of file From 6aa0349467cc18325fbbfc20571414b438c75a49 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Fri, 30 Sep 2022 20:50:44 -0400 Subject: [PATCH 28/47] Enable the blueprints themselves Had to disable minitest. --- vorestation.dme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vorestation.dme b/vorestation.dme index b2b6af79404..6953386ee78 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1159,7 +1159,7 @@ #include "code\game\objects\items\antag_spawners.dm" #include "code\game\objects\items\apc_frame.dm" #include "code\game\objects\items\bells.dm" -#include "code\game\objects\items\blueprints.dm" +#include "code\game\objects\items\blueprints_vr.dm" #include "code\game\objects\items\bodybag.dm" #include "code\game\objects\items\contraband.dm" #include "code\game\objects\items\contraband_vr.dm" From 77434d2297dd48c2a9b7fa5330bbea76e3089d6e Mon Sep 17 00:00:00 2001 From: "C.L" Date: Fri, 30 Sep 2022 21:54:33 -0400 Subject: [PATCH 29/47] Makes global lists. Fixes show color. --- code/_helpers/global_lists_vr.dm | 65 +++++++++++++- code/game/objects/items/blueprints_vr.dm | 104 +++-------------------- 2 files changed, 76 insertions(+), 93 deletions(-) diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index d7d180d4dfa..f97919ddaf1 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -825,4 +825,67 @@ var/global/list/xenobio_rainbow_extracts = list( /obj/item/slime_extract/ruby = 3, /obj/item/slime_extract/emerald = 3, /obj/item/slime_extract/light_pink = 1, - /obj/item/slime_extract/rainbow = 1) \ No newline at end of file + /obj/item/slime_extract/rainbow = 1) + + +// BLUEPRINT STUFF BELOW HERE +// typecacheof(list) and list() are two completely separate things, don't break! + +// WHATEVER YOU DO, DO NOT LEAVE THE LAST THING IN THE LIST BELOW HAVE A COMMA OR EVERYTHING EVER WILL BREAK +// ENSURE THE LAST AREA OR TURF LISTED IS SIMPLY "/area/clownhideout" AND NOT "/area/clownhideout," OR YOU WILL IMMEDIATELY DIE + +var/global/list/BUILDABLE_AREA_TYPES = list( + /area/space, + /area/mine, + //TETHER STUFF BELOW THIS + /area/tether/surfacebase/outside, + //GROUNDBASE STUFF BELOW THIS + /area/groundbase/unexplored/outdoors, + /area/maintenance/groundbase/level1, + /area/submap/groundbase/wilderness, + /area/groundbase/mining +) + +var/static/list/blacklisted_areas = typecacheof(list( + /area/space, + /area/mine, + //TETHER STUFF BELOW THIS + /area/tether/surfacebase/outside, + //GROUNDBASE STUFF BELOW THIS + /area/groundbase/unexplored/outdoors, + /area/maintenance/groundbase/level1, + /area/submap/groundbase/wilderness, + /area/groundbase/mining + )) + +var/global/list/SPECIALS = list( + /turf/space, + /area/shuttle, + /area/admin, + /area/arrival, + /area/centcom, + /area/asteroid, + /area/tdome, + /area/syndicate_station, + /area/wizard_station, + /area/prison, + /area/holodeck, + /area/turbolift + // /area/derelict //commented out, all hail derelict-rebuilders! +) + +var/global/list/area_or_turf_fail_types = typecacheof(list( + /turf/space, + /area/shuttle, + /area/admin, + /area/arrival, + /area/centcom, + /area/asteroid, + /area/tdome, + /area/syndicate_station, + /area/wizard_station, + /area/prison, + /area/holodeck, + /turf/simulated/wall/elevator, + /area/turbolift + )) diff --git a/code/game/objects/items/blueprints_vr.dm b/code/game/objects/items/blueprints_vr.dm index 16a8f71fee6..59aec7a8a23 100644 --- a/code/game/objects/items/blueprints_vr.dm +++ b/code/game/objects/items/blueprints_vr.dm @@ -64,36 +64,6 @@ var/list/areaColor_turfs = list() var/legend = 0 //If viewing wires or not. - //Allows you to build new areas in these areas easily. - var/static/list/BUILDABLE_AREA_TYPES = list( - /area/space, - /area/mine, - //TETHER STUFF BELOW THIS - /area/tether/surfacebase/outside, - //GROUNDBASE STUFF BELOW THIS - /area/groundbase/unexplored/outdoors, - /area/maintenance/groundbase/level1, - /area/submap/groundbase/wilderness, - /area/groundbase/mining - ) - //Forbids you from doing anything to these areas. - var/static/list/SPECIALS = list( - /turf/space, - /area/shuttle, - /area/admin, - /area/arrival, - /area/centcom, - /area/asteroid, - /area/tdome, - /area/syndicate_station, - /area/wizard_station, - /area/prison, - /area/holodeck, - /area/turbolift - // /area/derelict //commented out, all hail derelict-rebuilders! - ) - - /obj/item/areaeditor/attack_self(mob/user) //Convert this to TGUI sometime to disallow browser exploits. add_fingerprint(user) @@ -378,34 +348,7 @@ // WHATEVER YOU DO, DO NOT LEAVE THE LAST THING IN THE LIST BELOW HAVE A COMMA OR EVERYTHING EVER WILL BREAK // AND ENGINEERS ALL OVER THE WORLD WILL HARMBATON YOU // ENSURE THE LAST AREA OR TURF LISTED IS SIMPLY "/area/clownhideout" AND NOT "/area/clownhideout," OR YOU WILL IMMEDIATELY DIE - var/static/list/area_or_turf_fail_types = typecacheof(list( - /turf/space, - /area/shuttle, - /area/admin, - /area/arrival, - /area/centcom, - /area/asteroid, - /area/tdome, - /area/syndicate_station, - /area/wizard_station, - /area/prison, - /area/holodeck, - /turf/simulated/wall/elevator, - /area/turbolift - )) - // Ignore these areas and dont let people expand them. They can expand into them though - var/static/list/blacklisted_areas = typecacheof(list( - /area/space, - /area/mine, - //TETHER STUFF BELOW THIS - /area/tether/surfacebase/outside, - //GROUNDBASE STUFF BELOW THIS - /area/groundbase/unexplored/outdoors, - /area/maintenance/groundbase/level1, - /area/submap/groundbase/wilderness, - /area/groundbase/mining - )) var/list/turfs = detect_room(get_turf(creator), area_or_turf_fail_types, BP_MAX_ROOM_SIZE*2) if(!turfs) @@ -468,35 +411,6 @@ // In essence, it does a few things: Ensure no blacklisted areas are nearby, get the nearby areas (to allow merging), and allow you to make a whole near area. /obj/item/areaeditor/proc/create_area_whole(mob/creator) //Gets the entire enclosed space and makes a new area out of it. Can overwrite old areas. - //TODO: Convert this and the one in create_area to a global list. - var/static/list/area_or_turf_fail_types = typecacheof(list( - /turf/space, - /area/shuttle, - /area/admin, - /area/arrival, - /area/centcom, - /area/asteroid, - /area/tdome, - /area/syndicate_station, - /area/wizard_station, - /area/prison, - /area/holodeck, - /turf/simulated/wall/elevator, - /area/turbolift - )) - - var/static/list/blacklisted_areas = typecacheof(list( - /area/space, - /area/mine, - //TETHER STUFF BELOW THIS - /area/tether/surfacebase/outside, - //GROUNDBASE STUFF BELOW THIS - /area/groundbase/unexplored/outdoors, - /area/maintenance/groundbase/level1, - /area/submap/groundbase/wilderness, - /area/groundbase/mining - )) - var/res = detect_room_ex(get_turf(creator), can_create_areas_into, area_or_turf_fail_types) if(!res) to_chat(creator, span_warning("There is an area forbidden from being edited here! Use the fine-tune area creator! (3x3)")) @@ -541,13 +455,19 @@ continue // No expanding powerless rooms etc areas[place.name] = place - var/area_choice = tgui_input_list(creator, "Choose an area to merge into the area you are currently standing on OR make a new area..", "Area Expansion", areas) + //They can select an area they want to turn their current area into. + var/area_choice = tgui_input_list(creator, "What area do you want to turn the area YOU ARE CURRENTLY STANDING IN to? Or do you want to make a new area?", "Area Expansion", areas) if(isnull(area_choice)) //They pressed cancel. to_chat(creator, "No changes made.") return area_choice = areas[area_choice] + var/confirm = tgui_alert(creator, "Are you sure you want to turn [oldA.name] into [area_choice]?", "READ CAREFULLY", list("No", "Yes")) + if(confirm == "No") + to_chat(creator, "No changes made.") + return + if(!isarea(area_choice)) //They chose "New Area" str = tgui_input_text(creator, "New area name", "Blueprint Editing", max_length = MAX_NAME_LEN) str = sanitize(str,MAX_NAME_LEN) @@ -564,7 +484,7 @@ newA.setup(str) newA.has_gravity = oldA.has_gravity else - newA = area_choice + newA = area_choice //They selected to turn the area they're standing on into the selected area. if(str) //New area, new name. newA.setup(str) @@ -586,10 +506,10 @@ ChangeArea(T, A) -/obj/item/areaeditor/proc/detect_room_ex(var/turf/first, var/allowedAreas = AREA_SPACE, list/forbiddenAreas) +/obj/item/areaeditor/proc/detect_room_ex(var/turf/first, var/allowedAreas = AREA_SPACE, var/list/forbiddenAreas = list(), var/visual) if(!istype(first)) return ROOM_ERR_LOLWAT - if(forbiddenAreas[first.loc.type] || forbiddenAreas[first.type]) //Is the area of the starting turf a banned area? Is the turf a banned area? + if(!visual && forbiddenAreas[first.loc.type] || forbiddenAreas[first.type]) //Is the area of the starting turf a banned area? Is the turf a banned area? return ROOM_ERR_FORBIDDEN var/list/turf/found = new var/list/turf/pending = list(first) @@ -602,7 +522,7 @@ var/turf/NT = get_step(T,dir) if (!isturf(NT) || (NT in found) || (NT in pending)) continue - if(forbiddenAreas[NT.loc.type]) + if(!visual && forbiddenAreas[NT.loc.type]) return ROOM_ERR_FORBIDDEN // We ask ZAS to determine if its airtight. Thats what matters anyway right? if(air_master.air_blocked(T, NT)) @@ -641,7 +561,7 @@ // If standing somewhere we can expand from, use expand perms, otherwise create var/canOverwrite = (get_area_type() & can_expand_areas_in) ? can_expand_areas_into : can_create_areas_into - var/res = detect_room_ex(get_turf(usr), canOverwrite) + var/res = detect_room_ex(get_turf(usr), canOverwrite, visual = 1) if(!istype(res, /list)) switch(res) if(ROOM_ERR_SPACE) From b5a51abd16ee4b5ca86d90568f9e05ae86cf3cfb Mon Sep 17 00:00:00 2001 From: "C.L" Date: Fri, 30 Sep 2022 23:00:15 -0400 Subject: [PATCH 30/47] Fixes lighting. Fixes lighting bug. Will apply to buildmode as well. --- code/game/objects/items/blueprints_vr.dm | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/blueprints_vr.dm b/code/game/objects/items/blueprints_vr.dm index 59aec7a8a23..1b9f60f91c3 100644 --- a/code/game/objects/items/blueprints_vr.dm +++ b/code/game/objects/items/blueprints_vr.dm @@ -393,9 +393,10 @@ else newA = area_choice - for(var/i in 1 to length(turfs)) + for(var/i in 1 to length(turfs)) //Fix lighting. Praise the lord. var/turf/thing = turfs[i] newA.contents += thing + thing.change_area(oldA, newA) set_area_machinery(newA, newA.name, oldA.name)// Change the name and area defines of all the machinery to the correct area. @@ -490,6 +491,12 @@ newA.setup(str) else newA.setup(newA.name) + + for(var/i in 1 to length(turfs)) //Fix lighting. Praise the lord. + var/turf/thing = turfs[i] + newA.contents += thing + thing.change_area(oldA, newA) + move_turfs_to_area(turfs, newA) newA.has_gravity = oldA.has_gravity set_area_machinery(newA, newA.name, oldA.name) From 10776a38536a6303f84c8175327e0d83f17ac74d Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sat, 1 Oct 2022 00:37:44 -0400 Subject: [PATCH 31/47] Removes comments made for elsewhere --- code/game/objects/items/blueprints_vr.dm | 6 ------ 1 file changed, 6 deletions(-) diff --git a/code/game/objects/items/blueprints_vr.dm b/code/game/objects/items/blueprints_vr.dm index 1b9f60f91c3..dcc5485681f 100644 --- a/code/game/objects/items/blueprints_vr.dm +++ b/code/game/objects/items/blueprints_vr.dm @@ -344,12 +344,6 @@ return found_turfs /proc/create_area(mob/creator) - // Passed into the above proc as list/break_if_found - // WHATEVER YOU DO, DO NOT LEAVE THE LAST THING IN THE LIST BELOW HAVE A COMMA OR EVERYTHING EVER WILL BREAK - // AND ENGINEERS ALL OVER THE WORLD WILL HARMBATON YOU - // ENSURE THE LAST AREA OR TURF LISTED IS SIMPLY "/area/clownhideout" AND NOT "/area/clownhideout," OR YOU WILL IMMEDIATELY DIE - // Ignore these areas and dont let people expand them. They can expand into them though - var/list/turfs = detect_room(get_turf(creator), area_or_turf_fail_types, BP_MAX_ROOM_SIZE*2) if(!turfs) to_chat(creator, span_warning("The new area must have a floor and not a part of a shuttle.")) From 29e354c55e32de9432c40036371a3cc90cf1cbc5 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sat, 1 Oct 2022 01:43:55 -0400 Subject: [PATCH 32/47] Fixes buildmode. - Allows for the creation of areas via build mode. - If an area is made via buildmode, the area will be fully lit. This is the only compromise I could do it as space areas worked fine when turned into new areas, but preexisting areas bugged out massively and were full dark (just like it currently is on live) --- code/game/objects/items/blueprints_vr.dm | 4 + code/modules/admin/verbs/buildmode.dm | 113 ++++++++++++++++++++++- 2 files changed, 113 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/blueprints_vr.dm b/code/game/objects/items/blueprints_vr.dm index dcc5485681f..b71dd323867 100644 --- a/code/game/objects/items/blueprints_vr.dm +++ b/code/game/objects/items/blueprints_vr.dm @@ -332,6 +332,10 @@ if(break_if_found[checkT.type] || break_if_found[checkT.loc.type]) return FALSE + //The below checks to make sure air can pass between the two turfs. If not, it can't be added to the area. + //This means walls can not be added to an area. The turf must first be added and then the wall. + //COMMENT THIS OUT IF YOU WANT THE BLUEPRINTS TO ADD WALLS TO AN AREA. + //BEGIN ESOTERIC BULLSHIT //log_debug("Origin: [origin.c_airblock(checkT)] SourceT: [sourceT.c_airblock(checkT)] 0=NB 1=AB 2=ZB, 3=B") if(origin.c_airblock(checkT)) //If everything breaks and it doesn't want to work, turn on the above debug and check this line. C.L. 0 = not blocked. diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm index 485cc88e226..28ec8b49997 100644 --- a/code/modules/admin/verbs/buildmode.dm +++ b/code/modules/admin/verbs/buildmode.dm @@ -128,7 +128,7 @@ to_chat(usr, "***********************************************************
        \ Left Mouse Button on turf = Select as point A
        \ Right Mouse Button on turf = Select as point B
        \ - Right Mouse Button on buildmode button = Change floor/wall type
        \ + Right Mouse Button on buildmode button = Change floor/wall type/area name
        \ ***********************************************************
        ") if(BUILDMODE_LADDER) @@ -226,6 +226,8 @@ var/floor_holder = /turf/simulated/floor/plating var/turf/coordA = null var/turf/coordB = null + var/area_enabled = 0 + var/area_name = "New Area" var/new_light_color = "#FFFFFF" var/new_light_range = 3 @@ -275,6 +277,18 @@ master.buildmode.valueholder = tgui_input_list(usr,"Enter variable value:", "Value", world) if(BUILDMODE_ROOM) + var/area_choice = tgui_alert(usr, "Would you like to generate a new area as well?","Room Builder", list("No", "Yes")) + switch(area_choice) + if("No") + area_enabled = 0 + if("Yes") + area_enabled = 1 + area_name = tgui_input_text(usr, "New area name", "Room Buildmode", max_length = MAX_NAME_LEN) + if(isnull(area_name)) + to_chat(usr, "You must enter a non-null name.") + area_enabled = 0 + return + area_name = sanitize(area_name,MAX_NAME_LEN) var/choice = tgui_alert(usr, "Would you like to change the floor or wall holders?","Room Builder", list("Floor", "Wall")) switch(choice) if("Floor") @@ -411,13 +425,19 @@ to_chat(user, "Defined [object] ([object.type]) as point B.") if(holder.buildmode.coordA && holder.buildmode.coordB) + if(isnull(holder.buildmode.area_name)) + to_chat(user, "ERROR: Insert area name before use.") + holder.buildmode.coordA = null + holder.buildmode.coordB = null + return to_chat(user, "A and B set, creating rectangle.") holder.buildmode.make_rectangle( holder.buildmode.coordA, holder.buildmode.coordB, holder.buildmode.wall_holder, - holder.buildmode.floor_holder - ) + holder.buildmode.floor_holder, + holder.buildmode.area_enabled, + holder.buildmode.area_name) holder.buildmode.coordA = null holder.buildmode.coordB = null @@ -651,7 +671,7 @@ result = default_path return result -/obj/effect/bmode/buildmode/proc/make_rectangle(var/turf/A, var/turf/B, var/turf/wall_type, var/turf/floor_type) +/obj/effect/bmode/buildmode/proc/make_rectangle(var/turf/A, var/turf/B, var/turf/wall_type, var/turf/floor_type, var/area_enabled, var/area_name) if(!A || !B) // No coords return if(A.z != B.z) // Not same z-level @@ -685,6 +705,10 @@ var/high_bound_x = lower_left_corner.x + abs(width) var/high_bound_y = lower_left_corner.y + abs(height) + var/origin_x = lower_left_corner.x + round((abs(width)/2)) + var/origin_y = lower_left_corner.y + round((abs(height)/2)) + var/turf/origin + for(var/i = low_bound_x, i <= high_bound_x, i++) for(var/j = low_bound_y, j <= high_bound_y, j++) var/turf/T = locate(i, j, z_level) @@ -693,11 +717,92 @@ T.ChangeTurf(wall_type) else new wall_type(T) + else + if(T.x == origin_x && T.y == origin_y) //Get the middle of the square. + origin = T if(isturf(floor_type)) T.ChangeTurf(floor_type) else new floor_type(T) + log_debug("area_enabled is set to [area_enabled]") + if(area_enabled) //Let's try not to make a new area unless you got walls and a floor. + create_buildmode_area(area_name, origin) //Generates a new area. + +/proc/create_buildmode_area(var/area_name, var/turf/origin) + var/turfs = detect_room_buildmode(origin) + + var/area/newA + var/area/oldA = get_area(origin) + var/str = area_name + str = sanitize(str,MAX_NAME_LEN) + if(!str || !length(str)) //cancel + return + newA = new /area/buildmode + newA.dynamic_lighting = FALSE // Without this it's pitch black if you build anywhere but space. + newA.luminosity = TRUE // Without this it's pitch black if you build anywhere but space. + newA.setup(str) + newA.has_gravity = oldA.has_gravity + + for(var/i in 1 to length(turfs)) //Fix lighting. Praise the lord. + var/turf/thing = turfs[i] + newA.contents += thing + thing.change_area(oldA, newA) + + set_area_machinery(newA, newA.name, oldA.name)// Change the name and area defines of all the machinery to the correct area. + oldA.power_check() //Simply makes the area turn the power off if you nicked an APC from it. + return TRUE + +/proc/detect_room_buildmode(var/turf/first, var/allowedAreas = AREA_SPACE) + if(!istype(first)) + return + var/list/turf/found = new + var/list/turf/pending = list(first) + while(pending.len) + var/turf/T = pending[1] + pending -= T + for (var/dir in cardinal) + var/turf/NT = get_step(T,dir) + if (!isturf(NT) || (NT in found) || (NT in pending)) + continue + // We ask ZAS to determine if its airtight. Thats what matters anyway right? + if(air_master.air_blocked(T, NT)) + // Okay thats the edge of the room + if(get_area_type_buildmode(NT.loc) == AREA_SPACE && air_master.air_blocked(NT, NT)) + found += NT // So we include walls/doors not already in any area + continue + if (istype(NT, /turf/space)) + return //omg hull breach we all going to die here + if (istype(NT, /turf/simulated/shuttle)) + return // Unsure why this, but was in old code. Trusting for now. + if (NT.loc != first.loc && !(get_area_type_buildmode(NT.loc) & allowedAreas)) + // Edge of a protected area. Lets stop here... + continue + if (!istype(NT, /turf/simulated)) + // Great, unsimulated... eh, just stop searching here + continue + // Okay, NT looks promising, lets continue the search there! + pending += NT + found += T + // end while + return found + +/proc/get_area_type_buildmode(area/A) + if(A.outdoors) + return AREA_SPACE + + for (var/type in BUILDABLE_AREA_TYPES) + if ( istype(A,type) ) + return AREA_SPACE + + for (var/type in SPECIALS) + if ( istype(A,type) ) + return AREA_SPECIAL + return AREA_STATION + +/area/buildmode + dynamic_lighting = FALSE + luminosity = FALSE #undef BUILDMODE_BASIC #undef BUILDMODE_ADVANCED From edb72f2fc7e4045ece987d8ecbcb6425baea156f Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sat, 1 Oct 2022 01:48:44 -0400 Subject: [PATCH 33/47] travis --- code/__defines/turfs.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/__defines/turfs.dm b/code/__defines/turfs.dm index 421bfc258f4..fe327cd6327 100644 --- a/code/__defines/turfs.dm +++ b/code/__defines/turfs.dm @@ -31,8 +31,6 @@ //supposedly the fastest way to do this according to https://gist.github.com/Giacom/be635398926bb463b42a ///Returns a list of turf in a square -#define RANGE_TURFS(RADIUS, CENTER) \ - RECT_TURFS(RADIUS, RADIUS, CENTER) #define RECT_TURFS(H_RADIUS, V_RADIUS, CENTER) \ block( \ From 8ad793293cd17329eb6d1d07fcba86bd8618454d Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sat, 1 Oct 2022 01:54:08 -0400 Subject: [PATCH 34/47] Reenables adding walls via blueprints. I forgot to reenable this. Left a comment noting down to uncomment it if people want to block walls from being added to areas. --- code/game/objects/items/blueprints_vr.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/blueprints_vr.dm b/code/game/objects/items/blueprints_vr.dm index b71dd323867..953adbdc1ee 100644 --- a/code/game/objects/items/blueprints_vr.dm +++ b/code/game/objects/items/blueprints_vr.dm @@ -334,12 +334,15 @@ //The below checks to make sure air can pass between the two turfs. If not, it can't be added to the area. //This means walls can not be added to an area. The turf must first be added and then the wall. - //COMMENT THIS OUT IF YOU WANT THE BLUEPRINTS TO ADD WALLS TO AN AREA. + //UNCOMMENT THIS IF YOU WANT THE BLUEPRINTS TO NOT ADD WALLS TO AN AREA. + //I personally think adding walls to an area is a big deal, so this is commented out. //BEGIN ESOTERIC BULLSHIT //log_debug("Origin: [origin.c_airblock(checkT)] SourceT: [sourceT.c_airblock(checkT)] 0=NB 1=AB 2=ZB, 3=B") + /* if(origin.c_airblock(checkT)) //If everything breaks and it doesn't want to work, turn on the above debug and check this line. C.L. 0 = not blocked. continue + */ //END ESOTERIC BULLSHIT found_turfs += checkT // Since checkT is connected, add it to the list to be processed From b103587ec6c110f2b14ada4b2df106fba86269d3 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sat, 1 Oct 2022 02:04:59 -0400 Subject: [PATCH 35/47] Replaces references to blueprints. Old blueprints are gone now. --- code/_helpers/global_lists_vr.dm | 2 +- code/game/gamemodes/newobjective.dm | 2 +- code/game/gamemodes/objective.dm | 2 +- .../structures/crates_lockers/closets/secure/engineering.dm | 2 +- code/modules/flufftext/Hallucination.dm | 2 +- code/modules/vore/eating/digest_act_vr.dm | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index f97919ddaf1..48b1949a86e 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -43,7 +43,7 @@ var/global/list/item_vore_blacklist = list( /obj/item/weapon/gun, /obj/item/weapon/pinpointer, /obj/item/clothing/shoes/magboots, - /obj/item/blueprints, + /obj/item/areaeditor/blueprints, /obj/item/clothing/head/helmet/space, /obj/item/weapon/disk/nuclear, /obj/item/clothing/suit/storage/hooded/wintercoat/roiz) diff --git a/code/game/gamemodes/newobjective.dm b/code/game/gamemodes/newobjective.dm index c52e51d5b53..1b3a1147a1e 100644 --- a/code/game/gamemodes/newobjective.dm +++ b/code/game/gamemodes/newobjective.dm @@ -749,7 +749,7 @@ datum blueprints - steal_target = /obj/item/blueprints + steal_target = /obj/item/areaeditor/blueprints explanation_text = "Steal the station's blueprints." weight = 20 diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 9b6b532f964..2818e3e7b4d 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -431,7 +431,7 @@ var/global/list/all_objectives = list() "a site manager's jumpsuit" = /obj/item/clothing/under/rank/captain, "a functional AI" = /obj/item/device/aicard, "a pair of magboots" = /obj/item/clothing/shoes/magboots, - "the station blueprints" = /obj/item/blueprints, + "the station blueprints" = /obj/item/areaeditor/blueprints, "a nasa voidsuit" = /obj/item/clothing/suit/space/void, "28 moles of phoron (full tank)" = /obj/item/weapon/tank, "a sample of slime extract" = /obj/item/slime_extract, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 1c60a1b5c52..53dfbe471e8 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -5,7 +5,7 @@ starts_with = list( /obj/item/clothing/accessory/storage/brown_vest, - /obj/item/blueprints, + /obj/item/areaeditor/blueprints, ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, /obj/item/clothing/under/rank/chief_engineer, diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 963b869439e..e4fc9ac89ca 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -347,7 +347,7 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite /obj/item/toy/syndicateballoon, /obj/item/weapon/gun/energy/captain,\ /obj/item/weapon/hand_tele, /obj/item/weapon/rcd, /obj/item/weapon/tank/jetpack,\ /obj/item/clothing/under/rank/captain, /obj/item/device/aicard,\ - /obj/item/clothing/shoes/magboots, /obj/item/blueprints, /obj/item/weapon/disk/nuclear,\ + /obj/item/clothing/shoes/magboots, /obj/item/areaeditor/blueprints, /obj/item/weapon/disk/nuclear,\ /obj/item/clothing/suit/space/void, /obj/item/weapon/tank) /proc/fake_attack(var/mob/living/target) diff --git a/code/modules/vore/eating/digest_act_vr.dm b/code/modules/vore/eating/digest_act_vr.dm index 9e8851bdfb0..1979fc925c2 100644 --- a/code/modules/vore/eating/digest_act_vr.dm +++ b/code/modules/vore/eating/digest_act_vr.dm @@ -82,7 +82,7 @@ return FALSE /obj/item/weapon/pinpointer/digest_act(var/atom/movable/item_storage = null) return FALSE -/obj/item/blueprints/digest_act(var/atom/movable/item_storage = null) +/obj/item/areaeditor/blueprints/digest_act(var/atom/movable/item_storage = null) return FALSE /obj/item/weapon/disk/nuclear/digest_act(var/atom/movable/item_storage = null) return FALSE From 8c1578af1af84891ac190c5c425bc7befcec8c22 Mon Sep 17 00:00:00 2001 From: Atermonera Date: Sat, 1 Oct 2022 10:16:31 -0800 Subject: [PATCH 36/47] moved sdmm defines to as early as possible in env --- .../spaceman_dmm.dm => __spaceman_dmm.dm} | 7 +- polaris.dme | 3309 +++++++++++++++++ 2 files changed, 3313 insertions(+), 3 deletions(-) rename code/{__defines/spaceman_dmm.dm => __spaceman_dmm.dm} (85%) create mode 100644 polaris.dme diff --git a/code/__defines/spaceman_dmm.dm b/code/__spaceman_dmm.dm similarity index 85% rename from code/__defines/spaceman_dmm.dm rename to code/__spaceman_dmm.dm index 94f17433774..51b09cd036e 100644 --- a/code/__defines/spaceman_dmm.dm +++ b/code/__spaceman_dmm.dm @@ -1,7 +1,8 @@ -// Interfaces for the SpacemanDMM linter, define'd to nothing when the linter -// is not in use. +/** +* SpacemanDMM dreamchecker extensions for suite 1.7 +* +*/ -// The SPACEMAN_DMM define is set by the linter and other tooling when it runs. #ifdef SPACEMAN_DMM #define RETURN_TYPE(X) set SpacemanDMM_return_type = X #define SHOULD_CALL_PARENT(X) set SpacemanDMM_should_call_parent = X diff --git a/polaris.dme b/polaris.dme new file mode 100644 index 00000000000..e001e8c1d26 --- /dev/null +++ b/polaris.dme @@ -0,0 +1,3309 @@ +// DM Environment file for baystation12.dme. +// All manual changes should be made outside the BEGIN_ and END_ blocks. + // New source code should be placed in .dm files: choose File/New --> Code File. +// BEGIN_INTERNALS +// END_INTERNALS +// BEGIN_FILE_DIR +#define FILE_DIR . +// END_FILE_DIR +// BEGIN_PREFERENCES +#define DEBUG +// END_PREFERENCES +// BEGIN_INCLUDE +#include "code\__spaceman_dmm.dm" +#include "code\_macros.dm" +#include "code\_map_tests.dm" +#include "code\_unit_tests.dm" +#include "code\global.dm" +#include "code\global_init.dm" +#include "code\hub.dm" +#include "code\names.dm" +#include "code\stylesheet.dm" +#include "code\world.dm" +#include "code\__datastructures\globals.dm" +#include "code\__defines\_compile_options.dm" +#include "code\__defines\_lists.dm" +#include "code\__defines\_planes+layers.dm" +#include "code\__defines\_protect.dm" +#include "code\__defines\_tick.dm" +#include "code\__defines\admin.dm" +#include "code\__defines\ai.dm" +#include "code\__defines\appearance.dm" +#include "code\__defines\atmos.dm" +#include "code\__defines\callbacks.dm" +#include "code\__defines\chemistry.dm" +#include "code\__defines\color.dm" +#include "code\__defines\construction.dm" +#include "code\__defines\crafting.dm" +#include "code\__defines\damage_organs.dm" +#include "code\__defines\dna.dm" +#include "code\__defines\events.dm" +#include "code\__defines\flags.dm" +#include "code\__defines\gamemode.dm" +#include "code\__defines\holomap.dm" +#include "code\__defines\hoses.dm" +#include "code\__defines\integrated_circuits.dm" +#include "code\__defines\inventory_sizes.dm" +#include "code\__defines\is_helpers.dm" +#include "code\__defines\items_clothing.dm" +#include "code\__defines\lighting.dm" +#include "code\__defines\machinery.dm" +#include "code\__defines\map.dm" +#include "code\__defines\materials.dm" +#include "code\__defines\math.dm" +#include "code\__defines\math_physics.dm" +#include "code\__defines\MC.dm" +#include "code\__defines\misc.dm" +#include "code\__defines\mobs.dm" +#include "code\__defines\objects.dm" +#include "code\__defines\overmap.dm" +#include "code\__defines\pda.dm" +#include "code\__defines\planets.dm" +#include "code\__defines\preferences.dm" +#include "code\__defines\process_scheduler.dm" +#include "code\__defines\qdel.dm" +#include "code\__defines\research.dm" +#include "code\__defines\rust_g.dm" +#include "code\__defines\shuttle.dm" +#include "code\__defines\sound.dm" +#include "code\__defines\species_languages.dm" +#include "code\__defines\sqlite_defines.dm" +#include "code\__defines\subsystems.dm" +#include "code\__defines\supply.dm" +#include "code\__defines\targeting.dm" +#include "code\__defines\tgui.dm" +#include "code\__defines\tools.dm" +#include "code\__defines\turfs.dm" +#include "code\__defines\typeids.dm" +#include "code\__defines\unit_tests.dm" +#include "code\__defines\vote.dm" +#include "code\__defines\vv.dm" +#include "code\__defines\webhooks.dm" +#include "code\__defines\wires.dm" +#include "code\__defines\xenoarcheaology.dm" +#include "code\__defines\ZAS.dm" +#include "code\__defines\dcs\flags.dm" +#include "code\__defines\dcs\helpers.dm" +#include "code\__defines\dcs\signals.dm" +#include "code\_global_vars\bitfields.dm" +#include "code\_global_vars\misc.dm" +#include "code\_global_vars\mobs.dm" +#include "code\_global_vars\sensitive.dm" +#include "code\_global_vars\lists\mapping.dm" +#include "code\_global_vars\lists\misc.dm" +#include "code\_global_vars\lists\species.dm" +#include "code\_helpers\_global_objects.dm" +#include "code\_helpers\_lists.dm" +#include "code\_helpers\atmospherics.dm" +#include "code\_helpers\atom_movables.dm" +#include "code\_helpers\client.dm" +#include "code\_helpers\events.dm" +#include "code\_helpers\files.dm" +#include "code\_helpers\game.dm" +#include "code\_helpers\global_lists.dm" +#include "code\_helpers\icons.dm" +#include "code\_helpers\image.dm" +#include "code\_helpers\logging.dm" +#include "code\_helpers\matrices.dm" +#include "code\_helpers\mobs.dm" +#include "code\_helpers\names.dm" +#include "code\_helpers\sanitize_values.dm" +#include "code\_helpers\storage.dm" +#include "code\_helpers\string_lists.dm" +#include "code\_helpers\text.dm" +#include "code\_helpers\time.dm" +#include "code\_helpers\turfs.dm" +#include "code\_helpers\type2type.dm" +#include "code\_helpers\unsorted.dm" +#include "code\_helpers\view.dm" +#include "code\_helpers\visual_filters.dm" +#include "code\_helpers\sorts\__main.dm" +#include "code\_helpers\sorts\comparators.dm" +#include "code\_helpers\sorts\TimSort.dm" +#include "code\_onclick\_defines.dm" +#include "code\_onclick\adjacent.dm" +#include "code\_onclick\ai.dm" +#include "code\_onclick\click.dm" +#include "code\_onclick\cyborg.dm" +#include "code\_onclick\drag_drop.dm" +#include "code\_onclick\item_attack.dm" +#include "code\_onclick\observer.dm" +#include "code\_onclick\other_mobs.dm" +#include "code\_onclick\rig.dm" +#include "code\_onclick\telekinesis.dm" +#include "code\_onclick\hud\_defines.dm" +#include "code\_onclick\hud\ability_screen_objects.dm" +#include "code\_onclick\hud\action.dm" +#include "code\_onclick\hud\ai.dm" +#include "code\_onclick\hud\alert.dm" +#include "code\_onclick\hud\alien_larva.dm" +#include "code\_onclick\hud\fullscreen.dm" +#include "code\_onclick\hud\ghost.dm" +#include "code\_onclick\hud\gun_mode.dm" +#include "code\_onclick\hud\hud.dm" +#include "code\_onclick\hud\human.dm" +#include "code\_onclick\hud\map_popups.dm" +#include "code\_onclick\hud\minihud.dm" +#include "code\_onclick\hud\minihud_mapper.dm" +#include "code\_onclick\hud\minihud_rigmech.dm" +#include "code\_onclick\hud\movable_screen_objects.dm" +#include "code\_onclick\hud\picture_in_picture.dm" +#include "code\_onclick\hud\radial.dm" +#include "code\_onclick\hud\radial_persistent.dm" +#include "code\_onclick\hud\robot.dm" +#include "code\_onclick\hud\screen_objects.dm" +#include "code\_onclick\hud\skybox.dm" +#include "code\_onclick\hud\spell_screen_objects.dm" +#include "code\ATMOSPHERICS\_atmos_setup.dm" +#include "code\ATMOSPHERICS\_atmospherics_helpers.dm" +#include "code\ATMOSPHERICS\atmospherics.dm" +#include "code\ATMOSPHERICS\datum_pipe_network.dm" +#include "code\ATMOSPHERICS\datum_pipeline.dm" +#include "code\ATMOSPHERICS\components\portables_connector.dm" +#include "code\ATMOSPHERICS\components\shutoff.dm" +#include "code\ATMOSPHERICS\components\tvalve.dm" +#include "code\ATMOSPHERICS\components\valve.dm" +#include "code\ATMOSPHERICS\components\binary_devices\binary_atmos_base.dm" +#include "code\ATMOSPHERICS\components\binary_devices\circulator.dm" +#include "code\ATMOSPHERICS\components\binary_devices\dp_vent_pump.dm" +#include "code\ATMOSPHERICS\components\binary_devices\passive_gate.dm" +#include "code\ATMOSPHERICS\components\binary_devices\pump.dm" +#include "code\ATMOSPHERICS\components\binary_devices\volume_pump.dm" +#include "code\ATMOSPHERICS\components\omni_devices\_omni_extras.dm" +#include "code\ATMOSPHERICS\components\omni_devices\filter.dm" +#include "code\ATMOSPHERICS\components\omni_devices\mixer.dm" +#include "code\ATMOSPHERICS\components\omni_devices\omni_base.dm" +#include "code\ATMOSPHERICS\components\trinary_devices\filter.dm" +#include "code\ATMOSPHERICS\components\trinary_devices\mixer.dm" +#include "code\ATMOSPHERICS\components\trinary_devices\trinary_base.dm" +#include "code\ATMOSPHERICS\components\unary\cold_sink.dm" +#include "code\ATMOSPHERICS\components\unary\heat_exchanger.dm" +#include "code\ATMOSPHERICS\components\unary\heat_source.dm" +#include "code\ATMOSPHERICS\components\unary\outlet_injector.dm" +#include "code\ATMOSPHERICS\components\unary\unary_base.dm" +#include "code\ATMOSPHERICS\components\unary\vent_pump.dm" +#include "code\ATMOSPHERICS\components\unary\vent_scrubber.dm" +#include "code\ATMOSPHERICS\pipes\cap.dm" +#include "code\ATMOSPHERICS\pipes\he_pipes.dm" +#include "code\ATMOSPHERICS\pipes\manifold.dm" +#include "code\ATMOSPHERICS\pipes\manifold4w.dm" +#include "code\ATMOSPHERICS\pipes\pipe_base.dm" +#include "code\ATMOSPHERICS\pipes\simple.dm" +#include "code\ATMOSPHERICS\pipes\tank.dm" +#include "code\ATMOSPHERICS\pipes\universal.dm" +#include "code\ATMOSPHERICS\pipes\vent.dm" +#include "code\controllers\autotransfer.dm" +#include "code\controllers\communications.dm" +#include "code\controllers\configuration.dm" +#include "code\controllers\controller.dm" +#include "code\controllers\emergency_shuttle_controller.dm" +#include "code\controllers\failsafe.dm" +#include "code\controllers\globals.dm" +#include "code\controllers\hooks-defs.dm" +#include "code\controllers\hooks.dm" +#include "code\controllers\master.dm" +#include "code\controllers\master_controller.dm" +#include "code\controllers\subsystem.dm" +#include "code\controllers\verbs.dm" +#include "code\controllers\observer_listener\atom\observer.dm" +#include "code\controllers\subsystems\ai.dm" +#include "code\controllers\subsystems\aifast.dm" +#include "code\controllers\subsystems\air.dm" +#include "code\controllers\subsystems\airflow.dm" +#include "code\controllers\subsystems\alarm.dm" +#include "code\controllers\subsystems\antag.dm" +#include "code\controllers\subsystems\assets.dm" +#include "code\controllers\subsystems\atoms.dm" +#include "code\controllers\subsystems\character_setup.dm" +#include "code\controllers\subsystems\chat.dm" +#include "code\controllers\subsystems\chemistry.dm" +#include "code\controllers\subsystems\circuits.dm" +#include "code\controllers\subsystems\dcs.dm" +#include "code\controllers\subsystems\events.dm" +#include "code\controllers\subsystems\events2.dm" +#include "code\controllers\subsystems\game_master.dm" +#include "code\controllers\subsystems\garbage.dm" +#include "code\controllers\subsystems\holomaps.dm" +#include "code\controllers\subsystems\inactivity.dm" +#include "code\controllers\subsystems\job.dm" +#include "code\controllers\subsystems\lighting.dm" +#include "code\controllers\subsystems\machines.dm" +#include "code\controllers\subsystems\mapping.dm" +#include "code\controllers\subsystems\misc_slow.dm" +#include "code\controllers\subsystems\mobs.dm" +#include "code\controllers\subsystems\nanoui.dm" +#include "code\controllers\subsystems\nightshift.dm" +#include "code\controllers\subsystems\open_space.dm" +#include "code\controllers\subsystems\orbits.dm" +#include "code\controllers\subsystems\overlays.dm" +#include "code\controllers\subsystems\persistence.dm" +#include "code\controllers\subsystems\planets.dm" +#include "code\controllers\subsystems\radiation.dm" +#include "code\controllers\subsystems\shuttles.dm" +#include "code\controllers\subsystems\skybox.dm" +#include "code\controllers\subsystems\sqlite.dm" +#include "code\controllers\subsystems\sun.dm" +#include "code\controllers\subsystems\supply.dm" +#include "code\controllers\subsystems\tgui.dm" +#include "code\controllers\subsystems\ticker.dm" +#include "code\controllers\subsystems\time_track.dm" +#include "code\controllers\subsystems\timer.dm" +#include "code\controllers\subsystems\vote.dm" +#include "code\controllers\subsystems\webhooks.dm" +#include "code\controllers\subsystems\xenoarch.dm" +#include "code\controllers\subsystems\processing\fastprocess.dm" +#include "code\controllers\subsystems\processing\obj.dm" +#include "code\controllers\subsystems\processing\processing.dm" +#include "code\controllers\subsystems\processing\projectiles.dm" +#include "code\controllers\subsystems\processing\turfs.dm" +#include "code\core\atom\Transform.dm" +#include "code\core\datum\IsAbstract.dm" +#include "code\core\image\Transform.dm" +#include "code\core\matrix\Transform.dm" +#include "code\datums\ai_law_sets.dm" +#include "code\datums\ai_laws.dm" +#include "code\datums\beam.dm" +#include "code\datums\browser.dm" +#include "code\datums\callback.dm" +#include "code\datums\category.dm" +#include "code\datums\chat_message.dm" +#include "code\datums\datacore.dm" +#include "code\datums\datum.dm" +#include "code\datums\datumvars.dm" +#include "code\datums\EPv2.dm" +#include "code\datums\ghost_query.dm" +#include "code\datums\hierarchy.dm" +#include "code\datums\mind.dm" +#include "code\datums\mixed.dm" +#include "code\datums\modules.dm" +#include "code\datums\mutable_appearance.dm" +#include "code\datums\orbit.dm" +#include "code\datums\organs.dm" +#include "code\datums\position_point_vector.dm" +#include "code\datums\progressbar.dm" +#include "code\datums\riding.dm" +#include "code\datums\soul_link.dm" +#include "code\datums\sun.dm" +#include "code\datums\weakref.dm" +#include "code\datums\audio\_audio.dm" +#include "code\datums\audio\_tracks.dm" +#include "code\datums\audio\jukebox.dm" +#include "code\datums\autolathe\arms.dm" +#include "code\datums\autolathe\autolathe.dm" +#include "code\datums\autolathe\devices.dm" +#include "code\datums\autolathe\engineering.dm" +#include "code\datums\autolathe\general.dm" +#include "code\datums\autolathe\materials.dm" +#include "code\datums\autolathe\medical.dm" +#include "code\datums\autolathe\tools.dm" +#include "code\datums\components\_component.dm" +#include "code\datums\components\crafting\crafting.dm" +#include "code\datums\components\crafting\crafting_external.dm" +#include "code\datums\components\crafting\recipes.dm" +#include "code\datums\components\crafting\tool_quality.dm" +#include "code\datums\components\crafting\recipes\archery.dm" +#include "code\datums\elements\_element.dm" +#include "code\datums\game_masters\_common.dm" +#include "code\datums\game_masters\default.dm" +#include "code\datums\game_masters\other_game_masters.dm" +#include "code\datums\helper_datums\construction_datum.dm" +#include "code\datums\helper_datums\events.dm" +#include "code\datums\helper_datums\getrev.dm" +#include "code\datums\helper_datums\teleport.dm" +#include "code\datums\helper_datums\topic_input.dm" +#include "code\datums\licenses\license.dm" +#include "code\datums\locations\locations.dm" +#include "code\datums\locations\nyx.dm" +#include "code\datums\locations\qerrvallis.dm" +#include "code\datums\locations\s_randarr.dm" +#include "code\datums\locations\sol.dm" +#include "code\datums\locations\tau_ceti.dm" +#include "code\datums\locations\uueoa_esa.dm" +#include "code\datums\locations\vir.dm" +#include "code\datums\looping_sounds\_looping_sound.dm" +#include "code\datums\looping_sounds\item_sounds.dm" +#include "code\datums\looping_sounds\machinery_sounds.dm" +#include "code\datums\looping_sounds\sequence.dm" +#include "code\datums\looping_sounds\weather_sounds.dm" +#include "code\datums\managed_browsers\_managed_browser.dm" +#include "code\datums\managed_browsers\changelingevolution.dm" +#include "code\datums\managed_browsers\feedback_form.dm" +#include "code\datums\managed_browsers\feedback_viewer.dm" +#include "code\datums\observation\_debug.dm" +#include "code\datums\observation\_defines.dm" +#include "code\datums\observation\destroyed.dm" +#include "code\datums\observation\dir_set.dm" +#include "code\datums\observation\equipped.dm" +#include "code\datums\observation\helpers.dm" +#include "code\datums\observation\logged_in.dm" +#include "code\datums\observation\moved.dm" +#include "code\datums\observation\observation.dm" +#include "code\datums\observation\power_change.dm" +#include "code\datums\observation\shuttle_added.dm" +#include "code\datums\observation\shuttle_moved.dm" +#include "code\datums\observation\stat_set.dm" +#include "code\datums\observation\turf_changed.dm" +#include "code\datums\observation\turf_enterexit.dm" +#include "code\datums\observation\unequipped.dm" +#include "code\datums\observation\z_moved.dm" +#include "code\datums\observation\~cleanup.dm" +#include "code\datums\outfits\_defines.dm" +#include "code\datums\outfits\horror_killers.dm" +#include "code\datums\outfits\misc.dm" +#include "code\datums\outfits\nanotrasen.dm" +#include "code\datums\outfits\outfit.dm" +#include "code\datums\outfits\pirates.dm" +#include "code\datums\outfits\spec_op.dm" +#include "code\datums\outfits\tournament.dm" +#include "code\datums\outfits\vox.dm" +#include "code\datums\outfits\wizardry.dm" +#include "code\datums\outfits\costumes\costume.dm" +#include "code\datums\outfits\costumes\halloween.dm" +#include "code\datums\outfits\jobs\cargo.dm" +#include "code\datums\outfits\jobs\civilian.dm" +#include "code\datums\outfits\jobs\command.dm" +#include "code\datums\outfits\jobs\engineering.dm" +#include "code\datums\outfits\jobs\job.dm" +#include "code\datums\outfits\jobs\medical.dm" +#include "code\datums\outfits\jobs\misc.dm" +#include "code\datums\outfits\jobs\science.dm" +#include "code\datums\outfits\jobs\security.dm" +#include "code\datums\outfits\military\fleet.dm" +#include "code\datums\outfits\military\marines.dm" +#include "code\datums\outfits\military\military.dm" +#include "code\datums\outfits\military\sifguard.dm" +#include "code\datums\repositories\ammomaterial.dm" +#include "code\datums\repositories\cameras.dm" +#include "code\datums\repositories\crew.dm" +#include "code\datums\repositories\decls.dm" +#include "code\datums\repositories\repository.dm" +#include "code\datums\repositories\unique.dm" +#include "code\datums\roundstats\_defines_local.dm" +#include "code\datums\roundstats\departmentgoal.dm" +#include "code\datums\roundstats\roundstats.dm" +#include "code\datums\supplypacks\atmospherics.dm" +#include "code\datums\supplypacks\contraband.dm" +#include "code\datums\supplypacks\costumes.dm" +#include "code\datums\supplypacks\engineering.dm" +#include "code\datums\supplypacks\hospitality.dm" +#include "code\datums\supplypacks\hydroponics.dm" +#include "code\datums\supplypacks\materials.dm" +#include "code\datums\supplypacks\medical.dm" +#include "code\datums\supplypacks\misc.dm" +#include "code\datums\supplypacks\munitions.dm" +#include "code\datums\supplypacks\recreation.dm" +#include "code\datums\supplypacks\robotics.dm" +#include "code\datums\supplypacks\science.dm" +#include "code\datums\supplypacks\security.dm" +#include "code\datums\supplypacks\supply.dm" +#include "code\datums\supplypacks\supplypacks.dm" +#include "code\datums\supplypacks\voidsuits.dm" +#include "code\datums\underwear\bottom.dm" +#include "code\datums\underwear\socks.dm" +#include "code\datums\underwear\top.dm" +#include "code\datums\underwear\undershirts.dm" +#include "code\datums\underwear\underwear.dm" +#include "code\datums\uplink\ammunition.dm" +#include "code\datums\uplink\announcements.dm" +#include "code\datums\uplink\armor.dm" +#include "code\datums\uplink\backup.dm" +#include "code\datums\uplink\badassery.dm" +#include "code\datums\uplink\grenades.dm" +#include "code\datums\uplink\hardsuit_modules.dm" +#include "code\datums\uplink\implants.dm" +#include "code\datums\uplink\medical.dm" +#include "code\datums\uplink\resources.dm" +#include "code\datums\uplink\stealth_items.dm" +#include "code\datums\uplink\stealthy_weapons.dm" +#include "code\datums\uplink\telecrystals.dm" +#include "code\datums\uplink\tools.dm" +#include "code\datums\uplink\uplink_categories.dm" +#include "code\datums\uplink\uplink_items.dm" +#include "code\datums\uplink\visible_weapons.dm" +#include "code\datums\vending\stored_item.dm" +#include "code\datums\vending\vending.dm" +#include "code\datums\wires\airlock.dm" +#include "code\datums\wires\alarm.dm" +#include "code\datums\wires\apc.dm" +#include "code\datums\wires\autolathe.dm" +#include "code\datums\wires\camera.dm" +#include "code\datums\wires\explosive.dm" +#include "code\datums\wires\grid_checker.dm" +#include "code\datums\wires\jukebox.dm" +#include "code\datums\wires\mines.dm" +#include "code\datums\wires\particle_accelerator.dm" +#include "code\datums\wires\radio.dm" +#include "code\datums\wires\robot.dm" +#include "code\datums\wires\seedstorage.dm" +#include "code\datums\wires\smartfridge.dm" +#include "code\datums\wires\smes.dm" +#include "code\datums\wires\suit_storage_unit.dm" +#include "code\datums\wires\tesla_coil.dm" +#include "code\datums\wires\vending.dm" +#include "code\datums\wires\wires.dm" +#include "code\defines\gases.dm" +#include "code\defines\obj.dm" +#include "code\defines\obj\weapon.dm" +#include "code\defines\procs\announce.dm" +#include "code\defines\procs\AStar.dm" +#include "code\defines\procs\dbcore.dm" +#include "code\defines\procs\radio.dm" +#include "code\defines\procs\statistics.dm" +#include "code\game\atoms.dm" +#include "code\game\atoms_movable.dm" +#include "code\game\base_turf.dm" +#include "code\game\periodic_news.dm" +#include "code\game\response_team.dm" +#include "code\game\shuttle_engines.dm" +#include "code\game\skincmd.dm" +#include "code\game\sound.dm" +#include "code\game\trader_visit.dm" +#include "code\game\world.dm" +#include "code\game\area\ai_monitored.dm" +#include "code\game\area\areas.dm" +#include "code\game\area\asteroid_areas.dm" +#include "code\game\area\Space Station 13 areas.dm" +#include "code\game\area\ss13_deprecated_areas.dm" +#include "code\game\dna\dna2.dm" +#include "code\game\dna\dna2_domutcheck.dm" +#include "code\game\dna\dna2_helpers.dm" +#include "code\game\dna\dna_modifier.dm" +#include "code\game\dna\genes\disabilities.dm" +#include "code\game\dna\genes\gene.dm" +#include "code\game\dna\genes\powers.dm" +#include "code\game\gamemodes\events.dm" +#include "code\game\gamemodes\game_mode.dm" +#include "code\game\gamemodes\game_mode_latespawn.dm" +#include "code\game\gamemodes\objective.dm" +#include "code\game\gamemodes\setupgame.dm" +#include "code\game\gamemodes\calamity\calamity.dm" +#include "code\game\gamemodes\changeling\absorbed_dna.dm" +#include "code\game\gamemodes\changeling\changeling.dm" +#include "code\game\gamemodes\changeling\changeling_evolutiontree.dm" +#include "code\game\gamemodes\changeling\changeling_powers.dm" +#include "code\game\gamemodes\changeling\generic_equip_procs.dm" +#include "code\game\gamemodes\changeling\modularchangling.dm" +#include "code\game\gamemodes\changeling\powers\absorb.dm" +#include "code\game\gamemodes\changeling\powers\armblade.dm" +#include "code\game\gamemodes\changeling\powers\armor.dm" +#include "code\game\gamemodes\changeling\powers\augmented_eyesight.dm" +#include "code\game\gamemodes\changeling\powers\bioelectrogenesis.dm" +#include "code\game\gamemodes\changeling\powers\blind_sting.dm" +#include "code\game\gamemodes\changeling\powers\boost_range.dm" +#include "code\game\gamemodes\changeling\powers\cryo_sting.dm" +#include "code\game\gamemodes\changeling\powers\darkvision.dm" +#include "code\game\gamemodes\changeling\powers\deaf_sting.dm" +#include "code\game\gamemodes\changeling\powers\delayed_toxin_sting.dm" +#include "code\game\gamemodes\changeling\powers\digital_camo.dm" +#include "code\game\gamemodes\changeling\powers\electric_lockpick.dm" +#include "code\game\gamemodes\changeling\powers\endoarmor.dm" +#include "code\game\gamemodes\changeling\powers\enfeebling_string.dm" +#include "code\game\gamemodes\changeling\powers\engorged_glands.dm" +#include "code\game\gamemodes\changeling\powers\enrage.dm" +#include "code\game\gamemodes\changeling\powers\epinephrine_overdose.dm" +#include "code\game\gamemodes\changeling\powers\escape_restraints.dm" +#include "code\game\gamemodes\changeling\powers\extract_dna_sting.dm" +#include "code\game\gamemodes\changeling\powers\fabricate_clothing.dm" +#include "code\game\gamemodes\changeling\powers\fake_death.dm" +#include "code\game\gamemodes\changeling\powers\fleshmend.dm" +#include "code\game\gamemodes\changeling\powers\hivemind.dm" +#include "code\game\gamemodes\changeling\powers\mimic_voice.dm" +#include "code\game\gamemodes\changeling\powers\panacea.dm" +#include "code\game\gamemodes\changeling\powers\rapid_regen.dm" +#include "code\game\gamemodes\changeling\powers\recursive_enhancement.dm" +#include "code\game\gamemodes\changeling\powers\respec.dm" +#include "code\game\gamemodes\changeling\powers\revive.dm" +#include "code\game\gamemodes\changeling\powers\self_respiration.dm" +#include "code\game\gamemodes\changeling\powers\shriek.dm" +#include "code\game\gamemodes\changeling\powers\silence_sting.dm" +#include "code\game\gamemodes\changeling\powers\transform.dm" +#include "code\game\gamemodes\changeling\powers\visible_camouflage.dm" +#include "code\game\gamemodes\cult\construct_spells.dm" +#include "code\game\gamemodes\cult\cult.dm" +#include "code\game\gamemodes\cult\cult_items.dm" +#include "code\game\gamemodes\cult\cult_structures.dm" +#include "code\game\gamemodes\cult\hell_universe.dm" +#include "code\game\gamemodes\cult\narsie.dm" +#include "code\game\gamemodes\cult\ritual.dm" +#include "code\game\gamemodes\cult\runes.dm" +#include "code\game\gamemodes\cult\soulstone.dm" +#include "code\game\gamemodes\cult\talisman.dm" +#include "code\game\gamemodes\cult\cultify\mob.dm" +#include "code\game\gamemodes\cult\cultify\obj.dm" +#include "code\game\gamemodes\cult\cultify\turf.dm" +#include "code\game\gamemodes\endgame\endgame.dm" +#include "code\game\gamemodes\endgame\supermatter_cascade\blob.dm" +#include "code\game\gamemodes\endgame\supermatter_cascade\portal.dm" +#include "code\game\gamemodes\endgame\supermatter_cascade\universe.dm" +#include "code\game\gamemodes\events\black_hole.dm" +#include "code\game\gamemodes\events\clang.dm" +#include "code\game\gamemodes\events\dust.dm" +#include "code\game\gamemodes\events\power_failure.dm" +#include "code\game\gamemodes\events\wormholes.dm" +#include "code\game\gamemodes\events\holidays\Christmas.dm" +#include "code\game\gamemodes\events\holidays\Holidays.dm" +#include "code\game\gamemodes\events\holidays\Other.dm" +#include "code\game\gamemodes\extended\extended.dm" +#include "code\game\gamemodes\heist\heist.dm" +#include "code\game\gamemodes\infiltrator\infiltrator.dm" +#include "code\game\gamemodes\malfunction\malf_hardware.dm" +#include "code\game\gamemodes\malfunction\malf_research.dm" +#include "code\game\gamemodes\malfunction\malf_research_ability.dm" +#include "code\game\gamemodes\malfunction\malfunction.dm" +#include "code\game\gamemodes\malfunction\newmalf_ability_trees\HARDWARE.dm" +#include "code\game\gamemodes\malfunction\newmalf_ability_trees\HELPERS.dm" +#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_interdiction.dm" +#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_manipulation.dm" +#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_networking.dm" +#include "code\game\gamemodes\meteor\meteor.dm" +#include "code\game\gamemodes\meteor\meteors.dm" +#include "code\game\gamemodes\mixed\conflux.dm" +#include "code\game\gamemodes\mixed\infestation.dm" +#include "code\game\gamemodes\mixed\intrigue.dm" +#include "code\game\gamemodes\mixed\lizard.dm" +#include "code\game\gamemodes\mixed\mercrenegade.dm" +#include "code\game\gamemodes\mixed\mercwiz.dm" +#include "code\game\gamemodes\mixed\paranoia.dm" +#include "code\game\gamemodes\mixed\traitorling.dm" +#include "code\game\gamemodes\mixed\traitorrenegade.dm" +#include "code\game\gamemodes\mixed\uprising.dm" +#include "code\game\gamemodes\mixed\visitors.dm" +#include "code\game\gamemodes\ninja\ninja.dm" +#include "code\game\gamemodes\nuclear\nuclear.dm" +#include "code\game\gamemodes\nuclear\pinpointer.dm" +#include "code\game\gamemodes\revolution\revolution.dm" +#include "code\game\gamemodes\technomancer\catalog.dm" +#include "code\game\gamemodes\technomancer\clothing.dm" +#include "code\game\gamemodes\technomancer\core_obj.dm" +#include "code\game\gamemodes\technomancer\equipment.dm" +#include "code\game\gamemodes\technomancer\instability.dm" +#include "code\game\gamemodes\technomancer\spell_objs.dm" +#include "code\game\gamemodes\technomancer\spell_objs_helpers.dm" +#include "code\game\gamemodes\technomancer\technomancer.dm" +#include "code\game\gamemodes\technomancer\assistance\assistance.dm" +#include "code\game\gamemodes\technomancer\devices\boots_of_speed.dm" +#include "code\game\gamemodes\technomancer\devices\disposable_teleporter.dm" +#include "code\game\gamemodes\technomancer\devices\gloves_of_regen.dm" +#include "code\game\gamemodes\technomancer\devices\hypos.dm" +#include "code\game\gamemodes\technomancer\devices\implants.dm" +#include "code\game\gamemodes\technomancer\devices\shield_armor.dm" +#include "code\game\gamemodes\technomancer\devices\tesla_armor.dm" +#include "code\game\gamemodes\technomancer\spells\abjuration.dm" +#include "code\game\gamemodes\technomancer\spells\apportation.dm" +#include "code\game\gamemodes\technomancer\spells\audible_deception.dm" +#include "code\game\gamemodes\technomancer\spells\blink.dm" +#include "code\game\gamemodes\technomancer\spells\chroma.dm" +#include "code\game\gamemodes\technomancer\spells\condensation.dm" +#include "code\game\gamemodes\technomancer\spells\control.dm" +#include "code\game\gamemodes\technomancer\spells\dispel.dm" +#include "code\game\gamemodes\technomancer\spells\energy_siphon.dm" +#include "code\game\gamemodes\technomancer\spells\flame_tongue.dm" +#include "code\game\gamemodes\technomancer\spells\gambit.dm" +#include "code\game\gamemodes\technomancer\spells\illusion.dm" +#include "code\game\gamemodes\technomancer\spells\instability_tap.dm" +#include "code\game\gamemodes\technomancer\spells\mark_recall.dm" +#include "code\game\gamemodes\technomancer\spells\mend_organs.dm" +#include "code\game\gamemodes\technomancer\spells\oxygenate.dm" +#include "code\game\gamemodes\technomancer\spells\passwall.dm" +#include "code\game\gamemodes\technomancer\spells\phase_shift.dm" +#include "code\game\gamemodes\technomancer\spells\radiance.dm" +#include "code\game\gamemodes\technomancer\spells\reflect.dm" +#include "code\game\gamemodes\technomancer\spells\resurrect.dm" +#include "code\game\gamemodes\technomancer\spells\shared_burden.dm" +#include "code\game\gamemodes\technomancer\spells\shield.dm" +#include "code\game\gamemodes\technomancer\spells\targeting_matrix.dm" +#include "code\game\gamemodes\technomancer\spells\track.dm" +#include "code\game\gamemodes\technomancer\spells\warp_strike.dm" +#include "code\game\gamemodes\technomancer\spells\aura\aura.dm" +#include "code\game\gamemodes\technomancer\spells\aura\biomed_aura.dm" +#include "code\game\gamemodes\technomancer\spells\aura\fire_aura.dm" +#include "code\game\gamemodes\technomancer\spells\aura\frost_aura.dm" +#include "code\game\gamemodes\technomancer\spells\aura\shock_aura.dm" +#include "code\game\gamemodes\technomancer\spells\aura\unstable_aura.dm" +#include "code\game\gamemodes\technomancer\spells\modifier\corona.dm" +#include "code\game\gamemodes\technomancer\spells\modifier\haste.dm" +#include "code\game\gamemodes\technomancer\spells\modifier\mend_all.dm" +#include "code\game\gamemodes\technomancer\spells\modifier\mend_life.dm" +#include "code\game\gamemodes\technomancer\spells\modifier\mend_synthetic.dm" +#include "code\game\gamemodes\technomancer\spells\modifier\modifier.dm" +#include "code\game\gamemodes\technomancer\spells\modifier\purify.dm" +#include "code\game\gamemodes\technomancer\spells\modifier\repel_missiles.dm" +#include "code\game\gamemodes\technomancer\spells\projectile\beam.dm" +#include "code\game\gamemodes\technomancer\spells\projectile\chain_lightning.dm" +#include "code\game\gamemodes\technomancer\spells\projectile\force_missile.dm" +#include "code\game\gamemodes\technomancer\spells\projectile\ionic_bolt.dm" +#include "code\game\gamemodes\technomancer\spells\projectile\lesser_chain_lightning.dm" +#include "code\game\gamemodes\technomancer\spells\projectile\lightning.dm" +#include "code\game\gamemodes\technomancer\spells\projectile\overload.dm" +#include "code\game\gamemodes\technomancer\spells\projectile\projectile.dm" +#include "code\game\gamemodes\technomancer\spells\spawner\darkness.dm" +#include "code\game\gamemodes\technomancer\spells\spawner\destablize.dm" +#include "code\game\gamemodes\technomancer\spells\spawner\fire_blast.dm" +#include "code\game\gamemodes\technomancer\spells\spawner\pulsar.dm" +#include "code\game\gamemodes\technomancer\spells\spawner\spawner.dm" +#include "code\game\gamemodes\technomancer\spells\summon\summon.dm" +#include "code\game\gamemodes\technomancer\spells\summon\summon_creature.dm" +#include "code\game\gamemodes\technomancer\spells\summon\summon_ward.dm" +#include "code\game\gamemodes\traitor\traitor.dm" +#include "code\game\gamemodes\wizard\wizard.dm" +#include "code\game\jobs\_access_defs.dm" +#include "code\game\jobs\access.dm" +#include "code\game\jobs\access_datum.dm" +#include "code\game\jobs\job_controller.dm" +#include "code\game\jobs\jobs.dm" +#include "code\game\jobs\whitelist.dm" +#include "code\game\jobs\job\_alt_title.dm" +#include "code\game\jobs\job\assistant.dm" +#include "code\game\jobs\job\captain.dm" +#include "code\game\jobs\job\civilian.dm" +#include "code\game\jobs\job\civilian_chaplain.dm" +#include "code\game\jobs\job\department.dm" +#include "code\game\jobs\job\engineering.dm" +#include "code\game\jobs\job\job.dm" +#include "code\game\jobs\job\medical.dm" +#include "code\game\jobs\job\science.dm" +#include "code\game\jobs\job\security.dm" +#include "code\game\jobs\job\silicon.dm" +#include "code\game\machinery\adv_med.dm" +#include "code\game\machinery\ai_slipper.dm" +#include "code\game\machinery\air_alarm.dm" +#include "code\game\machinery\atm_ret_field.dm" +#include "code\game\machinery\atmo_control.dm" +#include "code\game\machinery\autolathe.dm" +#include "code\game\machinery\Beacon.dm" +#include "code\game\machinery\biogenerator.dm" +#include "code\game\machinery\bioprinter.dm" +#include "code\game\machinery\buttons.dm" +#include "code\game\machinery\CableLayer.dm" +#include "code\game\machinery\cell_charger.dm" +#include "code\game\machinery\cloning.dm" +#include "code\game\machinery\cryo.dm" +#include "code\game\machinery\cryopod.dm" +#include "code\game\machinery\deployable.dm" +#include "code\game\machinery\door_control.dm" +#include "code\game\machinery\doppler_array.dm" +#include "code\game\machinery\exonet_node.dm" +#include "code\game\machinery\fire_alarm.dm" +#include "code\game\machinery\flasher.dm" +#include "code\game\machinery\floodlight.dm" +#include "code\game\machinery\floor_light.dm" +#include "code\game\machinery\floorlayer.dm" +#include "code\game\machinery\frame.dm" +#include "code\game\machinery\hologram.dm" +#include "code\game\machinery\holosign.dm" +#include "code\game\machinery\igniter.dm" +#include "code\game\machinery\iv_drip.dm" +#include "code\game\machinery\jukebox.dm" +#include "code\game\machinery\lightswitch.dm" +#include "code\game\machinery\machinery.dm" +#include "code\game\machinery\machinery_power.dm" +#include "code\game\machinery\magnet.dm" +#include "code\game\machinery\mass_driver.dm" +#include "code\game\machinery\navbeacon.dm" +#include "code\game\machinery\neonsign.dm" +#include "code\game\machinery\newscaster.dm" +#include "code\game\machinery\nuclear_bomb.dm" +#include "code\game\machinery\OpTable.dm" +#include "code\game\machinery\overview.dm" +#include "code\game\machinery\oxygen_pump.dm" +#include "code\game\machinery\pda_multicaster.dm" +#include "code\game\machinery\pointdefense.dm" +#include "code\game\machinery\portable_turret.dm" +#include "code\game\machinery\recharger.dm" +#include "code\game\machinery\rechargestation.dm" +#include "code\game\machinery\requests_console.dm" +#include "code\game\machinery\robot_fabricator.dm" +#include "code\game\machinery\seed_extractor.dm" +#include "code\game\machinery\Sleeper.dm" +#include "code\game\machinery\spaceheater.dm" +#include "code\game\machinery\status_display.dm" +#include "code\game\machinery\status_display_ai.dm" +#include "code\game\machinery\suit_storage_unit.dm" +#include "code\game\machinery\supply_display.dm" +#include "code\game\machinery\supplybeacon.dm" +#include "code\game\machinery\syndicatebeacon.dm" +#include "code\game\machinery\teleporter.dm" +#include "code\game\machinery\transportpod.dm" +#include "code\game\machinery\turret_control.dm" +#include "code\game\machinery\wall_frames.dm" +#include "code\game\machinery\washing_machine.dm" +#include "code\game\machinery\wishgranter.dm" +#include "code\game\machinery\atmoalter\area_atmos_computer.dm" +#include "code\game\machinery\atmoalter\canister.dm" +#include "code\game\machinery\atmoalter\clamp.dm" +#include "code\game\machinery\atmoalter\meter.dm" +#include "code\game\machinery\atmoalter\portable_atmospherics.dm" +#include "code\game\machinery\atmoalter\pump.dm" +#include "code\game\machinery\atmoalter\scrubber.dm" +#include "code\game\machinery\camera\camera.dm" +#include "code\game\machinery\camera\camera_assembly.dm" +#include "code\game\machinery\camera\motion.dm" +#include "code\game\machinery\camera\presets.dm" +#include "code\game\machinery\camera\tracking.dm" +#include "code\game\machinery\computer\ai_core.dm" +#include "code\game\machinery\computer\aifixer.dm" +#include "code\game\machinery\computer\arcade.dm" +#include "code\game\machinery\computer\atmos_alert.dm" +#include "code\game\machinery\computer\atmos_control.dm" +#include "code\game\machinery\computer\camera.dm" +#include "code\game\machinery\computer\card.dm" +#include "code\game\machinery\computer\cloning.dm" +#include "code\game\machinery\computer\communications.dm" +#include "code\game\machinery\computer\computer.dm" +#include "code\game\machinery\computer\crew.dm" +#include "code\game\machinery\computer\guestpass.dm" +#include "code\game\machinery\computer\law.dm" +#include "code\game\machinery\computer\medical.dm" +#include "code\game\machinery\computer\message.dm" +#include "code\game\machinery\computer\Operating.dm" +#include "code\game\machinery\computer\pod.dm" +#include "code\game\machinery\computer\prisoner.dm" +#include "code\game\machinery\computer\prisonshuttle.dm" +#include "code\game\machinery\computer\RCON_Console.dm" +#include "code\game\machinery\computer\robot.dm" +#include "code\game\machinery\computer\security.dm" +#include "code\game\machinery\computer\shutoff_monitor.dm" +#include "code\game\machinery\computer\shuttle.dm" +#include "code\game\machinery\computer\skills.dm" +#include "code\game\machinery\computer\specops_shuttle.dm" +#include "code\game\machinery\computer\station_alert.dm" +#include "code\game\machinery\computer\supply.dm" +#include "code\game\machinery\computer\syndicate_specops_shuttle.dm" +#include "code\game\machinery\doors\airlock.dm" +#include "code\game\machinery\doors\airlock_control.dm" +#include "code\game\machinery\doors\airlock_electronics.dm" +#include "code\game\machinery\doors\alarmlock.dm" +#include "code\game\machinery\doors\blast_door.dm" +#include "code\game\machinery\doors\brigdoors.dm" +#include "code\game\machinery\doors\checkForMultipleDoors.dm" +#include "code\game\machinery\doors\door.dm" +#include "code\game\machinery\doors\firedoor.dm" +#include "code\game\machinery\doors\firedoor_assembly.dm" +#include "code\game\machinery\doors\multi_tile.dm" +#include "code\game\machinery\doors\unpowered.dm" +#include "code\game\machinery\doors\windowdoor.dm" +#include "code\game\machinery\embedded_controller\airlock_controllers.dm" +#include "code\game\machinery\embedded_controller\airlock_docking_controller.dm" +#include "code\game\machinery\embedded_controller\airlock_docking_controller_multi.dm" +#include "code\game\machinery\embedded_controller\airlock_program.dm" +#include "code\game\machinery\embedded_controller\docking_program.dm" +#include "code\game\machinery\embedded_controller\docking_program_multi.dm" +#include "code\game\machinery\embedded_controller\embedded_controller_base.dm" +#include "code\game\machinery\embedded_controller\embedded_program_base.dm" +#include "code\game\machinery\embedded_controller\mapping_helpers.dm" +#include "code\game\machinery\embedded_controller\simple_docking_controller.dm" +#include "code\game\machinery\pipe\construction.dm" +#include "code\game\machinery\pipe\pipe_dispenser.dm" +#include "code\game\machinery\pipe\pipe_recipes.dm" +#include "code\game\machinery\pipe\pipelayer.dm" +#include "code\game\machinery\telecomms\broadcaster.dm" +#include "code\game\machinery\telecomms\logbrowser.dm" +#include "code\game\machinery\telecomms\machine_interactions.dm" +#include "code\game\machinery\telecomms\presets.dm" +#include "code\game\machinery\telecomms\telecommunications.dm" +#include "code\game\machinery\telecomms\telemonitor.dm" +#include "code\game\machinery\telecomms\traffic_control.dm" +#include "code\game\machinery\virtual_reality\ar_console.dm" +#include "code\game\machinery\virtual_reality\vr_console.dm" +#include "code\game\magic\Uristrunes.dm" +#include "code\game\mecha\mech_bay.dm" +#include "code\game\mecha\mech_fabricator.dm" +#include "code\game\mecha\mech_prosthetics.dm" +#include "code\game\mecha\mech_sensor.dm" +#include "code\game\mecha\mecha.dm" +#include "code\game\mecha\mecha_actions.dm" +#include "code\game\mecha\mecha_appearance.dm" +#include "code\game\mecha\mecha_construction_paths.dm" +#include "code\game\mecha\mecha_control_console.dm" +#include "code\game\mecha\mecha_helpers.dm" +#include "code\game\mecha\mecha_parts.dm" +#include "code\game\mecha\mecha_wreckage.dm" +#include "code\game\mecha\combat\combat.dm" +#include "code\game\mecha\combat\durand.dm" +#include "code\game\mecha\combat\fighter.dm" +#include "code\game\mecha\combat\gorilla.dm" +#include "code\game\mecha\combat\gygax.dm" +#include "code\game\mecha\combat\marauder.dm" +#include "code\game\mecha\combat\phazon.dm" +#include "code\game\mecha\components\_component.dm" +#include "code\game\mecha\components\actuators.dm" +#include "code\game\mecha\components\armor.dm" +#include "code\game\mecha\components\electrical.dm" +#include "code\game\mecha\components\hull.dm" +#include "code\game\mecha\components\lifesupport.dm" +#include "code\game\mecha\equipment\mecha_equipment.dm" +#include "code\game\mecha\equipment\mecha_equipment_dynamicprocs.dm" +#include "code\game\mecha\equipment\tools\armor_melee.dm" +#include "code\game\mecha\equipment\tools\armor_ranged.dm" +#include "code\game\mecha\equipment\tools\cable_layer.dm" +#include "code\game\mecha\equipment\tools\catapult.dm" +#include "code\game\mecha\equipment\tools\clamp.dm" +#include "code\game\mecha\equipment\tools\cloak.dm" +#include "code\game\mecha\equipment\tools\drill.dm" +#include "code\game\mecha\equipment\tools\energy_relay.dm" +#include "code\game\mecha\equipment\tools\extinguisher.dm" +#include "code\game\mecha\equipment\tools\generator.dm" +#include "code\game\mecha\equipment\tools\hardpoint_actuator.dm" +#include "code\game\mecha\equipment\tools\inflatables.dm" +#include "code\game\mecha\equipment\tools\jetpack.dm" +#include "code\game\mecha\equipment\tools\orescanner.dm" +#include "code\game\mecha\equipment\tools\passenger.dm" +#include "code\game\mecha\equipment\tools\powertool.dm" +#include "code\game\mecha\equipment\tools\rcd.dm" +#include "code\game\mecha\equipment\tools\repair_droid.dm" +#include "code\game\mecha\equipment\tools\running_board.dm" +#include "code\game\mecha\equipment\tools\shield.dm" +#include "code\game\mecha\equipment\tools\shield_omni.dm" +#include "code\game\mecha\equipment\tools\sleeper.dm" +#include "code\game\mecha\equipment\tools\speedboost.dm" +#include "code\game\mecha\equipment\tools\syringe_gun.dm" +#include "code\game\mecha\equipment\tools\teleporter.dm" +#include "code\game\mecha\equipment\tools\tools.dm" +#include "code\game\mecha\equipment\tools\weldinglaser.dm" +#include "code\game\mecha\equipment\tools\wormhole.dm" +#include "code\game\mecha\equipment\weapons\honk.dm" +#include "code\game\mecha\equipment\weapons\weapons.dm" +#include "code\game\mecha\equipment\weapons\ballistic\automatic.dm" +#include "code\game\mecha\equipment\weapons\ballistic\ballistic.dm" +#include "code\game\mecha\equipment\weapons\ballistic\mortar.dm" +#include "code\game\mecha\equipment\weapons\ballistic\shotgun.dm" +#include "code\game\mecha\equipment\weapons\defense\shocker.dm" +#include "code\game\mecha\equipment\weapons\energy\energy.dm" +#include "code\game\mecha\equipment\weapons\energy\ion.dm" +#include "code\game\mecha\equipment\weapons\energy\laser.dm" +#include "code\game\mecha\equipment\weapons\energy\phased.dm" +#include "code\game\mecha\equipment\weapons\energy\pulse.dm" +#include "code\game\mecha\equipment\weapons\energy\stun.dm" +#include "code\game\mecha\equipment\weapons\explosive\grenade.dm" +#include "code\game\mecha\equipment\weapons\explosive\missile.dm" +#include "code\game\mecha\equipment\weapons\fire\flamethrower.dm" +#include "code\game\mecha\equipment\weapons\fire\incendiary.dm" +#include "code\game\mecha\medical\medical.dm" +#include "code\game\mecha\medical\odysseus.dm" +#include "code\game\mecha\space\hoverpod.dm" +#include "code\game\mecha\space\shuttle.dm" +#include "code\game\mecha\working\ripley.dm" +#include "code\game\mecha\working\working.dm" +#include "code\game\objects\banners.dm" +#include "code\game\objects\buckling.dm" +#include "code\game\objects\empulse.dm" +#include "code\game\objects\explosion.dm" +#include "code\game\objects\explosion_recursive.dm" +#include "code\game\objects\items.dm" +#include "code\game\objects\objs.dm" +#include "code\game\objects\structures.dm" +#include "code\game\objects\weapons.dm" +#include "code\game\objects\effects\bump_teleporter.dm" +#include "code\game\objects\effects\glowshroom.dm" +#include "code\game\objects\effects\item_pickup_ghost.dm" +#include "code\game\objects\effects\landmarks.dm" +#include "code\game\objects\effects\mines.dm" +#include "code\game\objects\effects\misc.dm" +#include "code\game\objects\effects\overlays.dm" +#include "code\game\objects\effects\portals.dm" +#include "code\game\objects\effects\spiders.dm" +#include "code\game\objects\effects\step_triggers.dm" +#include "code\game\objects\effects\zone_divider.dm" +#include "code\game\objects\effects\alien\aliens.dm" +#include "code\game\objects\effects\chem\chemsmoke.dm" +#include "code\game\objects\effects\chem\coating.dm" +#include "code\game\objects\effects\chem\foam.dm" +#include "code\game\objects\effects\chem\water.dm" +#include "code\game\objects\effects\decals\cleanable.dm" +#include "code\game\objects\effects\decals\crayon.dm" +#include "code\game\objects\effects\decals\misc.dm" +#include "code\game\objects\effects\decals\remains.dm" +#include "code\game\objects\effects\decals\warning_stripes.dm" +#include "code\game\objects\effects\decals\Cleanable\aliens.dm" +#include "code\game\objects\effects\decals\Cleanable\fuel.dm" +#include "code\game\objects\effects\decals\Cleanable\humans.dm" +#include "code\game\objects\effects\decals\Cleanable\misc.dm" +#include "code\game\objects\effects\decals\Cleanable\robots.dm" +#include "code\game\objects\effects\decals\Cleanable\tracks.dm" +#include "code\game\objects\effects\decals\posters\bs12.dm" +#include "code\game\objects\effects\decals\posters\polarisposters.dm" +#include "code\game\objects\effects\decals\posters\posters.dm" +#include "code\game\objects\effects\map_effects\beam_point.dm" +#include "code\game\objects\effects\map_effects\effect_emitter.dm" +#include "code\game\objects\effects\map_effects\map_effects.dm" +#include "code\game\objects\effects\map_effects\perma_light.dm" +#include "code\game\objects\effects\map_effects\portal.dm" +#include "code\game\objects\effects\map_effects\radiation_emitter.dm" +#include "code\game\objects\effects\map_effects\screen_shaker.dm" +#include "code\game\objects\effects\map_effects\sound_emitter.dm" +#include "code\game\objects\effects\prop\columnblast.dm" +#include "code\game\objects\effects\prop\snake.dm" +#include "code\game\objects\effects\spawners\bombspawner.dm" +#include "code\game\objects\effects\spawners\gibs.dm" +#include "code\game\objects\effects\spawners\graffiti.dm" +#include "code\game\objects\effects\temporary_visuals\miscellaneous.dm" +#include "code\game\objects\effects\temporary_visuals\temporary_visual.dm" +#include "code\game\objects\effects\temporary_visuals\projectiles\impact.dm" +#include "code\game\objects\effects\temporary_visuals\projectiles\muzzle.dm" +#include "code\game\objects\effects\temporary_visuals\projectiles\projectile_effects.dm" +#include "code\game\objects\effects\temporary_visuals\projectiles\tracer.dm" +#include "code\game\objects\items\antag_spawners.dm" +#include "code\game\objects\items\apc_frame.dm" +#include "code\game\objects\items\bells.dm" +#include "code\game\objects\items\blueprints.dm" +#include "code\game\objects\items\bodybag.dm" +#include "code\game\objects\items\contraband.dm" +#include "code\game\objects\items\crayons.dm" +#include "code\game\objects\items\glassjar.dm" +#include "code\game\objects\items\gunbox.dm" +#include "code\game\objects\items\latexballoon.dm" +#include "code\game\objects\items\magazine.dm" +#include "code\game\objects\items\paintkit.dm" +#include "code\game\objects\items\poi_items.dm" +#include "code\game\objects\items\robobag.dm" +#include "code\game\objects\items\shooting_range.dm" +#include "code\game\objects\items\tailoring.dm" +#include "code\game\objects\items\trash.dm" +#include "code\game\objects\items\trash_material.dm" +#include "code\game\objects\items\uav.dm" +#include "code\game\objects\items\devices\ai_detector.dm" +#include "code\game\objects\items\devices\aicard.dm" +#include "code\game\objects\items\devices\binoculars.dm" +#include "code\game\objects\items\devices\chameleonproj.dm" +#include "code\game\objects\items\devices\debugger.dm" +#include "code\game\objects\items\devices\defib.dm" +#include "code\game\objects\items\devices\flash.dm" +#include "code\game\objects\items\devices\flashlight.dm" +#include "code\game\objects\items\devices\floor_painter.dm" +#include "code\game\objects\items\devices\geiger.dm" +#include "code\game\objects\items\devices\gps.dm" +#include "code\game\objects\items\devices\hacktool.dm" +#include "code\game\objects\items\devices\holowarrant.dm" +#include "code\game\objects\items\devices\laserpointer.dm" +#include "code\game\objects\items\devices\lightreplacer.dm" +#include "code\game\objects\items\devices\megaphone.dm" +#include "code\game\objects\items\devices\modkit.dm" +#include "code\game\objects\items\devices\multitool.dm" +#include "code\game\objects\items\devices\paicard.dm" +#include "code\game\objects\items\devices\pipe_painter.dm" +#include "code\game\objects\items\devices\powersink.dm" +#include "code\game\objects\items\devices\scanners.dm" +#include "code\game\objects\items\devices\spy_bug.dm" +#include "code\game\objects\items\devices\suit_cooling.dm" +#include "code\game\objects\items\devices\t_scanner.dm" +#include "code\game\objects\items\devices\taperecorder.dm" +#include "code\game\objects\items\devices\text_to_speech.dm" +#include "code\game\objects\items\devices\traitordevices.dm" +#include "code\game\objects\items\devices\transfer_valve.dm" +#include "code\game\objects\items\devices\translator.dm" +#include "code\game\objects\items\devices\tvcamera.dm" +#include "code\game\objects\items\devices\uplink.dm" +#include "code\game\objects\items\devices\uplink_random_lists.dm" +#include "code\game\objects\items\devices\violin.dm" +#include "code\game\objects\items\devices\whistle.dm" +#include "code\game\objects\items\devices\communicator\communicator.dm" +#include "code\game\objects\items\devices\communicator\helper.dm" +#include "code\game\objects\items\devices\communicator\integrated.dm" +#include "code\game\objects\items\devices\communicator\messaging.dm" +#include "code\game\objects\items\devices\communicator\phone.dm" +#include "code\game\objects\items\devices\communicator\UI.dm" +#include "code\game\objects\items\devices\radio\beacon.dm" +#include "code\game\objects\items\devices\radio\electropack.dm" +#include "code\game\objects\items\devices\radio\encryptionkey.dm" +#include "code\game\objects\items\devices\radio\headset.dm" +#include "code\game\objects\items\devices\radio\intercom.dm" +#include "code\game\objects\items\devices\radio\jammer.dm" +#include "code\game\objects\items\devices\radio\radio.dm" +#include "code\game\objects\items\devices\radio\radiopack.dm" +#include "code\game\objects\items\robot\robot_items.dm" +#include "code\game\objects\items\robot\robot_parts.dm" +#include "code\game\objects\items\robot\robot_upgrades.dm" +#include "code\game\objects\items\stacks\marker_beacons.dm" +#include "code\game\objects\items\stacks\matter_synth.dm" +#include "code\game\objects\items\stacks\medical.dm" +#include "code\game\objects\items\stacks\nanopaste.dm" +#include "code\game\objects\items\stacks\sandbags.dm" +#include "code\game\objects\items\stacks\stack.dm" +#include "code\game\objects\items\stacks\telecrystal.dm" +#include "code\game\objects\items\stacks\tickets.dm" +#include "code\game\objects\items\stacks\tiles\fifty_spawner_tiles.dm" +#include "code\game\objects\items\stacks\tiles\tile_types.dm" +#include "code\game\objects\items\toys\godfigures.dm" +#include "code\game\objects\items\toys\mech_toys.dm" +#include "code\game\objects\items\toys\toys.dm" +#include "code\game\objects\items\weapons\AI_modules.dm" +#include "code\game\objects\items\weapons\augment_items.dm" +#include "code\game\objects\items\weapons\autopsy.dm" +#include "code\game\objects\items\weapons\bones.dm" +#include "code\game\objects\items\weapons\candle.dm" +#include "code\game\objects\items\weapons\canes.dm" +#include "code\game\objects\items\weapons\chewables.dm" +#include "code\game\objects\items\weapons\cigs_lighters.dm" +#include "code\game\objects\items\weapons\clown_items.dm" +#include "code\game\objects\items\weapons\cosmetics.dm" +#include "code\game\objects\items\weapons\dna_injector.dm" +#include "code\game\objects\items\weapons\ecigs.dm" +#include "code\game\objects\items\weapons\explosives.dm" +#include "code\game\objects\items\weapons\extinguisher.dm" +#include "code\game\objects\items\weapons\flamethrower.dm" +#include "code\game\objects\items\weapons\gift_wrappaper.dm" +#include "code\game\objects\items\weapons\handcuffs.dm" +#include "code\game\objects\items\weapons\improvised_components.dm" +#include "code\game\objects\items\weapons\manuals.dm" +#include "code\game\objects\items\weapons\mop.dm" +#include "code\game\objects\items\weapons\mop_deploy.dm" +#include "code\game\objects\items\weapons\paint.dm" +#include "code\game\objects\items\weapons\paiwire.dm" +#include "code\game\objects\items\weapons\policetape.dm" +#include "code\game\objects\items\weapons\RCD.dm" +#include "code\game\objects\items\weapons\RPD.dm" +#include "code\game\objects\items\weapons\RSF.dm" +#include "code\game\objects\items\weapons\scrolls.dm" +#include "code\game\objects\items\weapons\shields.dm" +#include "code\game\objects\items\weapons\stunbaton.dm" +#include "code\game\objects\items\weapons\surgery_tools.dm" +#include "code\game\objects\items\weapons\swords_axes_etc.dm" +#include "code\game\objects\items\weapons\syndie.dm" +#include "code\game\objects\items\weapons\tape.dm" +#include "code\game\objects\items\weapons\teleportation.dm" +#include "code\game\objects\items\weapons\towels.dm" +#include "code\game\objects\items\weapons\traps.dm" +#include "code\game\objects\items\weapons\trays.dm" +#include "code\game\objects\items\weapons\weaponry.dm" +#include "code\game\objects\items\weapons\weldbackpack.dm" +#include "code\game\objects\items\weapons\circuitboards\broken.dm" +#include "code\game\objects\items\weapons\circuitboards\circuitboard.dm" +#include "code\game\objects\items\weapons\circuitboards\frame.dm" +#include "code\game\objects\items\weapons\circuitboards\mecha.dm" +#include "code\game\objects\items\weapons\circuitboards\other.dm" +#include "code\game\objects\items\weapons\circuitboards\computer\air_management.dm" +#include "code\game\objects\items\weapons\circuitboards\computer\camera_monitor.dm" +#include "code\game\objects\items\weapons\circuitboards\computer\computer.dm" +#include "code\game\objects\items\weapons\circuitboards\computer\research.dm" +#include "code\game\objects\items\weapons\circuitboards\computer\shuttle.dm" +#include "code\game\objects\items\weapons\circuitboards\computer\supply.dm" +#include "code\game\objects\items\weapons\circuitboards\computer\telecomms.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\biogenerator.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\cloning.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\engineering.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\fluidpump.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\jukebox.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\kitchen_appliances.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\mech_recharger.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\mining_drill.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\papershredder.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\power.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\recharge_station.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\research.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\shieldgen.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\ships.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\telecomms.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\unary_atmos.dm" +#include "code\game\objects\items\weapons\grenades\anti_photon_grenade.dm" +#include "code\game\objects\items\weapons\grenades\chem_grenade.dm" +#include "code\game\objects\items\weapons\grenades\concussion.dm" +#include "code\game\objects\items\weapons\grenades\emgrenade.dm" +#include "code\game\objects\items\weapons\grenades\explosive.dm" +#include "code\game\objects\items\weapons\grenades\flashbang.dm" +#include "code\game\objects\items\weapons\grenades\grenade.dm" +#include "code\game\objects\items\weapons\grenades\projectile.dm" +#include "code\game\objects\items\weapons\grenades\smokebomb.dm" +#include "code\game\objects\items\weapons\grenades\spawnergrenade.dm" +#include "code\game\objects\items\weapons\grenades\supermatter.dm" +#include "code\game\objects\items\weapons\id cards\cards.dm" +#include "code\game\objects\items\weapons\id cards\id_stacks.dm" +#include "code\game\objects\items\weapons\id cards\station_ids.dm" +#include "code\game\objects\items\weapons\id cards\syndicate_ids.dm" +#include "code\game\objects\items\weapons\implants\implant.dm" +#include "code\game\objects\items\weapons\implants\implantaugment.dm" +#include "code\game\objects\items\weapons\implants\implantcase.dm" +#include "code\game\objects\items\weapons\implants\implantchair.dm" +#include "code\game\objects\items\weapons\implants\implantcircuits.dm" +#include "code\game\objects\items\weapons\implants\implantdud.dm" +#include "code\game\objects\items\weapons\implants\implanter.dm" +#include "code\game\objects\items\weapons\implants\implantfreedom.dm" +#include "code\game\objects\items\weapons\implants\implantlanguage.dm" +#include "code\game\objects\items\weapons\implants\implantpad.dm" +#include "code\game\objects\items\weapons\implants\implantrestrainingbolt.dm" +#include "code\game\objects\items\weapons\implants\implantuplink.dm" +#include "code\game\objects\items\weapons\implants\neuralbasic.dm" +#include "code\game\objects\items\weapons\material\ashtray.dm" +#include "code\game\objects\items\weapons\material\bats.dm" +#include "code\game\objects\items\weapons\material\chainsaw.dm" +#include "code\game\objects\items\weapons\material\foam.dm" +#include "code\game\objects\items\weapons\material\gravemarker.dm" +#include "code\game\objects\items\weapons\material\kitchen.dm" +#include "code\game\objects\items\weapons\material\knives.dm" +#include "code\game\objects\items\weapons\material\material_armor.dm" +#include "code\game\objects\items\weapons\material\material_weapons.dm" +#include "code\game\objects\items\weapons\material\misc.dm" +#include "code\game\objects\items\weapons\material\shards.dm" +#include "code\game\objects\items\weapons\material\swords.dm" +#include "code\game\objects\items\weapons\material\thrown.dm" +#include "code\game\objects\items\weapons\material\twohanded.dm" +#include "code\game\objects\items\weapons\material\whetstone.dm" +#include "code\game\objects\items\weapons\melee\deflect.dm" +#include "code\game\objects\items\weapons\melee\energy.dm" +#include "code\game\objects\items\weapons\melee\misc.dm" +#include "code\game\objects\items\weapons\storage\backpack.dm" +#include "code\game\objects\items\weapons\storage\bags.dm" +#include "code\game\objects\items\weapons\storage\belt.dm" +#include "code\game\objects\items\weapons\storage\bible.dm" +#include "code\game\objects\items\weapons\storage\boxes.dm" +#include "code\game\objects\items\weapons\storage\briefcase.dm" +#include "code\game\objects\items\weapons\storage\fancy.dm" +#include "code\game\objects\items\weapons\storage\firstaid.dm" +#include "code\game\objects\items\weapons\storage\internal.dm" +#include "code\game\objects\items\weapons\storage\laundry_basket.dm" +#include "code\game\objects\items\weapons\storage\lockbox.dm" +#include "code\game\objects\items\weapons\storage\misc.dm" +#include "code\game\objects\items\weapons\storage\mre.dm" +#include "code\game\objects\items\weapons\storage\quickdraw.dm" +#include "code\game\objects\items\weapons\storage\secure.dm" +#include "code\game\objects\items\weapons\storage\storage.dm" +#include "code\game\objects\items\weapons\storage\toolbox.dm" +#include "code\game\objects\items\weapons\storage\uplink_kits.dm" +#include "code\game\objects\items\weapons\storage\wallets.dm" +#include "code\game\objects\items\weapons\tanks\jetpack.dm" +#include "code\game\objects\items\weapons\tanks\tank_types.dm" +#include "code\game\objects\items\weapons\tanks\tanks.dm" +#include "code\game\objects\items\weapons\tools\crowbar.dm" +#include "code\game\objects\items\weapons\tools\screwdriver.dm" +#include "code\game\objects\items\weapons\tools\weldingtool.dm" +#include "code\game\objects\items\weapons\tools\wirecutters.dm" +#include "code\game\objects\items\weapons\tools\wrench.dm" +#include "code\game\objects\random\_random.dm" +#include "code\game\objects\random\anomalous.dm" +#include "code\game\objects\random\guns_and_ammo.dm" +#include "code\game\objects\random\maintenance.dm" +#include "code\game\objects\random\mapping.dm" +#include "code\game\objects\random\mechs.dm" +#include "code\game\objects\random\misc.dm" +#include "code\game\objects\random\mob.dm" +#include "code\game\objects\random\spacesuits.dm" +#include "code\game\objects\random\unidentified\medicine.dm" +#include "code\game\objects\structures\animal_den.dm" +#include "code\game\objects\structures\barricades.dm" +#include "code\game\objects\structures\barsign.dm" +#include "code\game\objects\structures\bedsheet_bin.dm" +#include "code\game\objects\structures\bonfire.dm" +#include "code\game\objects\structures\catwalk.dm" +#include "code\game\objects\structures\cliff.dm" +#include "code\game\objects\structures\coathanger.dm" +#include "code\game\objects\structures\curtains.dm" +#include "code\game\objects\structures\displaycase.dm" +#include "code\game\objects\structures\dogbed.dm" +#include "code\game\objects\structures\door_assembly.dm" +#include "code\game\objects\structures\electricchair.dm" +#include "code\game\objects\structures\extinguisher.dm" +#include "code\game\objects\structures\fence.dm" +#include "code\game\objects\structures\fireaxe.dm" +#include "code\game\objects\structures\fitness.dm" +#include "code\game\objects\structures\girders.dm" +#include "code\game\objects\structures\gravemarker.dm" +#include "code\game\objects\structures\grille.dm" +#include "code\game\objects\structures\handrail.dm" +#include "code\game\objects\structures\holoplant.dm" +#include "code\game\objects\structures\inflatable.dm" +#include "code\game\objects\structures\janicart.dm" +#include "code\game\objects\structures\kitchen_spike.dm" +#include "code\game\objects\structures\lattice.dm" +#include "code\game\objects\structures\ledges.dm" +#include "code\game\objects\structures\lightpost.dm" +#include "code\game\objects\structures\loot_piles.dm" +#include "code\game\objects\structures\mirror.dm" +#include "code\game\objects\structures\mop_bucket.dm" +#include "code\game\objects\structures\morgue.dm" +#include "code\game\objects\structures\musician.dm" +#include "code\game\objects\structures\plasticflaps.dm" +#include "code\game\objects\structures\railing.dm" +#include "code\game\objects\structures\safe.dm" +#include "code\game\objects\structures\salvageable.dm" +#include "code\game\objects\structures\signs.dm" +#include "code\game\objects\structures\simple_doors.dm" +#include "code\game\objects\structures\snowman.dm" +#include "code\game\objects\structures\stasis_cage.dm" +#include "code\game\objects\structures\tank_dispenser.dm" +#include "code\game\objects\structures\target_stake.dm" +#include "code\game\objects\structures\transit_tubes.dm" +#include "code\game\objects\structures\under_wardrobe.dm" +#include "code\game\objects\structures\watercloset.dm" +#include "code\game\objects\structures\windoor_assembly.dm" +#include "code\game\objects\structures\window.dm" +#include "code\game\objects\structures\window_spawner.dm" +#include "code\game\objects\structures\crates_lockers\__closets.dm" +#include "code\game\objects\structures\crates_lockers\_closets_appearance_definitions.dm" +#include "code\game\objects\structures\crates_lockers\crates.dm" +#include "code\game\objects\structures\crates_lockers\largecrate.dm" +#include "code\game\objects\structures\crates_lockers\vehiclecage.dm" +#include "code\game\objects\structures\crates_lockers\closets\coffin.dm" +#include "code\game\objects\structures\crates_lockers\closets\crittercrate.dm" +#include "code\game\objects\structures\crates_lockers\closets\fitness.dm" +#include "code\game\objects\structures\crates_lockers\closets\gimmick.dm" +#include "code\game\objects\structures\crates_lockers\closets\job_closets.dm" +#include "code\game\objects\structures\crates_lockers\closets\l3closet.dm" +#include "code\game\objects\structures\crates_lockers\closets\malfunction.dm" +#include "code\game\objects\structures\crates_lockers\closets\statue.dm" +#include "code\game\objects\structures\crates_lockers\closets\syndicate.dm" +#include "code\game\objects\structures\crates_lockers\closets\utility_closets.dm" +#include "code\game\objects\structures\crates_lockers\closets\walllocker.dm" +#include "code\game\objects\structures\crates_lockers\closets\wardrobe.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\bar.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\guncabinet.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\hydroponics.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\medical.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\personal.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\security.dm" +#include "code\game\objects\structures\flora\flora.dm" +#include "code\game\objects\structures\flora\grass.dm" +#include "code\game\objects\structures\flora\trees.dm" +#include "code\game\objects\structures\ghost_pods\ghost_pods.dm" +#include "code\game\objects\structures\ghost_pods\human.dm" +#include "code\game\objects\structures\ghost_pods\mysterious.dm" +#include "code\game\objects\structures\ghost_pods\silicon.dm" +#include "code\game\objects\structures\props\alien_props.dm" +#include "code\game\objects\structures\props\beam_prism.dm" +#include "code\game\objects\structures\props\billboard.dm" +#include "code\game\objects\structures\props\blackbox.dm" +#include "code\game\objects\structures\props\esoteric.dm" +#include "code\game\objects\structures\props\fake_ai.dm" +#include "code\game\objects\structures\props\fences.dm" +#include "code\game\objects\structures\props\machines.dm" +#include "code\game\objects\structures\props\nest.dm" +#include "code\game\objects\structures\props\projectile_lock.dm" +#include "code\game\objects\structures\props\prop.dm" +#include "code\game\objects\structures\props\puzzledoor.dm" +#include "code\game\objects\structures\props\rocks.dm" +#include "code\game\objects\structures\props\statue.dm" +#include "code\game\objects\structures\props\swarm.dm" +#include "code\game\objects\structures\props\transmitter.dm" +#include "code\game\objects\structures\props\warfare.dm" +#include "code\game\objects\structures\stool_bed_chair_nest\alien_nests.dm" +#include "code\game\objects\structures\stool_bed_chair_nest\bed.dm" +#include "code\game\objects\structures\stool_bed_chair_nest\chairs.dm" +#include "code\game\objects\structures\stool_bed_chair_nest\stools.dm" +#include "code\game\objects\structures\stool_bed_chair_nest\wheelchair.dm" +#include "code\game\objects\structures\stool_bed_chair_nest\wheelchair_item.dm" +#include "code\game\turfs\simulated.dm" +#include "code\game\turfs\turf.dm" +#include "code\game\turfs\turf_changing.dm" +#include "code\game\turfs\turf_flick_animations.dm" +#include "code\game\turfs\unsimulated.dm" +#include "code\game\turfs\flooring\flooring.dm" +#include "code\game\turfs\flooring\flooring_decals.dm" +#include "code\game\turfs\flooring\flooring_premade.dm" +#include "code\game\turfs\initialization\init.dm" +#include "code\game\turfs\initialization\maintenance.dm" +#include "code\game\turfs\simulated\floor.dm" +#include "code\game\turfs\simulated\floor_acts.dm" +#include "code\game\turfs\simulated\floor_attackby.dm" +#include "code\game\turfs\simulated\floor_damage.dm" +#include "code\game\turfs\simulated\floor_icon.dm" +#include "code\game\turfs\simulated\floor_static.dm" +#include "code\game\turfs\simulated\floor_types.dm" +#include "code\game\turfs\simulated\floor_types_eris.dm" +#include "code\game\turfs\simulated\lava.dm" +#include "code\game\turfs\simulated\wall_attacks.dm" +#include "code\game\turfs\simulated\wall_icon.dm" +#include "code\game\turfs\simulated\wall_types.dm" +#include "code\game\turfs\simulated\walls.dm" +#include "code\game\turfs\simulated\water.dm" +#include "code\game\turfs\simulated\dungeon\floor.dm" +#include "code\game\turfs\simulated\dungeon\wall.dm" +#include "code\game\turfs\simulated\outdoors\dirt.dm" +#include "code\game\turfs\simulated\outdoors\grass.dm" +#include "code\game\turfs\simulated\outdoors\grass_random.dm" +#include "code\game\turfs\simulated\outdoors\outdoors.dm" +#include "code\game\turfs\simulated\outdoors\outdoors_attackby.dm" +#include "code\game\turfs\simulated\outdoors\sidewalk.dm" +#include "code\game\turfs\simulated\outdoors\sky.dm" +#include "code\game\turfs\simulated\outdoors\snow.dm" +#include "code\game\turfs\snow\snow.dm" +#include "code\game\turfs\space\cracked_asteroid.dm" +#include "code\game\turfs\space\space.dm" +#include "code\game\turfs\space\transit.dm" +#include "code\game\turfs\unsimulated\beach.dm" +#include "code\game\turfs\unsimulated\floor.dm" +#include "code\game\turfs\unsimulated\planetary.dm" +#include "code\game\turfs\unsimulated\shuttle.dm" +#include "code\game\turfs\unsimulated\walls.dm" +#include "code\game\verbs\suicide.dm" +#include "code\js\byjax.dm" +#include "code\js\menus.dm" +#include "code\modules\admin\admin.dm" +#include "code\modules\admin\admin_attack_log.dm" +#include "code\modules\admin\admin_investigate.dm" +#include "code\modules\admin\admin_memo.dm" +#include "code\modules\admin\admin_ranks.dm" +#include "code\modules\admin\admin_secrets.dm" +#include "code\modules\admin\admin_tools.dm" +#include "code\modules\admin\admin_verb_lists.dm" +#include "code\modules\admin\admin_verbs.dm" +#include "code\modules\admin\banjob.dm" +#include "code\modules\admin\create_mob.dm" +#include "code\modules\admin\create_object.dm" +#include "code\modules\admin\create_turf.dm" +#include "code\modules\admin\holder2.dm" +#include "code\modules\admin\IsBanned.dm" +#include "code\modules\admin\map_capture.dm" +#include "code\modules\admin\NewBan.dm" +#include "code\modules\admin\news.dm" +#include "code\modules\admin\persistence.dm" +#include "code\modules\admin\player_notes.dm" +#include "code\modules\admin\player_panel.dm" +#include "code\modules\admin\topic.dm" +#include "code\modules\admin\ToRban.dm" +#include "code\modules\admin\callproc\callproc.dm" +#include "code\modules\admin\DB ban\functions.dm" +#include "code\modules\admin\permissionverbs\permissionedit.dm" +#include "code\modules\admin\secrets\admin_secrets\admin_logs.dm" +#include "code\modules\admin\secrets\admin_secrets\alter_narsie.dm" +#include "code\modules\admin\secrets\admin_secrets\bombing_list.dm" +#include "code\modules\admin\secrets\admin_secrets\jump_shuttle.dm" +#include "code\modules\admin\secrets\admin_secrets\launch_shuttle.dm" +#include "code\modules\admin\secrets\admin_secrets\launch_shuttle_forced.dm" +#include "code\modules\admin\secrets\admin_secrets\list_dna.dm" +#include "code\modules\admin\secrets\admin_secrets\list_fingerprints.dm" +#include "code\modules\admin\secrets\admin_secrets\move_shuttle.dm" +#include "code\modules\admin\secrets\admin_secrets\prison_warp.dm" +#include "code\modules\admin\secrets\admin_secrets\show_ai_laws.dm" +#include "code\modules\admin\secrets\admin_secrets\show_crew_manifest.dm" +#include "code\modules\admin\secrets\admin_secrets\show_game_mode.dm" +#include "code\modules\admin\secrets\admin_secrets\show_law_changes.dm" +#include "code\modules\admin\secrets\admin_secrets\show_signalers.dm" +#include "code\modules\admin\secrets\admin_secrets\traitors_and_objectives.dm" +#include "code\modules\admin\secrets\final_solutions\summon_narsie.dm" +#include "code\modules\admin\secrets\final_solutions\supermatter_cascade.dm" +#include "code\modules\admin\secrets\fun_secrets\break_all_lights.dm" +#include "code\modules\admin\secrets\fun_secrets\break_some_lights.dm" +#include "code\modules\admin\secrets\fun_secrets\fix_all_lights.dm" +#include "code\modules\admin\secrets\fun_secrets\ghost_mode.dm" +#include "code\modules\admin\secrets\fun_secrets\paintball_mode.dm" +#include "code\modules\admin\secrets\fun_secrets\power_all_smes.dm" +#include "code\modules\admin\secrets\fun_secrets\power_failure_begin.dm" +#include "code\modules\admin\secrets\fun_secrets\power_failure_end.dm" +#include "code\modules\admin\secrets\fun_secrets\remove_all_clothing.dm" +#include "code\modules\admin\secrets\fun_secrets\remove_internal_clothing.dm" +#include "code\modules\admin\secrets\fun_secrets\send_strike_team.dm" +#include "code\modules\admin\secrets\fun_secrets\toggle_bomb_cap.dm" +#include "code\modules\admin\secrets\fun_secrets\triple_ai_mode.dm" +#include "code\modules\admin\secrets\fun_secrets\turn_humans_into_corgies.dm" +#include "code\modules\admin\secrets\fun_secrets\turn_humans_into_monkeys.dm" +#include "code\modules\admin\secrets\random_events\gravity.dm" +#include "code\modules\admin\secrets\random_events\trigger_cordical_borer_infestation.dm" +#include "code\modules\admin\secrets\random_events\trigger_xenomorph_infestation.dm" +#include "code\modules\admin\verbs\adminhelp.dm" +#include "code\modules\admin\verbs\adminjump.dm" +#include "code\modules\admin\verbs\adminpm.dm" +#include "code\modules\admin\verbs\adminsay.dm" +#include "code\modules\admin\verbs\antag-ooc.dm" +#include "code\modules\admin\verbs\atmosdebug.dm" +#include "code\modules\admin\verbs\BrokenInhands.dm" +#include "code\modules\admin\verbs\buildmode.dm" +#include "code\modules\admin\verbs\change_appearance.dm" +#include "code\modules\admin\verbs\check_customitem_activity.dm" +#include "code\modules\admin\verbs\cinematic.dm" +#include "code\modules\admin\verbs\custom_event.dm" +#include "code\modules\admin\verbs\dbcon_fix.dm" +#include "code\modules\admin\verbs\deadsay.dm" +#include "code\modules\admin\verbs\debug.dm" +#include "code\modules\admin\verbs\diagnostics.dm" +#include "code\modules\admin\verbs\dice.dm" +#include "code\modules\admin\verbs\fps.dm" +#include "code\modules\admin\verbs\getlogs.dm" +#include "code\modules\admin\verbs\grief_fixers.dm" +#include "code\modules\admin\verbs\lightning_strike.dm" +#include "code\modules\admin\verbs\map_template_loadverb.dm" +#include "code\modules\admin\verbs\mapping.dm" +#include "code\modules\admin\verbs\panicbunker.dm" +#include "code\modules\admin\verbs\playsound.dm" +#include "code\modules\admin\verbs\possess.dm" +#include "code\modules\admin\verbs\pray.dm" +#include "code\modules\admin\verbs\randomverbs.dm" +#include "code\modules\admin\verbs\smite.dm" +#include "code\modules\admin\verbs\striketeam.dm" +#include "code\modules\admin\verbs\tripAI.dm" +#include "code\modules\admin\verbs\SDQL2\SDQL_2.dm" +#include "code\modules\admin\verbs\SDQL2\SDQL_2_parser.dm" +#include "code\modules\admin\verbs\SDQL2\SDQL_2_wrappers.dm" +#include "code\modules\admin\view_variables\admin_delete.dm" +#include "code\modules\admin\view_variables\debug_variables.dm" +#include "code\modules\admin\view_variables\get_variables.dm" +#include "code\modules\admin\view_variables\helpers.dm" +#include "code\modules\admin\view_variables\mass_edit_variables.dm" +#include "code\modules\admin\view_variables\modify_variables.dm" +#include "code\modules\admin\view_variables\topic.dm" +#include "code\modules\admin\view_variables\topic_list.dm" +#include "code\modules\admin\view_variables\view_variables.dm" +#include "code\modules\admin\view_variables\view_variables_global.dm" +#include "code\modules\ai\_defines.dm" +#include "code\modules\ai\ai_holder.dm" +#include "code\modules\ai\ai_holder_combat.dm" +#include "code\modules\ai\ai_holder_combat_unseen.dm" +#include "code\modules\ai\ai_holder_communication.dm" +#include "code\modules\ai\ai_holder_cooperation.dm" +#include "code\modules\ai\ai_holder_debug.dm" +#include "code\modules\ai\ai_holder_disabled.dm" +#include "code\modules\ai\ai_holder_fleeing.dm" +#include "code\modules\ai\ai_holder_follow.dm" +#include "code\modules\ai\ai_holder_movement.dm" +#include "code\modules\ai\ai_holder_pathfinding.dm" +#include "code\modules\ai\ai_holder_targeting.dm" +#include "code\modules\ai\interfaces.dm" +#include "code\modules\ai\say_list.dm" +#include "code\modules\ai\ai_holder_subtypes\simple_mob_ai.dm" +#include "code\modules\ai\ai_holder_subtypes\slime_xenobio_ai.dm" +#include "code\modules\ai\ai_holder_subtypes\xeno_alien_ai.dm" +#include "code\modules\alarm\alarm.dm" +#include "code\modules\alarm\alarm_handler.dm" +#include "code\modules\alarm\atmosphere_alarm.dm" +#include "code\modules\alarm\camera_alarm.dm" +#include "code\modules\alarm\fire_alarm.dm" +#include "code\modules\alarm\motion_alarm.dm" +#include "code\modules\alarm\power_alarm.dm" +#include "code\modules\antagonist\antagonist.dm" +#include "code\modules\antagonist\antagonist_add.dm" +#include "code\modules\antagonist\antagonist_create.dm" +#include "code\modules\antagonist\antagonist_equip.dm" +#include "code\modules\antagonist\antagonist_factions.dm" +#include "code\modules\antagonist\antagonist_helpers.dm" +#include "code\modules\antagonist\antagonist_objectives.dm" +#include "code\modules\antagonist\antagonist_panel.dm" +#include "code\modules\antagonist\antagonist_place.dm" +#include "code\modules\antagonist\antagonist_print.dm" +#include "code\modules\antagonist\antagonist_update.dm" +#include "code\modules\antagonist\alien\borer.dm" +#include "code\modules\antagonist\alien\xenomorph.dm" +#include "code\modules\antagonist\outsider\commando.dm" +#include "code\modules\antagonist\outsider\deathsquad.dm" +#include "code\modules\antagonist\outsider\ert.dm" +#include "code\modules\antagonist\outsider\mercenary.dm" +#include "code\modules\antagonist\outsider\ninja.dm" +#include "code\modules\antagonist\outsider\raider.dm" +#include "code\modules\antagonist\outsider\technomancer.dm" +#include "code\modules\antagonist\outsider\trader.dm" +#include "code\modules\antagonist\outsider\wizard.dm" +#include "code\modules\antagonist\station\changeling.dm" +#include "code\modules\antagonist\station\cultist.dm" +#include "code\modules\antagonist\station\infiltrator.dm" +#include "code\modules\antagonist\station\loyalist.dm" +#include "code\modules\antagonist\station\renegade.dm" +#include "code\modules\antagonist\station\revolutionary.dm" +#include "code\modules\antagonist\station\rogue_ai.dm" +#include "code\modules\antagonist\station\stowaway.dm" +#include "code\modules\antagonist\station\thug.dm" +#include "code\modules\antagonist\station\traitor.dm" +#include "code\modules\artifice\cursedform.dm" +#include "code\modules\artifice\deadringer.dm" +#include "code\modules\artifice\telecube.dm" +#include "code\modules\assembly\assembly.dm" +#include "code\modules\assembly\helpers.dm" +#include "code\modules\assembly\holder.dm" +#include "code\modules\assembly\igniter.dm" +#include "code\modules\assembly\infrared.dm" +#include "code\modules\assembly\mousetrap.dm" +#include "code\modules\assembly\proximity.dm" +#include "code\modules\assembly\shock_kit.dm" +#include "code\modules\assembly\signaler.dm" +#include "code\modules\assembly\timer.dm" +#include "code\modules\assembly\voice.dm" +#include "code\modules\asset_cache\asset_cache.dm" +#include "code\modules\asset_cache\asset_cache_client.dm" +#include "code\modules\asset_cache\asset_cache_item.dm" +#include "code\modules\asset_cache\asset_list.dm" +#include "code\modules\asset_cache\asset_list_items.dm" +#include "code\modules\awaymissions\bluespaceartillery.dm" +#include "code\modules\awaymissions\corpse.dm" +#include "code\modules\awaymissions\exile.dm" +#include "code\modules\awaymissions\gateway.dm" +#include "code\modules\awaymissions\loot.dm" +#include "code\modules\awaymissions\pamphlet.dm" +#include "code\modules\awaymissions\trigger.dm" +#include "code\modules\awaymissions\zlevel.dm" +#include "code\modules\blob2\_defines.dm" +#include "code\modules\blob2\core_chunk.dm" +#include "code\modules\blob2\blobs\base_blob.dm" +#include "code\modules\blob2\blobs\core.dm" +#include "code\modules\blob2\blobs\factory.dm" +#include "code\modules\blob2\blobs\node.dm" +#include "code\modules\blob2\blobs\normal.dm" +#include "code\modules\blob2\blobs\resource.dm" +#include "code\modules\blob2\blobs\shield.dm" +#include "code\modules\blob2\overmind\overmind.dm" +#include "code\modules\blob2\overmind\powers.dm" +#include "code\modules\blob2\overmind\types.dm" +#include "code\modules\blob2\overmind\types\barnacle.dm" +#include "code\modules\blob2\overmind\types\blazing_oil.dm" +#include "code\modules\blob2\overmind\types\classic.dm" +#include "code\modules\blob2\overmind\types\cryogenic_goo.dm" +#include "code\modules\blob2\overmind\types\ectoplasmic_horror.dm" +#include "code\modules\blob2\overmind\types\electromagnetic_web.dm" +#include "code\modules\blob2\overmind\types\energized_jelly.dm" +#include "code\modules\blob2\overmind\types\explosive_lattice.dm" +#include "code\modules\blob2\overmind\types\fabrication_swarm.dm" +#include "code\modules\blob2\overmind\types\fulminant_organism.dm" +#include "code\modules\blob2\overmind\types\fungal_bloom.dm" +#include "code\modules\blob2\overmind\types\grey_goo.dm" +#include "code\modules\blob2\overmind\types\pressurized_slime.dm" +#include "code\modules\blob2\overmind\types\radioactive_ooze.dm" +#include "code\modules\blob2\overmind\types\ravenous_macrophage.dm" +#include "code\modules\blob2\overmind\types\reactive_spines.dm" +#include "code\modules\blob2\overmind\types\roiling_mold.dm" +#include "code\modules\blob2\overmind\types\shifting_fragments.dm" +#include "code\modules\blob2\overmind\types\synchronous_mesh.dm" +#include "code\modules\blob2\overmind\types\volatile_alluvium.dm" +#include "code\modules\busy_space\air_traffic.dm" +#include "code\modules\busy_space\loremaster.dm" +#include "code\modules\busy_space\organizations.dm" +#include "code\modules\catalogue\atoms.dm" +#include "code\modules\catalogue\catalogue_data.dm" +#include "code\modules\catalogue\cataloguer.dm" +#include "code\modules\catalogue\cataloguer_visuals.dm" +#include "code\modules\client\client defines.dm" +#include "code\modules\client\client procs.dm" +#include "code\modules\client\movement.dm" +#include "code\modules\client\preferences.dm" +#include "code\modules\client\preferences_factions.dm" +#include "code\modules\client\preferences_savefile.dm" +#include "code\modules\client\preferences_spawnpoints.dm" +#include "code\modules\client\preferences_toggle_procs.dm" +#include "code\modules\client\spam_prevention.dm" +#include "code\modules\client\ui_style.dm" +#include "code\modules\client\preference_setup\_defines.dm" +#include "code\modules\client\preference_setup\preference_setup.dm" +#include "code\modules\client\preference_setup\antagonism\01_basic.dm" +#include "code\modules\client\preference_setup\antagonism\02_candidacy.dm" +#include "code\modules\client\preference_setup\general\01_basic.dm" +#include "code\modules\client\preference_setup\general\02_language.dm" +#include "code\modules\client\preference_setup\general\03_body.dm" +#include "code\modules\client\preference_setup\general\04_equipment.dm" +#include "code\modules\client\preference_setup\general\05_background.dm" +#include "code\modules\client\preference_setup\general\06_flavor.dm" +#include "code\modules\client\preference_setup\global\01_ui.dm" +#include "code\modules\client\preference_setup\global\02_settings.dm" +#include "code\modules\client\preference_setup\global\03_pai.dm" +#include "code\modules\client\preference_setup\global\setting_datums.dm" +#include "code\modules\client\preference_setup\loadout\gear_tweaks.dm" +#include "code\modules\client\preference_setup\loadout\loadout.dm" +#include "code\modules\client\preference_setup\loadout\loadout_accessories.dm" +#include "code\modules\client\preference_setup\loadout\loadout_contraband.dm" +#include "code\modules\client\preference_setup\loadout\loadout_cosmetics.dm" +#include "code\modules\client\preference_setup\loadout\loadout_cyberware.dm" +#include "code\modules\client\preference_setup\loadout\loadout_ears.dm" +#include "code\modules\client\preference_setup\loadout\loadout_eyes.dm" +#include "code\modules\client\preference_setup\loadout\loadout_general.dm" +#include "code\modules\client\preference_setup\loadout\loadout_gloves.dm" +#include "code\modules\client\preference_setup\loadout\loadout_head.dm" +#include "code\modules\client\preference_setup\loadout\loadout_mask.dm" +#include "code\modules\client\preference_setup\loadout\loadout_shoes.dm" +#include "code\modules\client\preference_setup\loadout\loadout_smoking.dm" +#include "code\modules\client\preference_setup\loadout\loadout_suit.dm" +#include "code\modules\client\preference_setup\loadout\loadout_uniform.dm" +#include "code\modules\client\preference_setup\loadout\loadout_utility.dm" +#include "code\modules\client\preference_setup\loadout\loadout_xeno.dm" +#include "code\modules\client\preference_setup\occupation\occupation.dm" +#include "code\modules\client\preference_setup\skills\skills.dm" +#include "code\modules\client\preference_setup\traits\trait_defines.dm" +#include "code\modules\client\preference_setup\traits\traits.dm" +#include "code\modules\client\preference_setup\volume_sliders\01_volume.dm" +#include "code\modules\client\verbs\advanced_who.dm" +#include "code\modules\client\verbs\ignore.dm" +#include "code\modules\client\verbs\ooc.dm" +#include "code\modules\client\verbs\ping.dm" +#include "code\modules\client\verbs\who.dm" +#include "code\modules\clothing\chameleon.dm" +#include "code\modules\clothing\clothing.dm" +#include "code\modules\clothing\clothing_accessories.dm" +#include "code\modules\clothing\clothing_icons.dm" +#include "code\modules\clothing\ears\earrings.dm" +#include "code\modules\clothing\ears\ears.dm" +#include "code\modules\clothing\ears\headphones.dm" +#include "code\modules\clothing\glasses\glasses.dm" +#include "code\modules\clothing\glasses\hud.dm" +#include "code\modules\clothing\gloves\antagonist.dm" +#include "code\modules\clothing\gloves\arm_guards.dm" +#include "code\modules\clothing\gloves\boxing.dm" +#include "code\modules\clothing\gloves\color.dm" +#include "code\modules\clothing\gloves\gauntlets.dm" +#include "code\modules\clothing\gloves\miscellaneous.dm" +#include "code\modules\clothing\head\collectable.dm" +#include "code\modules\clothing\head\flowercrowns.dm" +#include "code\modules\clothing\head\hardhat.dm" +#include "code\modules\clothing\head\helmet.dm" +#include "code\modules\clothing\head\hood.dm" +#include "code\modules\clothing\head\jobs.dm" +#include "code\modules\clothing\head\misc.dm" +#include "code\modules\clothing\head\misc_special.dm" +#include "code\modules\clothing\head\pilot_helmet.dm" +#include "code\modules\clothing\head\soft_caps.dm" +#include "code\modules\clothing\head\solgov.dm" +#include "code\modules\clothing\masks\boxing.dm" +#include "code\modules\clothing\masks\breath.dm" +#include "code\modules\clothing\masks\gasmask.dm" +#include "code\modules\clothing\masks\hailer.dm" +#include "code\modules\clothing\masks\miscellaneous.dm" +#include "code\modules\clothing\masks\voice.dm" +#include "code\modules\clothing\rings\material.dm" +#include "code\modules\clothing\rings\rings.dm" +#include "code\modules\clothing\shoes\boots.dm" +#include "code\modules\clothing\shoes\colour.dm" +#include "code\modules\clothing\shoes\leg_guards.dm" +#include "code\modules\clothing\shoes\magboots.dm" +#include "code\modules\clothing\shoes\miscellaneous.dm" +#include "code\modules\clothing\shoes\xeno\teshari.dm" +#include "code\modules\clothing\spacesuits\alien.dm" +#include "code\modules\clothing\spacesuits\breaches.dm" +#include "code\modules\clothing\spacesuits\miscellaneous.dm" +#include "code\modules\clothing\spacesuits\spacesuits.dm" +#include "code\modules\clothing\spacesuits\syndi.dm" +#include "code\modules\clothing\spacesuits\rig\rig.dm" +#include "code\modules\clothing\spacesuits\rig\rig_attackby.dm" +#include "code\modules\clothing\spacesuits\rig\rig_pieces.dm" +#include "code\modules\clothing\spacesuits\rig\rig_tgui.dm" +#include "code\modules\clothing\spacesuits\rig\rig_verbs.dm" +#include "code\modules\clothing\spacesuits\rig\rig_wiring.dm" +#include "code\modules\clothing\spacesuits\rig\modules\modules.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\ai_container.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\chem_dispenser.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\cleaner_launcher.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\cloak.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\datajack.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\device.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\electrowarfare.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\grenade_launcher.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\inhand_fabricator.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\jetpack.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\metalfoam_launcher.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\mounted_gun.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\powersink.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\self_destruct.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\sprinter.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\teleporter.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\vision.dm" +#include "code\modules\clothing\spacesuits\rig\modules\specific\voice.dm" +#include "code\modules\clothing\spacesuits\rig\suits\alien.dm" +#include "code\modules\clothing\spacesuits\rig\suits\combat.dm" +#include "code\modules\clothing\spacesuits\rig\suits\ert.dm" +#include "code\modules\clothing\spacesuits\rig\suits\light.dm" +#include "code\modules\clothing\spacesuits\rig\suits\merc.dm" +#include "code\modules\clothing\spacesuits\rig\suits\pmc.dm" +#include "code\modules\clothing\spacesuits\rig\suits\robotics.dm" +#include "code\modules\clothing\spacesuits\rig\suits\station.dm" +#include "code\modules\clothing\spacesuits\void\event.dm" +#include "code\modules\clothing\spacesuits\void\merc.dm" +#include "code\modules\clothing\spacesuits\void\station.dm" +#include "code\modules\clothing\spacesuits\void\void.dm" +#include "code\modules\clothing\spacesuits\void\wizard.dm" +#include "code\modules\clothing\spacesuits\void\zaddat.dm" +#include "code\modules\clothing\suits\armor.dm" +#include "code\modules\clothing\suits\bio.dm" +#include "code\modules\clothing\suits\hooded.dm" +#include "code\modules\clothing\suits\jobs.dm" +#include "code\modules\clothing\suits\labcoat.dm" +#include "code\modules\clothing\suits\miscellaneous.dm" +#include "code\modules\clothing\suits\solgov.dm" +#include "code\modules\clothing\suits\storage.dm" +#include "code\modules\clothing\suits\utility.dm" +#include "code\modules\clothing\suits\wiz_robe.dm" +#include "code\modules\clothing\suits\aliens\tajara.dm" +#include "code\modules\clothing\suits\aliens\teshari.dm" +#include "code\modules\clothing\suits\aliens\unathi.dm" +#include "code\modules\clothing\suits\aliens\vox.dm" +#include "code\modules\clothing\under\color.dm" +#include "code\modules\clothing\under\miscellaneous.dm" +#include "code\modules\clothing\under\pants.dm" +#include "code\modules\clothing\under\shorts.dm" +#include "code\modules\clothing\under\solgov.dm" +#include "code\modules\clothing\under\syndicate.dm" +#include "code\modules\clothing\under\accessories\accessory.dm" +#include "code\modules\clothing\under\accessories\armband.dm" +#include "code\modules\clothing\under\accessories\armor.dm" +#include "code\modules\clothing\under\accessories\badges.dm" +#include "code\modules\clothing\under\accessories\clothing.dm" +#include "code\modules\clothing\under\accessories\holster.dm" +#include "code\modules\clothing\under\accessories\lockets.dm" +#include "code\modules\clothing\under\accessories\permits.dm" +#include "code\modules\clothing\under\accessories\storage.dm" +#include "code\modules\clothing\under\accessories\torch.dm" +#include "code\modules\clothing\under\accessories\temperature\poncho.dm" +#include "code\modules\clothing\under\jobs\civilian.dm" +#include "code\modules\clothing\under\jobs\engineering.dm" +#include "code\modules\clothing\under\jobs\medsci.dm" +#include "code\modules\clothing\under\jobs\security.dm" +#include "code\modules\clothing\under\xenos\teshari.dm" +#include "code\modules\clothing\under\xenos\vox.dm" +#include "code\modules\compass\_compass.dm" +#include "code\modules\compass\compass_holder.dm" +#include "code\modules\compass\compass_waypoint.dm" +#include "code\modules\compass\~compass.dm" +#include "code\modules\customitems\item_spawning.dm" +#include "code\modules\detectivework\footprints.dm" +#include "code\modules\detectivework\forensics.dm" +#include "code\modules\detectivework\microscope\dnascanner.dm" +#include "code\modules\detectivework\microscope\microscope.dm" +#include "code\modules\detectivework\tools\crimekit.dm" +#include "code\modules\detectivework\tools\evidencebag.dm" +#include "code\modules\detectivework\tools\luminol.dm" +#include "code\modules\detectivework\tools\rag.dm" +#include "code\modules\detectivework\tools\sample_kits.dm" +#include "code\modules\detectivework\tools\scanner.dm" +#include "code\modules\detectivework\tools\storage.dm" +#include "code\modules\detectivework\tools\swabs.dm" +#include "code\modules\detectivework\tools\uvlight.dm" +#include "code\modules\economy\Accounts.dm" +#include "code\modules\economy\Accounts_DB.dm" +#include "code\modules\economy\ATM.dm" +#include "code\modules\economy\cash.dm" +#include "code\modules\economy\cash_register.dm" +#include "code\modules\economy\coins.dm" +#include "code\modules\economy\economy_misc.dm" +#include "code\modules\economy\EFTPOS.dm" +#include "code\modules\economy\Events.dm" +#include "code\modules\economy\Events_Mundane.dm" +#include "code\modules\economy\lorenews.dm" +#include "code\modules\economy\mint.dm" +#include "code\modules\economy\money_bag.dm" +#include "code\modules\economy\price_list.dm" +#include "code\modules\economy\retail_scanner.dm" +#include "code\modules\economy\TradeDestinations.dm" +#include "code\modules\economy\vending.dm" +#include "code\modules\economy\vending_machines.dm" +#include "code\modules\effects\vfx\_effect_system.dm" +#include "code\modules\effects\vfx\explosion.dm" +#include "code\modules\effects\vfx\explosion_particles.dm" +#include "code\modules\effects\vfx\ion_trail.dm" +#include "code\modules\effects\vfx\smoke.dm" +#include "code\modules\effects\vfx\sparks.dm" +#include "code\modules\effects\vfx\steam.dm" +#include "code\modules\emotes\emote_define.dm" +#include "code\modules\emotes\emote_mob.dm" +#include "code\modules\emotes\definitions\_mob.dm" +#include "code\modules\emotes\definitions\_species.dm" +#include "code\modules\emotes\definitions\audible.dm" +#include "code\modules\emotes\definitions\audible_cough.dm" +#include "code\modules\emotes\definitions\audible_scream.dm" +#include "code\modules\emotes\definitions\audible_slap.dm" +#include "code\modules\emotes\definitions\audible_snap.dm" +#include "code\modules\emotes\definitions\audible_sneeze.dm" +#include "code\modules\emotes\definitions\audible_whistle.dm" +#include "code\modules\emotes\definitions\exertion.dm" +#include "code\modules\emotes\definitions\human.dm" +#include "code\modules\emotes\definitions\slimes.dm" +#include "code\modules\emotes\definitions\synthetics.dm" +#include "code\modules\emotes\definitions\visible.dm" +#include "code\modules\emotes\definitions\visible_animated.dm" +#include "code\modules\emotes\definitions\visible_vomit.dm" +#include "code\modules\error_handler\_defines.dm" +#include "code\modules\error_handler\error_handler.dm" +#include "code\modules\error_handler\error_viewer.dm" +#include "code\modules\error_handler\~defines.dm" +#include "code\modules\events\apc_damage.dm" +#include "code\modules\events\atmos_leak.dm" +#include "code\modules\events\aurora_caelus.dm" +#include "code\modules\events\blob.dm" +#include "code\modules\events\brand_intelligence.dm" +#include "code\modules\events\camera_damage.dm" +#include "code\modules\events\canister_leak.dm" +#include "code\modules\events\carp_migration.dm" +#include "code\modules\events\comms_blackout.dm" +#include "code\modules\events\communications_blackout.dm" +#include "code\modules\events\dust.dm" +#include "code\modules\events\electrical_storm.dm" +#include "code\modules\events\event.dm" +#include "code\modules\events\event_container.dm" +#include "code\modules\events\event_dynamic.dm" +#include "code\modules\events\event_manager.dm" +#include "code\modules\events\gravity.dm" +#include "code\modules\events\grid_check.dm" +#include "code\modules\events\infestation.dm" +#include "code\modules\events\ion_storm.dm" +#include "code\modules\events\meteors.dm" +#include "code\modules\events\money_hacker.dm" +#include "code\modules\events\money_lotto.dm" +#include "code\modules\events\money_spam.dm" +#include "code\modules\events\prison_break.dm" +#include "code\modules\events\radiation_storm.dm" +#include "code\modules\events\random_antagonist.dm" +#include "code\modules\events\rogue_drones.dm" +#include "code\modules\events\shipping_error.dm" +#include "code\modules\events\solar_storm.dm" +#include "code\modules\events\space_ninja.dm" +#include "code\modules\events\spacevine.dm" +#include "code\modules\events\spider_infestation.dm" +#include "code\modules\events\spontaneous_appendicitis.dm" +#include "code\modules\events\wallrot.dm" +#include "code\modules\examine\examine.dm" +#include "code\modules\examine\stat_icons.dm" +#include "code\modules\examine\descriptions\armor.dm" +#include "code\modules\examine\descriptions\atmospherics.dm" +#include "code\modules\examine\descriptions\containers.dm" +#include "code\modules\examine\descriptions\devices.dm" +#include "code\modules\examine\descriptions\engineering.dm" +#include "code\modules\examine\descriptions\machines.dm" +#include "code\modules\examine\descriptions\medical.dm" +#include "code\modules\examine\descriptions\mobs.dm" +#include "code\modules\examine\descriptions\paperwork.dm" +#include "code\modules\examine\descriptions\stacks.dm" +#include "code\modules\examine\descriptions\structures.dm" +#include "code\modules\examine\descriptions\telecomms.dm" +#include "code\modules\examine\descriptions\turfs.dm" +#include "code\modules\examine\descriptions\weapons.dm" +#include "code\modules\ext_scripts\irc.dm" +#include "code\modules\ext_scripts\python.dm" +#include "code\modules\fishing\fishing.dm" +#include "code\modules\fishing\fishing_net.dm" +#include "code\modules\fishing\fishing_rod.dm" +#include "code\modules\flufftext\Dreaming.dm" +#include "code\modules\flufftext\Hallucination.dm" +#include "code\modules\flufftext\look_up.dm" +#include "code\modules\food\food.dm" +#include "code\modules\food\recipe.dm" +#include "code\modules\food\recipe_dump.dm" +#include "code\modules\food\recipes_fryer.dm" +#include "code\modules\food\recipes_grill.dm" +#include "code\modules\food\recipes_microwave.dm" +#include "code\modules\food\recipes_oven.dm" +#include "code\modules\food\drinkingglass\drinkingglass.dm" +#include "code\modules\food\drinkingglass\extras.dm" +#include "code\modules\food\drinkingglass\glass_boxes.dm" +#include "code\modules\food\drinkingglass\glass_types.dm" +#include "code\modules\food\drinkingglass\metaglass.dm" +#include "code\modules\food\drinkingglass\mugs.dm" +#include "code\modules\food\drinkingglass\shaker.dm" +#include "code\modules\food\food\cans.dm" +#include "code\modules\food\food\condiment.dm" +#include "code\modules\food\food\drinks.dm" +#include "code\modules\food\food\lunch.dm" +#include "code\modules\food\food\sandwich.dm" +#include "code\modules\food\food\snacks.dm" +#include "code\modules\food\food\thecake.dm" +#include "code\modules\food\food\drinks\bottle.dm" +#include "code\modules\food\food\drinks\cup.dm" +#include "code\modules\food\food\drinks\drinkingglass.dm" +#include "code\modules\food\food\drinks\jar.dm" +#include "code\modules\food\food\drinks\bottle\robot.dm" +#include "code\modules\food\food\snacks\meat.dm" +#include "code\modules\food\glass\bottle.dm" +#include "code\modules\food\glass\bottle\robot.dm" +#include "code\modules\food\kitchen\gibber.dm" +#include "code\modules\food\kitchen\icecream.dm" +#include "code\modules\food\kitchen\microwave.dm" +#include "code\modules\food\kitchen\cooking_machines\_appliance.dm" +#include "code\modules\food\kitchen\cooking_machines\_cooker.dm" +#include "code\modules\food\kitchen\cooking_machines\_cooker_output.dm" +#include "code\modules\food\kitchen\cooking_machines\_mixer.dm" +#include "code\modules\food\kitchen\cooking_machines\candy.dm" +#include "code\modules\food\kitchen\cooking_machines\cereal.dm" +#include "code\modules\food\kitchen\cooking_machines\container.dm" +#include "code\modules\food\kitchen\cooking_machines\fryer.dm" +#include "code\modules\food\kitchen\cooking_machines\grill.dm" +#include "code\modules\food\kitchen\cooking_machines\oven.dm" +#include "code\modules\food\kitchen\smartfridge\drying_rack.dm" +#include "code\modules\food\kitchen\smartfridge\engineering.dm" +#include "code\modules\food\kitchen\smartfridge\hydroponics.dm" +#include "code\modules\food\kitchen\smartfridge\medical.dm" +#include "code\modules\food\kitchen\smartfridge\smartfridge.dm" +#include "code\modules\gamemaster\defines.dm" +#include "code\modules\gamemaster\event2\event.dm" +#include "code\modules\gamemaster\event2\meta.dm" +#include "code\modules\gamemaster\event2\events\ghost_pod_spawner.dm" +#include "code\modules\gamemaster\event2\events\mob_spawning.dm" +#include "code\modules\gamemaster\event2\events\cargo\shipping_error.dm" +#include "code\modules\gamemaster\event2\events\command\manifest_malfunction.dm" +#include "code\modules\gamemaster\event2\events\command\money_hacker.dm" +#include "code\modules\gamemaster\event2\events\command\raise_funds.dm" +#include "code\modules\gamemaster\event2\events\engineering\airlock_failure.dm" +#include "code\modules\gamemaster\event2\events\engineering\blob.dm" +#include "code\modules\gamemaster\event2\events\engineering\brand_intelligence.dm" +#include "code\modules\gamemaster\event2\events\engineering\camera_damage.dm" +#include "code\modules\gamemaster\event2\events\engineering\canister_leak.dm" +#include "code\modules\gamemaster\event2\events\engineering\dust.dm" +#include "code\modules\gamemaster\event2\events\engineering\gas_leak.dm" +#include "code\modules\gamemaster\event2\events\engineering\grid_check.dm" +#include "code\modules\gamemaster\event2\events\engineering\space_meteor_defense.dm" +#include "code\modules\gamemaster\event2\events\engineering\spacevine.dm" +#include "code\modules\gamemaster\event2\events\engineering\wallrot.dm" +#include "code\modules\gamemaster\event2\events\engineering\window_break.dm" +#include "code\modules\gamemaster\event2\events\everyone\comms_blackout.dm" +#include "code\modules\gamemaster\event2\events\everyone\electrical_fault.dm" +#include "code\modules\gamemaster\event2\events\everyone\gravity.dm" +#include "code\modules\gamemaster\event2\events\everyone\infestation.dm" +#include "code\modules\gamemaster\event2\events\everyone\pda_spam.dm" +#include "code\modules\gamemaster\event2\events\everyone\radiation_storm.dm" +#include "code\modules\gamemaster\event2\events\everyone\random_antag.dm" +#include "code\modules\gamemaster\event2\events\everyone\solar_storm.dm" +#include "code\modules\gamemaster\event2\events\everyone\sudden_weather_shift.dm" +#include "code\modules\gamemaster\event2\events\legacy\legacy.dm" +#include "code\modules\gamemaster\event2\events\medical\appendicitis.dm" +#include "code\modules\gamemaster\event2\events\medical\virus.dm" +#include "code\modules\gamemaster\event2\events\security\carp_migration.dm" +#include "code\modules\gamemaster\event2\events\security\drill_announcement.dm" +#include "code\modules\gamemaster\event2\events\security\prison_break.dm" +#include "code\modules\gamemaster\event2\events\security\rogue_drones.dm" +#include "code\modules\gamemaster\event2\events\security\security_advisement.dm" +#include "code\modules\gamemaster\event2\events\security\spider_infestation.dm" +#include "code\modules\gamemaster\event2\events\security\stowaway.dm" +#include "code\modules\gamemaster\event2\events\security\surprise_carp.dm" +#include "code\modules\gamemaster\event2\events\security\swarm_boarder.dm" +#include "code\modules\gamemaster\event2\events\synthetic\ion_storm.dm" +#include "code\modules\games\cah.dm" +#include "code\modules\games\cah_black_cards.dm" +#include "code\modules\games\cah_white_cards.dm" +#include "code\modules\games\cardemon.dm" +#include "code\modules\games\cards.dm" +#include "code\modules\games\dice.dm" +#include "code\modules\games\spaceball_cards.dm" +#include "code\modules\games\tarot.dm" +#include "code\modules\genetics\side_effects.dm" +#include "code\modules\ghosttrap\trap.dm" +#include "code\modules\holodeck\HolodeckControl.dm" +#include "code\modules\holodeck\HolodeckObjects.dm" +#include "code\modules\holodeck\HolodeckPrograms.dm" +#include "code\modules\holomap\generate_holomap.dm" +#include "code\modules\holomap\holomap_area.dm" +#include "code\modules\holomap\holomap_datum.dm" +#include "code\modules\holomap\mapper.dm" +#include "code\modules\holomap\station_holomap.dm" +#include "code\modules\hydroponics\_hydro_setup.dm" +#include "code\modules\hydroponics\grown.dm" +#include "code\modules\hydroponics\grown_inedible.dm" +#include "code\modules\hydroponics\grown_predefined.dm" +#include "code\modules\hydroponics\grown_sif.dm" +#include "code\modules\hydroponics\seed.dm" +#include "code\modules\hydroponics\seed_controller.dm" +#include "code\modules\hydroponics\seed_gene_mut.dm" +#include "code\modules\hydroponics\seed_machines.dm" +#include "code\modules\hydroponics\seed_mobs.dm" +#include "code\modules\hydroponics\seed_packets.dm" +#include "code\modules\hydroponics\seed_storage.dm" +#include "code\modules\hydroponics\beekeeping\beehive.dm" +#include "code\modules\hydroponics\seedtypes\amauri.dm" +#include "code\modules\hydroponics\seedtypes\ambrosia.dm" +#include "code\modules\hydroponics\seedtypes\apples.dm" +#include "code\modules\hydroponics\seedtypes\banana.dm" +#include "code\modules\hydroponics\seedtypes\berries.dm" +#include "code\modules\hydroponics\seedtypes\cabbage.dm" +#include "code\modules\hydroponics\seedtypes\carrots.dm" +#include "code\modules\hydroponics\seedtypes\celery.dm" +#include "code\modules\hydroponics\seedtypes\cherries.dm" +#include "code\modules\hydroponics\seedtypes\chili.dm" +#include "code\modules\hydroponics\seedtypes\citrus.dm" +#include "code\modules\hydroponics\seedtypes\cocoa.dm" +#include "code\modules\hydroponics\seedtypes\corn.dm" +#include "code\modules\hydroponics\seedtypes\diona.dm" +#include "code\modules\hydroponics\seedtypes\durian.dm" +#include "code\modules\hydroponics\seedtypes\eggplant.dm" +#include "code\modules\hydroponics\seedtypes\flowers.dm" +#include "code\modules\hydroponics\seedtypes\gelthi.dm" +#include "code\modules\hydroponics\seedtypes\gnomes.dm" +#include "code\modules\hydroponics\seedtypes\grapes.dm" +#include "code\modules\hydroponics\seedtypes\grass.dm" +#include "code\modules\hydroponics\seedtypes\jurlmah.dm" +#include "code\modules\hydroponics\seedtypes\kudzu.dm" +#include "code\modules\hydroponics\seedtypes\lettuce.dm" +#include "code\modules\hydroponics\seedtypes\malanitear.dm" +#include "code\modules\hydroponics\seedtypes\mushrooms.dm" +#include "code\modules\hydroponics\seedtypes\nettles.dm" +#include "code\modules\hydroponics\seedtypes\nutmeg.dm" +#include "code\modules\hydroponics\seedtypes\onion.dm" +#include "code\modules\hydroponics\seedtypes\peanuts.dm" +#include "code\modules\hydroponics\seedtypes\pineapple.dm" +#include "code\modules\hydroponics\seedtypes\potato.dm" +#include "code\modules\hydroponics\seedtypes\pumpkin.dm" +#include "code\modules\hydroponics\seedtypes\rhubarb.dm" +#include "code\modules\hydroponics\seedtypes\rice.dm" +#include "code\modules\hydroponics\seedtypes\selemhand.dm" +#include "code\modules\hydroponics\seedtypes\soybean.dm" +#include "code\modules\hydroponics\seedtypes\sugarcane.dm" +#include "code\modules\hydroponics\seedtypes\surik.dm" +#include "code\modules\hydroponics\seedtypes\telriis.dm" +#include "code\modules\hydroponics\seedtypes\thaadra.dm" +#include "code\modules\hydroponics\seedtypes\tobacco.dm" +#include "code\modules\hydroponics\seedtypes\tomatoes.dm" +#include "code\modules\hydroponics\seedtypes\vale.dm" +#include "code\modules\hydroponics\seedtypes\vanilla.dm" +#include "code\modules\hydroponics\seedtypes\wabback.dm" +#include "code\modules\hydroponics\seedtypes\watermelon.dm" +#include "code\modules\hydroponics\seedtypes\weeds.dm" +#include "code\modules\hydroponics\seedtypes\wheat.dm" +#include "code\modules\hydroponics\seedtypes\whitebeets.dm" +#include "code\modules\hydroponics\seedtypes\wurmwoad.dm" +#include "code\modules\hydroponics\seedtypes\xeno.dm" +#include "code\modules\hydroponics\spreading\spreading.dm" +#include "code\modules\hydroponics\spreading\spreading_growth.dm" +#include "code\modules\hydroponics\spreading\spreading_response.dm" +#include "code\modules\hydroponics\trays\tray.dm" +#include "code\modules\hydroponics\trays\tray_process.dm" +#include "code\modules\hydroponics\trays\tray_reagents.dm" +#include "code\modules\hydroponics\trays\tray_soil.dm" +#include "code\modules\hydroponics\trays\tray_tools.dm" +#include "code\modules\hydroponics\trays\tray_update_icons.dm" +#include "code\modules\identification\identification.dm" +#include "code\modules\identification\item_procs.dm" +#include "code\modules\integrated_electronics\_defines.dm" +#include "code\modules\integrated_electronics\core\assemblies.dm" +#include "code\modules\integrated_electronics\core\detailer.dm" +#include "code\modules\integrated_electronics\core\helpers.dm" +#include "code\modules\integrated_electronics\core\integrated_circuit.dm" +#include "code\modules\integrated_electronics\core\pins.dm" +#include "code\modules\integrated_electronics\core\printer.dm" +#include "code\modules\integrated_electronics\core\tools.dm" +#include "code\modules\integrated_electronics\core\assemblies\clothing.dm" +#include "code\modules\integrated_electronics\core\assemblies\device.dm" +#include "code\modules\integrated_electronics\core\assemblies\generic.dm" +#include "code\modules\integrated_electronics\core\assemblies\implant.dm" +#include "code\modules\integrated_electronics\core\special_pins\boolean_pin.dm" +#include "code\modules\integrated_electronics\core\special_pins\char_pin.dm" +#include "code\modules\integrated_electronics\core\special_pins\color_pin.dm" +#include "code\modules\integrated_electronics\core\special_pins\dir_pin.dm" +#include "code\modules\integrated_electronics\core\special_pins\list_pin.dm" +#include "code\modules\integrated_electronics\core\special_pins\number_pin.dm" +#include "code\modules\integrated_electronics\core\special_pins\ref_pin.dm" +#include "code\modules\integrated_electronics\core\special_pins\string_pin.dm" +#include "code\modules\integrated_electronics\passive\passive.dm" +#include "code\modules\integrated_electronics\passive\power.dm" +#include "code\modules\integrated_electronics\subtypes\arithmetic.dm" +#include "code\modules\integrated_electronics\subtypes\built_in.dm" +#include "code\modules\integrated_electronics\subtypes\converters.dm" +#include "code\modules\integrated_electronics\subtypes\data_transfer.dm" +#include "code\modules\integrated_electronics\subtypes\input.dm" +#include "code\modules\integrated_electronics\subtypes\lists.dm" +#include "code\modules\integrated_electronics\subtypes\logic.dm" +#include "code\modules\integrated_electronics\subtypes\manipulation.dm" +#include "code\modules\integrated_electronics\subtypes\memory.dm" +#include "code\modules\integrated_electronics\subtypes\output.dm" +#include "code\modules\integrated_electronics\subtypes\power.dm" +#include "code\modules\integrated_electronics\subtypes\reagents.dm" +#include "code\modules\integrated_electronics\subtypes\smart.dm" +#include "code\modules\integrated_electronics\subtypes\time.dm" +#include "code\modules\integrated_electronics\subtypes\trig.dm" +#include "code\modules\integrated_electronics\~defines\~defines.dm" +#include "code\modules\library\lib_items.dm" +#include "code\modules\library\lib_machines.dm" +#include "code\modules\library\lib_readme.dm" +#include "code\modules\library\hardcode_library\_library.dm" +#include "code\modules\library\hardcode_library\fiction\APsychonaut.dm" +#include "code\modules\library\hardcode_library\fiction\battlefieldcommander.dm" +#include "code\modules\library\hardcode_library\fiction\PortedBooks.dm" +#include "code\modules\library\hardcode_library\fiction\schnayy.dm" +#include "code\modules\library\hardcode_library\non-fiction\PortedBooks.dm" +#include "code\modules\library\hardcode_library\reference\PortedBooks.dm" +#include "code\modules\library\hardcode_library\reference\Schnayy.dm" +#include "code\modules\library\hardcode_library\religious\PortedBooks.dm" +#include "code\modules\lighting\lighting_area.dm" +#include "code\modules\lighting\lighting_atom.dm" +#include "code\modules\lighting\lighting_corner.dm" +#include "code\modules\lighting\lighting_overlay.dm" +#include "code\modules\lighting\lighting_setup.dm" +#include "code\modules\lighting\lighting_source.dm" +#include "code\modules\lighting\lighting_turf.dm" +#include "code\modules\looking_glass\lg_area.dm" +#include "code\modules\looking_glass\lg_console.dm" +#include "code\modules\looking_glass\lg_imageholder.dm" +#include "code\modules\looking_glass\lg_turfs.dm" +#include "code\modules\lore_codex\codex.dm" +#include "code\modules\lore_codex\codex_tree.dm" +#include "code\modules\lore_codex\pages.dm" +#include "code\modules\lore_codex\legal_code_data\corporate_regulations.dm" +#include "code\modules\lore_codex\legal_code_data\main.dm" +#include "code\modules\lore_codex\legal_code_data\sif_law.dm" +#include "code\modules\lore_codex\legal_code_data\sop.dm" +#include "code\modules\lore_codex\lore_data\important_locations.dm" +#include "code\modules\lore_codex\lore_data\main.dm" +#include "code\modules\lore_codex\lore_data\orgs.dm" +#include "code\modules\lore_codex\lore_data\political_parties.dm" +#include "code\modules\lore_codex\lore_data\species.dm" +#include "code\modules\lore_codex\news_data\main.dm" +#include "code\modules\lore_codex\robutt_data\bybrand.dm" +#include "code\modules\lore_codex\robutt_data\main_robutts.dm" +#include "code\modules\lore_codex\robutt_data\more.dm" +#include "code\modules\maps\tg\dmm_suite.dm" +#include "code\modules\maps\tg\map_template.dm" +#include "code\modules\maps\tg\reader.dm" +#include "code\modules\materials\fifty_spawner.dm" +#include "code\modules\materials\fifty_spawner_mats.dm" +#include "code\modules\materials\material_synth.dm" +#include "code\modules\materials\materials\_materials.dm" +#include "code\modules\materials\materials\alien_alloy.dm" +#include "code\modules\materials\materials\cult.dm" +#include "code\modules\materials\materials\gems.dm" +#include "code\modules\materials\materials\glass.dm" +#include "code\modules\materials\materials\holographic.dm" +#include "code\modules\materials\materials\plastic.dm" +#include "code\modules\materials\materials\snow.dm" +#include "code\modules\materials\materials\stone.dm" +#include "code\modules\materials\materials\supermatter.dm" +#include "code\modules\materials\materials\metals\hull.dm" +#include "code\modules\materials\materials\metals\metals.dm" +#include "code\modules\materials\materials\metals\plasteel.dm" +#include "code\modules\materials\materials\metals\steel.dm" +#include "code\modules\materials\materials\organic\animal_products.dm" +#include "code\modules\materials\materials\organic\cloth.dm" +#include "code\modules\materials\materials\organic\leather.dm" +#include "code\modules\materials\materials\organic\resin.dm" +#include "code\modules\materials\materials\organic\wood.dm" +#include "code\modules\materials\sheets\_sheets.dm" +#include "code\modules\materials\sheets\gems.dm" +#include "code\modules\materials\sheets\glass.dm" +#include "code\modules\materials\sheets\plastic.dm" +#include "code\modules\materials\sheets\snow.dm" +#include "code\modules\materials\sheets\stone.dm" +#include "code\modules\materials\sheets\supermatter.dm" +#include "code\modules\materials\sheets\metals\hull.dm" +#include "code\modules\materials\sheets\metals\metal.dm" +#include "code\modules\materials\sheets\metals\rods.dm" +#include "code\modules\materials\sheets\organic\animal_products.dm" +#include "code\modules\materials\sheets\organic\resin.dm" +#include "code\modules\materials\sheets\organic\textiles.dm" +#include "code\modules\materials\sheets\organic\wood.dm" +#include "code\modules\materials\sheets\organic\tanning\hide.dm" +#include "code\modules\materials\sheets\organic\tanning\hide_hairless.dm" +#include "code\modules\materials\sheets\organic\tanning\leather_wet.dm" +#include "code\modules\materials\sheets\organic\tanning\tanning_rack.dm" +#include "code\modules\metric\activity.dm" +#include "code\modules\metric\count.dm" +#include "code\modules\metric\department.dm" +#include "code\modules\metric\metric.dm" +#include "code\modules\mining\abandonedcrates.dm" +#include "code\modules\mining\alloys.dm" +#include "code\modules\mining\fulton.dm" +#include "code\modules\mining\mine_items.dm" +#include "code\modules\mining\mine_outcrops.dm" +#include "code\modules\mining\mine_turfs.dm" +#include "code\modules\mining\mineral_effect.dm" +#include "code\modules\mining\ore.dm" +#include "code\modules\mining\ore_box.dm" +#include "code\modules\mining\ore_datum.dm" +#include "code\modules\mining\drilling\drill.dm" +#include "code\modules\mining\drilling\scanner.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" +#include "code\modules\mining\machinery\machine_unloading.dm" +#include "code\modules\mining\ore_redemption_machine\construction.dm" +#include "code\modules\mining\ore_redemption_machine\equipment_vendor.dm" +#include "code\modules\mining\ore_redemption_machine\mine_point_items.dm" +#include "code\modules\mining\ore_redemption_machine\survey_vendor.dm" +#include "code\modules\mob\animations.dm" +#include "code\modules\mob\death.dm" +#include "code\modules\mob\emote.dm" +#include "code\modules\mob\gender.dm" +#include "code\modules\mob\hear_say.dm" +#include "code\modules\mob\holder.dm" +#include "code\modules\mob\inventory.dm" +#include "code\modules\mob\login.dm" +#include "code\modules\mob\logout.dm" +#include "code\modules\mob\mob.dm" +#include "code\modules\mob\mob_defines.dm" +#include "code\modules\mob\mob_grab.dm" +#include "code\modules\mob\mob_grab_specials.dm" +#include "code\modules\mob\mob_helpers.dm" +#include "code\modules\mob\mob_movement.dm" +#include "code\modules\mob\mob_planes.dm" +#include "code\modules\mob\mob_transformation_simple.dm" +#include "code\modules\mob\say.dm" +#include "code\modules\mob\skillset.dm" +#include "code\modules\mob\transform_procs.dm" +#include "code\modules\mob\typing_indicator.dm" +#include "code\modules\mob\update_icons.dm" +#include "code\modules\mob\_modifiers\aura.dm" +#include "code\modules\mob\_modifiers\changeling.dm" +#include "code\modules\mob\_modifiers\cloning.dm" +#include "code\modules\mob\_modifiers\feysight.dm" +#include "code\modules\mob\_modifiers\fire.dm" +#include "code\modules\mob\_modifiers\medical.dm" +#include "code\modules\mob\_modifiers\modifiers.dm" +#include "code\modules\mob\_modifiers\modifiers_misc.dm" +#include "code\modules\mob\_modifiers\traits.dm" +#include "code\modules\mob\_modifiers\traits_phobias.dm" +#include "code\modules\mob\_modifiers\unholy.dm" +#include "code\modules\mob\dead\corpse.dm" +#include "code\modules\mob\dead\death.dm" +#include "code\modules\mob\dead\observer\login.dm" +#include "code\modules\mob\dead\observer\logout.dm" +#include "code\modules\mob\dead\observer\observer.dm" +#include "code\modules\mob\dead\observer\say.dm" +#include "code\modules\mob\freelook\chunk.dm" +#include "code\modules\mob\freelook\eye.dm" +#include "code\modules\mob\freelook\life.dm" +#include "code\modules\mob\freelook\update_triggers.dm" +#include "code\modules\mob\freelook\visualnet.dm" +#include "code\modules\mob\freelook\ai\cameranet.dm" +#include "code\modules\mob\freelook\ai\chunk.dm" +#include "code\modules\mob\freelook\ai\eye.dm" +#include "code\modules\mob\freelook\ai\update_triggers.dm" +#include "code\modules\mob\freelook\mask\chunk.dm" +#include "code\modules\mob\freelook\mask\cultnet.dm" +#include "code\modules\mob\freelook\mask\eye.dm" +#include "code\modules\mob\freelook\mask\update_triggers.dm" +#include "code\modules\mob\language\generic.dm" +#include "code\modules\mob\language\language.dm" +#include "code\modules\mob\language\monkey.dm" +#include "code\modules\mob\language\outsider.dm" +#include "code\modules\mob\language\station.dm" +#include "code\modules\mob\language\synthetic.dm" +#include "code\modules\mob\living\autohiss.dm" +#include "code\modules\mob\living\butchering.dm" +#include "code\modules\mob\living\damage_procs.dm" +#include "code\modules\mob\living\death.dm" +#include "code\modules\mob\living\default_language.dm" +#include "code\modules\mob\living\inventory.dm" +#include "code\modules\mob\living\life.dm" +#include "code\modules\mob\living\living.dm" +#include "code\modules\mob\living\living_defense.dm" +#include "code\modules\mob\living\living_defines.dm" +#include "code\modules\mob\living\living_movement.dm" +#include "code\modules\mob\living\living_powers.dm" +#include "code\modules\mob\living\login.dm" +#include "code\modules\mob\living\logout.dm" +#include "code\modules\mob\living\organs.dm" +#include "code\modules\mob\living\riding.dm" +#include "code\modules\mob\living\say.dm" +#include "code\modules\mob\living\status_indicators.dm" +#include "code\modules\mob\living\bot\bot.dm" +#include "code\modules\mob\living\bot\cleanbot.dm" +#include "code\modules\mob\living\bot\ed209bot.dm" +#include "code\modules\mob\living\bot\edCLNbot.dm" +#include "code\modules\mob\living\bot\farmbot.dm" +#include "code\modules\mob\living\bot\floorbot.dm" +#include "code\modules\mob\living\bot\medbot.dm" +#include "code\modules\mob\living\bot\mulebot.dm" +#include "code\modules\mob\living\bot\secbot.dm" +#include "code\modules\mob\living\bot\SLed209bot.dm" +#include "code\modules\mob\living\carbon\breathe.dm" +#include "code\modules\mob\living\carbon\carbon.dm" +#include "code\modules\mob\living\carbon\carbon_defense.dm" +#include "code\modules\mob\living\carbon\carbon_defines.dm" +#include "code\modules\mob\living\carbon\carbon_powers.dm" +#include "code\modules\mob\living\carbon\give.dm" +#include "code\modules\mob\living\carbon\resist.dm" +#include "code\modules\mob\living\carbon\shock.dm" +#include "code\modules\mob\living\carbon\taste.dm" +#include "code\modules\mob\living\carbon\viruses.dm" +#include "code\modules\mob\living\carbon\alien\alien.dm" +#include "code\modules\mob\living\carbon\alien\alien_attacks.dm" +#include "code\modules\mob\living\carbon\alien\alien_damage.dm" +#include "code\modules\mob\living\carbon\alien\death.dm" +#include "code\modules\mob\living\carbon\alien\emote.dm" +#include "code\modules\mob\living\carbon\alien\life.dm" +#include "code\modules\mob\living\carbon\alien\progression.dm" +#include "code\modules\mob\living\carbon\alien\update_icons.dm" +#include "code\modules\mob\living\carbon\alien\diona\diona.dm" +#include "code\modules\mob\living\carbon\alien\diona\diona_attacks.dm" +#include "code\modules\mob\living\carbon\alien\diona\diona_powers.dm" +#include "code\modules\mob\living\carbon\alien\diona\life.dm" +#include "code\modules\mob\living\carbon\alien\diona\progression.dm" +#include "code\modules\mob\living\carbon\alien\diona\say_understands.dm" +#include "code\modules\mob\living\carbon\alien\diona\update_icons.dm" +#include "code\modules\mob\living\carbon\alien\larva\larva.dm" +#include "code\modules\mob\living\carbon\alien\larva\life.dm" +#include "code\modules\mob\living\carbon\alien\larva\progression.dm" +#include "code\modules\mob\living\carbon\brain\brain.dm" +#include "code\modules\mob\living\carbon\brain\death.dm" +#include "code\modules\mob\living\carbon\brain\emote.dm" +#include "code\modules\mob\living\carbon\brain\life.dm" +#include "code\modules\mob\living\carbon\brain\login.dm" +#include "code\modules\mob\living\carbon\brain\MMI.dm" +#include "code\modules\mob\living\carbon\brain\say.dm" +#include "code\modules\mob\living\carbon\human\appearance.dm" +#include "code\modules\mob\living\carbon\human\death.dm" +#include "code\modules\mob\living\carbon\human\emote.dm" +#include "code\modules\mob\living\carbon\human\examine.dm" +#include "code\modules\mob\living\carbon\human\gradient.dm" +#include "code\modules\mob\living\carbon\human\human.dm" +#include "code\modules\mob\living\carbon\human\human_attackhand.dm" +#include "code\modules\mob\living\carbon\human\human_damage.dm" +#include "code\modules\mob\living\carbon\human\human_defense.dm" +#include "code\modules\mob\living\carbon\human\human_defines.dm" +#include "code\modules\mob\living\carbon\human\human_helpers.dm" +#include "code\modules\mob\living\carbon\human\human_modular_limbs.dm" +#include "code\modules\mob\living\carbon\human\human_movement.dm" +#include "code\modules\mob\living\carbon\human\human_organs.dm" +#include "code\modules\mob\living\carbon\human\human_powers.dm" +#include "code\modules\mob\living\carbon\human\human_resist.dm" +#include "code\modules\mob\living\carbon\human\human_species.dm" +#include "code\modules\mob\living\carbon\human\inventory.dm" +#include "code\modules\mob\living\carbon\human\life.dm" +#include "code\modules\mob\living\carbon\human\login.dm" +#include "code\modules\mob\living\carbon\human\logout.dm" +#include "code\modules\mob\living\carbon\human\MedicalSideEffects.dm" +#include "code\modules\mob\living\carbon\human\npcs.dm" +#include "code\modules\mob\living\carbon\human\say.dm" +#include "code\modules\mob\living\carbon\human\stripping.dm" +#include "code\modules\mob\living\carbon\human\unarmed_attack.dm" +#include "code\modules\mob\living\carbon\human\update_icons.dm" +#include "code\modules\mob\living\carbon\human\ai_controlled\ai_controlled.dm" +#include "code\modules\mob\living\carbon\human\descriptors\_descriptors.dm" +#include "code\modules\mob\living\carbon\human\descriptors\descriptors_generic.dm" +#include "code\modules\mob\living\carbon\human\descriptors\descriptors_skrell.dm" +#include "code\modules\mob\living\carbon\human\descriptors\descriptors_vox.dm" +#include "code\modules\mob\living\carbon\human\species\species.dm" +#include "code\modules\mob\living\carbon\human\species\species_attack.dm" +#include "code\modules\mob\living\carbon\human\species\species_getters.dm" +#include "code\modules\mob\living\carbon\human\species\species_helpers.dm" +#include "code\modules\mob\living\carbon\human\species\species_hud.dm" +#include "code\modules\mob\living\carbon\human\species\species_shapeshift.dm" +#include "code\modules\mob\living\carbon\human\species\outsider\event.dm" +#include "code\modules\mob\living\carbon\human\species\outsider\replicant.dm" +#include "code\modules\mob\living\carbon\human\species\outsider\shadow.dm" +#include "code\modules\mob\living\carbon\human\species\outsider\skeleton.dm" +#include "code\modules\mob\living\carbon\human\species\outsider\vox.dm" +#include "code\modules\mob\living\carbon\human\species\station\golem.dm" +#include "code\modules\mob\living\carbon\human\species\station\human_subspecies.dm" +#include "code\modules\mob\living\carbon\human\species\station\monkey.dm" +#include "code\modules\mob\living\carbon\human\species\station\prometheans.dm" +#include "code\modules\mob\living\carbon\human\species\station\station.dm" +#include "code\modules\mob\living\carbon\human\species\station\teshari.dm" +#include "code\modules\mob\living\carbon\human\species\virtual_reality\avatar.dm" +#include "code\modules\mob\living\carbon\human\species\virtual_reality\opaque_form.dm" +#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_powers.dm" +#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_species.dm" +#include "code\modules\mob\living\carbon\human\species\xenomorphs\xenomorphs.dm" +#include "code\modules\mob\living\silicon\death.dm" +#include "code\modules\mob\living\silicon\emote.dm" +#include "code\modules\mob\living\silicon\laws.dm" +#include "code\modules\mob\living\silicon\login.dm" +#include "code\modules\mob\living\silicon\say.dm" +#include "code\modules\mob\living\silicon\silicon.dm" +#include "code\modules\mob\living\silicon\subystems.dm" +#include "code\modules\mob\living\silicon\ai\ai.dm" +#include "code\modules\mob\living\silicon\ai\ai_movement.dm" +#include "code\modules\mob\living\silicon\ai\ai_remote_control.dm" +#include "code\modules\mob\living\silicon\ai\death.dm" +#include "code\modules\mob\living\silicon\ai\examine.dm" +#include "code\modules\mob\living\silicon\ai\icons.dm" +#include "code\modules\mob\living\silicon\ai\latejoin.dm" +#include "code\modules\mob\living\silicon\ai\laws.dm" +#include "code\modules\mob\living\silicon\ai\life.dm" +#include "code\modules\mob\living\silicon\ai\login.dm" +#include "code\modules\mob\living\silicon\ai\logout.dm" +#include "code\modules\mob\living\silicon\ai\malf.dm" +#include "code\modules\mob\living\silicon\ai\multicam.dm" +#include "code\modules\mob\living\silicon\decoy\death.dm" +#include "code\modules\mob\living\silicon\decoy\decoy.dm" +#include "code\modules\mob\living\silicon\decoy\life.dm" +#include "code\modules\mob\living\silicon\pai\admin.dm" +#include "code\modules\mob\living\silicon\pai\death.dm" +#include "code\modules\mob\living\silicon\pai\examine.dm" +#include "code\modules\mob\living\silicon\pai\life.dm" +#include "code\modules\mob\living\silicon\pai\pai.dm" +#include "code\modules\mob\living\silicon\pai\personality.dm" +#include "code\modules\mob\living\silicon\pai\recruit.dm" +#include "code\modules\mob\living\silicon\pai\say.dm" +#include "code\modules\mob\living\silicon\pai\software.dm" +#include "code\modules\mob\living\silicon\pai\software_modules.dm" +#include "code\modules\mob\living\silicon\robot\analyzer.dm" +#include "code\modules\mob\living\silicon\robot\component.dm" +#include "code\modules\mob\living\silicon\robot\custom_sprites.dm" +#include "code\modules\mob\living\silicon\robot\death.dm" +#include "code\modules\mob\living\silicon\robot\emote.dm" +#include "code\modules\mob\living\silicon\robot\examine.dm" +#include "code\modules\mob\living\silicon\robot\inventory.dm" +#include "code\modules\mob\living\silicon\robot\laws.dm" +#include "code\modules\mob\living\silicon\robot\life.dm" +#include "code\modules\mob\living\silicon\robot\login.dm" +#include "code\modules\mob\living\silicon\robot\photos.dm" +#include "code\modules\mob\living\silicon\robot\robot.dm" +#include "code\modules\mob\living\silicon\robot\robot_damage.dm" +#include "code\modules\mob\living\silicon\robot\robot_items.dm" +#include "code\modules\mob\living\silicon\robot\robot_movement.dm" +#include "code\modules\mob\living\silicon\robot\robot_remote_control.dm" +#include "code\modules\mob\living\silicon\robot\drone\drone.dm" +#include "code\modules\mob\living\silicon\robot\drone\drone_abilities.dm" +#include "code\modules\mob\living\silicon\robot\drone\drone_console.dm" +#include "code\modules\mob\living\silicon\robot\drone\drone_damage.dm" +#include "code\modules\mob\living\silicon\robot\drone\drone_items.dm" +#include "code\modules\mob\living\silicon\robot\drone\drone_manufacturer.dm" +#include "code\modules\mob\living\silicon\robot\drone\drone_say.dm" +#include "code\modules\mob\living\silicon\robot\drone\swarm.dm" +#include "code\modules\mob\living\silicon\robot\drone\swarm_abilities.dm" +#include "code\modules\mob\living\silicon\robot\drone\swarm_items.dm" +#include "code\modules\mob\living\silicon\robot\robot_modules\event.dm" +#include "code\modules\mob\living\silicon\robot\robot_modules\station.dm" +#include "code\modules\mob\living\silicon\robot\robot_modules\swarm.dm" +#include "code\modules\mob\living\silicon\robot\robot_modules\syndicate.dm" +#include "code\modules\mob\living\silicon\robot\subtypes\gravekeeper.dm" +#include "code\modules\mob\living\silicon\robot\subtypes\lost_drone.dm" +#include "code\modules\mob\living\silicon\robot\subtypes\syndicate.dm" +#include "code\modules\mob\living\silicon\robot\subtypes\thinktank\_thinktank.dm" +#include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_icon.dm" +#include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_interactions.dm" +#include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_module.dm" +#include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_storage.dm" +#include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_subtypes.dm" +#include "code\modules\mob\living\simple_mob\appearance.dm" +#include "code\modules\mob\living\simple_mob\butchering.dm" +#include "code\modules\mob\living\simple_mob\combat.dm" +#include "code\modules\mob\living\simple_mob\defense.dm" +#include "code\modules\mob\living\simple_mob\hands.dm" +#include "code\modules\mob\living\simple_mob\harvesting.dm" +#include "code\modules\mob\living\simple_mob\life.dm" +#include "code\modules\mob\living\simple_mob\on_click.dm" +#include "code\modules\mob\living\simple_mob\simple_hud.dm" +#include "code\modules\mob\living\simple_mob\simple_mob.dm" +#include "code\modules\mob\living\simple_mob\taming.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\animal.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer_captive.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer_powers.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\farm animals\chicken.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\farm animals\cow.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\farm animals\goat.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\_giant_spider.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\carrier.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\electric.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\frost.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\hunter.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\lurker.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\nurse.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\pepper.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\phorogenic.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\thermic.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\tunneler.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\webslinger.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\crab.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\fish.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\lizard.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\misc.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\mouse.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\passive.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\penguin.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\possum.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\bird.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\cat.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\dog.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\karik.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\parrot.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\diyaab.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\duck.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\frostfly.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\glitterfly.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\grafadreka.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\grafadreka_ai.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\grafadreka_harness.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\grafadreka_trained.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\hare.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\hooligan_crab.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\kururak.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\leech.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\moth.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\pillbug.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\racoon.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\savik.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\shantak.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\sif.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\siffet.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\space\alien.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\space\bats.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\space\bear.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\space\carp.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\space\goose.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\space\space.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\space\worm.dm" +#include "code\modules\mob\living\simple_mob\subtypes\blob\blob.dm" +#include "code\modules\mob\living\simple_mob\subtypes\blob\spore.dm" +#include "code\modules\mob\living\simple_mob\subtypes\humanoid\clown.dm" +#include "code\modules\mob\living\simple_mob\subtypes\humanoid\humanoid.dm" +#include "code\modules\mob\living\simple_mob\subtypes\humanoid\pirates.dm" +#include "code\modules\mob\living\simple_mob\subtypes\humanoid\russian.dm" +#include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs.dm" +#include "code\modules\mob\living\simple_mob\subtypes\illusion\illusion.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\golem.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mechanical.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\viscerator.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\drones\combat_drone.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\drones\mining_drone.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\hivebot.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\ranged_damage.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\support.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\tank.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\adv_dark_gygax.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\combat_mecha.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\durand.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\gygax.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\hoverpod.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\marauder.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\mecha.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\odysseus.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\phazon.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\ripley.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\ward\monitor_ward.dm" +#include "code\modules\mob\living\simple_mob\subtypes\mechanical\ward\ward.dm" +#include "code\modules\mob\living\simple_mob\subtypes\occult\creature.dm" +#include "code\modules\mob\living\simple_mob\subtypes\occult\faithless.dm" +#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\_construct.dm" +#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\artificer.dm" +#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\harvester.dm" +#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\juggernaut.dm" +#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\shade.dm" +#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\wraith.dm" +#include "code\modules\mob\living\simple_mob\subtypes\plant\tomato.dm" +#include "code\modules\mob\living\simple_mob\subtypes\plant\tree.dm" +#include "code\modules\mob\living\simple_mob\subtypes\slime\slime.dm" +#include "code\modules\mob\living\simple_mob\subtypes\slime\feral\feral.dm" +#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\combat.dm" +#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\consumption.dm" +#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\defense.dm" +#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\discipline.dm" +#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\subtypes.dm" +#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\xenobio.dm" +#include "code\modules\mob\living\voice\voice.dm" +#include "code\modules\mob\new_player\login.dm" +#include "code\modules\mob\new_player\logout.dm" +#include "code\modules\mob\new_player\new_player.dm" +#include "code\modules\mob\new_player\news.dm" +#include "code\modules\mob\new_player\poll.dm" +#include "code\modules\mob\new_player\preferences_setup.dm" +#include "code\modules\mob\new_player\skill.dm" +#include "code\modules\mob\new_player\sprite_accessories.dm" +#include "code\modules\mob\new_player\sprite_accessories_ear.dm" +#include "code\modules\mob\new_player\sprite_accessories_extra.dm" +#include "code\modules\mob\new_player\sprite_accessories_tail.dm" +#include "code\modules\mob\new_player\sprite_accessories_taur.dm" +#include "code\modules\mob\new_player\sprite_accessories_wing.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" +#include "code\modules\modular_computers\computers\modular_computer\hardware.dm" +#include "code\modules\modular_computers\computers\modular_computer\interaction.dm" +#include "code\modules\modular_computers\computers\modular_computer\power.dm" +#include "code\modules\modular_computers\computers\modular_computer\ui.dm" +#include "code\modules\modular_computers\computers\modular_computer\variables.dm" +#include "code\modules\modular_computers\computers\subtypes\dev_console.dm" +#include "code\modules\modular_computers\computers\subtypes\dev_laptop.dm" +#include "code\modules\modular_computers\computers\subtypes\dev_tablet.dm" +#include "code\modules\modular_computers\computers\subtypes\dev_telescreen.dm" +#include "code\modules\modular_computers\computers\subtypes\preset_console.dm" +#include "code\modules\modular_computers\computers\subtypes\preset_laptop.dm" +#include "code\modules\modular_computers\computers\subtypes\preset_tablet.dm" +#include "code\modules\modular_computers\computers\subtypes\preset_telescreen.dm" +#include "code\modules\modular_computers\file_system\computer_file.dm" +#include "code\modules\modular_computers\file_system\data.dm" +#include "code\modules\modular_computers\file_system\news_article.dm" +#include "code\modules\modular_computers\file_system\program.dm" +#include "code\modules\modular_computers\file_system\program_events.dm" +#include "code\modules\modular_computers\file_system\programs\antagonist\access_decrypter.dm" +#include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm" +#include "code\modules\modular_computers\file_system\programs\antagonist\hacked_camera.dm" +#include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm" +#include "code\modules\modular_computers\file_system\programs\command\card.dm" +#include "code\modules\modular_computers\file_system\programs\command\comm.dm" +#include "code\modules\modular_computers\file_system\programs\engineering\alarm_monitor.dm" +#include "code\modules\modular_computers\file_system\programs\engineering\atmos_control.dm" +#include "code\modules\modular_computers\file_system\programs\engineering\power_monitor.dm" +#include "code\modules\modular_computers\file_system\programs\engineering\rcon_console.dm" +#include "code\modules\modular_computers\file_system\programs\engineering\shutoff_monitor.dm" +#include "code\modules\modular_computers\file_system\programs\engineering\supermatter_monitor.dm" +#include "code\modules\modular_computers\file_system\programs\generic\camera.dm" +#include "code\modules\modular_computers\file_system\programs\generic\configurator.dm" +#include "code\modules\modular_computers\file_system\programs\generic\email_client.dm" +#include "code\modules\modular_computers\file_system\programs\generic\file_browser.dm" +#include "code\modules\modular_computers\file_system\programs\generic\game.dm" +#include "code\modules\modular_computers\file_system\programs\generic\news_browser.dm" +#include "code\modules\modular_computers\file_system\programs\generic\ntdownloader.dm" +#include "code\modules\modular_computers\file_system\programs\generic\ntnrc_client.dm" +#include "code\modules\modular_computers\file_system\programs\generic\nttransfer.dm" +#include "code\modules\modular_computers\file_system\programs\generic\uav.dm" +#include "code\modules\modular_computers\file_system\programs\generic\wordprocessor.dm" +#include "code\modules\modular_computers\file_system\programs\medical\suit_sensors.dm" +#include "code\modules\modular_computers\file_system\programs\research\email_administration.dm" +#include "code\modules\modular_computers\file_system\programs\research\ntmonitor.dm" +#include "code\modules\modular_computers\file_system\programs\security\alarm_monitor.dm" +#include "code\modules\modular_computers\file_system\programs\security\digitalwarrant.dm" +#include "code\modules\modular_computers\file_system\programs\ships\navigation.dm" +#include "code\modules\modular_computers\hardware\_hardware.dm" +#include "code\modules\modular_computers\hardware\battery_module.dm" +#include "code\modules\modular_computers\hardware\card_slot.dm" +#include "code\modules\modular_computers\hardware\hard_drive.dm" +#include "code\modules\modular_computers\hardware\nano_printer.dm" +#include "code\modules\modular_computers\hardware\network_card.dm" +#include "code\modules\modular_computers\hardware\portable_hard_drive.dm" +#include "code\modules\modular_computers\hardware\processor_unit.dm" +#include "code\modules\modular_computers\hardware\tesla_link.dm" +#include "code\modules\modular_computers\NTNet\NTNet.dm" +#include "code\modules\modular_computers\NTNet\NTNet_relay.dm" +#include "code\modules\modular_computers\NTNet\emails\email_account.dm" +#include "code\modules\modular_computers\NTNet\emails\email_message.dm" +#include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm" +#include "code\modules\multi-tile\multi-tile.dm" +#include "code\modules\multiz\_stubs.dm" +#include "code\modules\multiz\basic.dm" +#include "code\modules\multiz\hoist.dm" +#include "code\modules\multiz\ladders.dm" +#include "code\modules\multiz\movement.dm" +#include "code\modules\multiz\pipes.dm" +#include "code\modules\multiz\stairs.dm" +#include "code\modules\multiz\turf.dm" +#include "code\modules\multiz\zshadow.dm" +#include "code\modules\nano\nanoexternal.dm" +#include "code\modules\nano\nanomanager.dm" +#include "code\modules\nano\nanomapgen.dm" +#include "code\modules\nano\nanoui.dm" +#include "code\modules\nano\interaction\admin.dm" +#include "code\modules\nano\interaction\base.dm" +#include "code\modules\nano\interaction\conscious.dm" +#include "code\modules\nano\interaction\contained.dm" +#include "code\modules\nano\interaction\default.dm" +#include "code\modules\nano\interaction\interactive.dm" +#include "code\modules\nano\interaction\inventory.dm" +#include "code\modules\nano\interaction\inventory_deep.dm" +#include "code\modules\nano\interaction\outside.dm" +#include "code\modules\nano\interaction\physical.dm" +#include "code\modules\nano\interaction\remote.dm" +#include "code\modules\nano\interaction\self.dm" +#include "code\modules\nano\interaction\zlevel.dm" +#include "code\modules\nano\modules\nano_module.dm" +#include "code\modules\news\news_init.dm" +#include "code\modules\news\newspaper.dm" +#include "code\modules\news\newspaper_layout.dm" +#include "code\modules\organs\blood.dm" +#include "code\modules\organs\misc.dm" +#include "code\modules\organs\organ.dm" +#include "code\modules\organs\organ_external.dm" +#include "code\modules\organs\organ_icon.dm" +#include "code\modules\organs\organ_stump.dm" +#include "code\modules\organs\pain.dm" +#include "code\modules\organs\robolimbs.dm" +#include "code\modules\organs\robolimbs_custom.dm" +#include "code\modules\organs\wound.dm" +#include "code\modules\organs\internal\_organ_internal.dm" +#include "code\modules\organs\internal\appendix.dm" +#include "code\modules\organs\internal\augment.dm" +#include "code\modules\organs\internal\brain.dm" +#include "code\modules\organs\internal\eyes.dm" +#include "code\modules\organs\internal\heart.dm" +#include "code\modules\organs\internal\intestine.dm" +#include "code\modules\organs\internal\kidneys.dm" +#include "code\modules\organs\internal\liver.dm" +#include "code\modules\organs\internal\lungs.dm" +#include "code\modules\organs\internal\spleen.dm" +#include "code\modules\organs\internal\stomach.dm" +#include "code\modules\organs\internal\voicebox.dm" +#include "code\modules\organs\internal\augment\armmounted.dm" +#include "code\modules\organs\internal\augment\bio.dm" +#include "code\modules\organs\internal\robotic\diagnostic.dm" +#include "code\modules\organs\internal\robotic\heatsink.dm" +#include "code\modules\organs\internal\robotic\robotic.dm" +#include "code\modules\organs\subtypes\diona.dm" +#include "code\modules\organs\subtypes\indestructible.dm" +#include "code\modules\organs\subtypes\machine.dm" +#include "code\modules\organs\subtypes\replicant.dm" +#include "code\modules\organs\subtypes\skrell.dm" +#include "code\modules\organs\subtypes\slime.dm" +#include "code\modules\organs\subtypes\standard.dm" +#include "code\modules\organs\subtypes\tajaran.dm" +#include "code\modules\organs\subtypes\teshari.dm" +#include "code\modules\organs\subtypes\unathi.dm" +#include "code\modules\organs\subtypes\unbreakable.dm" +#include "code\modules\organs\subtypes\unseverable.dm" +#include "code\modules\organs\subtypes\vox.dm" +#include "code\modules\organs\subtypes\xenos.dm" +#include "code\modules\overmap\helpers.dm" +#include "code\modules\overmap\overmap_object.dm" +#include "code\modules\overmap\overmap_planet.dm" +#include "code\modules\overmap\overmap_shuttle.dm" +#include "code\modules\overmap\sectors.dm" +#include "code\modules\overmap\spacetravel.dm" +#include "code\modules\overmap\turfs.dm" +#include "code\modules\overmap\events\event_handler.dm" +#include "code\modules\overmap\events\generation.dm" +#include "code\modules\overmap\events\overmap_event.dm" +#include "code\modules\overmap\ships\landable.dm" +#include "code\modules\overmap\ships\ship.dm" +#include "code\modules\overmap\ships\computers\computer_shims.dm" +#include "code\modules\overmap\ships\computers\engine_control.dm" +#include "code\modules\overmap\ships\computers\helm.dm" +#include "code\modules\overmap\ships\computers\sensors.dm" +#include "code\modules\overmap\ships\computers\ship.dm" +#include "code\modules\overmap\ships\computers\shuttle.dm" +#include "code\modules\overmap\ships\engines\engine.dm" +#include "code\modules\overmap\ships\engines\gas_thruster.dm" +#include "code\modules\overmap\ships\engines\ion_thruster.dm" +#include "code\modules\paperwork\adminpaper.dm" +#include "code\modules\paperwork\carbonpaper.dm" +#include "code\modules\paperwork\clipboard.dm" +#include "code\modules\paperwork\faxmachine.dm" +#include "code\modules\paperwork\filingcabinet.dm" +#include "code\modules\paperwork\folders.dm" +#include "code\modules\paperwork\handlabeler.dm" +#include "code\modules\paperwork\paper.dm" +#include "code\modules\paperwork\paper_bundle.dm" +#include "code\modules\paperwork\paper_sticky.dm" +#include "code\modules\paperwork\paperbin.dm" +#include "code\modules\paperwork\paperplane.dm" +#include "code\modules\paperwork\papershredder.dm" +#include "code\modules\paperwork\pen.dm" +#include "code\modules\paperwork\photocopier.dm" +#include "code\modules\paperwork\photography.dm" +#include "code\modules\paperwork\silicon_photography.dm" +#include "code\modules\paperwork\stamps.dm" +#include "code\modules\pda\ai.dm" +#include "code\modules\pda\app.dm" +#include "code\modules\pda\cart.dm" +#include "code\modules\pda\cart_apps.dm" +#include "code\modules\pda\core_apps.dm" +#include "code\modules\pda\messenger.dm" +#include "code\modules\pda\messenger_plugins.dm" +#include "code\modules\pda\pda.dm" +#include "code\modules\pda\pda_subtypes.dm" +#include "code\modules\pda\pda_tgui.dm" +#include "code\modules\pda\radio.dm" +#include "code\modules\pda\utilities.dm" +#include "code\modules\persistence\filth.dm" +#include "code\modules\persistence\graffiti.dm" +#include "code\modules\persistence\noticeboard.dm" +#include "code\modules\persistence\datum\persistence_datum.dm" +#include "code\modules\persistence\effects\filth.dm" +#include "code\modules\persistence\effects\graffiti.dm" +#include "code\modules\persistence\effects\paper.dm" +#include "code\modules\persistence\effects\paper_sticky.dm" +#include "code\modules\persistence\effects\trash.dm" +#include "code\modules\persistence\storage\smartfridge.dm" +#include "code\modules\persistence\storage\storage.dm" +#include "code\modules\planet\planet.dm" +#include "code\modules\planet\sif.dm" +#include "code\modules\planet\time.dm" +#include "code\modules\planet\weather.dm" +#include "code\modules\power\apc.dm" +#include "code\modules\power\batteryrack.dm" +#include "code\modules\power\breaker_box.dm" +#include "code\modules\power\cable.dm" +#include "code\modules\power\cable_ender.dm" +#include "code\modules\power\cable_heavyduty.dm" +#include "code\modules\power\cell.dm" +#include "code\modules\power\debug_items.dm" +#include "code\modules\power\generator.dm" +#include "code\modules\power\gravitygenerator.dm" +#include "code\modules\power\grid_checker.dm" +#include "code\modules\power\lighting.dm" +#include "code\modules\power\port_gen.dm" +#include "code\modules\power\power.dm" +#include "code\modules\power\powernet.dm" +#include "code\modules\power\smes.dm" +#include "code\modules\power\smes_construction.dm" +#include "code\modules\power\solar.dm" +#include "code\modules\power\terminal.dm" +#include "code\modules\power\tracker.dm" +#include "code\modules\power\turbine.dm" +#include "code\modules\power\antimatter\containment_jar.dm" +#include "code\modules\power\antimatter\control.dm" +#include "code\modules\power\antimatter\shielding.dm" +#include "code\modules\power\cells\device_cells.dm" +#include "code\modules\power\cells\esoteric_cells.dm" +#include "code\modules\power\cells\power_cells.dm" +#include "code\modules\power\fusion\_setup.dm" +#include "code\modules\power\fusion\fusion_circuits.dm" +#include "code\modules\power\fusion\fusion_particle_catcher.dm" +#include "code\modules\power\fusion\fusion_reactions.dm" +#include "code\modules\power\fusion\magpower.dm" +#include "code\modules\power\fusion\core\_core.dm" +#include "code\modules\power\fusion\core\core_control.dm" +#include "code\modules\power\fusion\core\core_field.dm" +#include "code\modules\power\fusion\fuel_assembly\fuel_assembly.dm" +#include "code\modules\power\fusion\fuel_assembly\fuel_compressor.dm" +#include "code\modules\power\fusion\fuel_assembly\fuel_control.dm" +#include "code\modules\power\fusion\fuel_assembly\fuel_injector.dm" +#include "code\modules\power\fusion\gyrotron\gyrotron.dm" +#include "code\modules\power\fusion\gyrotron\gyrotron_control.dm" +#include "code\modules\power\sensors\powernet_sensor.dm" +#include "code\modules\power\sensors\sensor_monitoring.dm" +#include "code\modules\power\singularity\act.dm" +#include "code\modules\power\singularity\collector.dm" +#include "code\modules\power\singularity\containment_field.dm" +#include "code\modules\power\singularity\emitter.dm" +#include "code\modules\power\singularity\field_generator.dm" +#include "code\modules\power\singularity\generator.dm" +#include "code\modules\power\singularity\investigate.dm" +#include "code\modules\power\singularity\singularity.dm" +#include "code\modules\power\singularity\particle_accelerator\particle.dm" +#include "code\modules\power\singularity\particle_accelerator\particle_accelerator.dm" +#include "code\modules\power\singularity\particle_accelerator\particle_chamber.dm" +#include "code\modules\power\singularity\particle_accelerator\particle_control.dm" +#include "code\modules\power\singularity\particle_accelerator\particle_emitter.dm" +#include "code\modules\power\singularity\particle_accelerator\particle_power.dm" +#include "code\modules\power\singularity\particle_accelerator\particle_smasher.dm" +#include "code\modules\power\supermatter\setup_supermatter.dm" +#include "code\modules\power\supermatter\supermatter.dm" +#include "code\modules\power\tesla\coil.dm" +#include "code\modules\power\tesla\energy_ball.dm" +#include "code\modules\power\tesla\generator.dm" +#include "code\modules\power\tesla\telsa_construction.dm" +#include "code\modules\power\tesla\tesla_act.dm" +#include "code\modules\projectiles\ammunition.dm" +#include "code\modules\projectiles\broken.dm" +#include "code\modules\projectiles\dnalocking.dm" +#include "code\modules\projectiles\gun.dm" +#include "code\modules\projectiles\projectile.dm" +#include "code\modules\projectiles\ammunition\magazines.dm" +#include "code\modules\projectiles\ammunition\magnetic.dm" +#include "code\modules\projectiles\ammunition\rounds.dm" +#include "code\modules\projectiles\ammunition\smartmag.dm" +#include "code\modules\projectiles\brokenguns\energy.dm" +#include "code\modules\projectiles\brokenguns\launcher.dm" +#include "code\modules\projectiles\brokenguns\magnetic.dm" +#include "code\modules\projectiles\brokenguns\projectile.dm" +#include "code\modules\projectiles\guns\energy.dm" +#include "code\modules\projectiles\guns\launcher.dm" +#include "code\modules\projectiles\guns\magic.dm" +#include "code\modules\projectiles\guns\modular_guns.dm" +#include "code\modules\projectiles\guns\projectile.dm" +#include "code\modules\projectiles\guns\vox.dm" +#include "code\modules\projectiles\guns\energy\hooklauncher.dm" +#include "code\modules\projectiles\guns\energy\laser.dm" +#include "code\modules\projectiles\guns\energy\nuclear.dm" +#include "code\modules\projectiles\guns\energy\phase.dm" +#include "code\modules\projectiles\guns\energy\pulse.dm" +#include "code\modules\projectiles\guns\energy\special.dm" +#include "code\modules\projectiles\guns\energy\stun.dm" +#include "code\modules\projectiles\guns\energy\temperature.dm" +#include "code\modules\projectiles\guns\launcher\bows.dm" +#include "code\modules\projectiles\guns\launcher\crossbow.dm" +#include "code\modules\projectiles\guns\launcher\grenade_launcher.dm" +#include "code\modules\projectiles\guns\launcher\pneumatic.dm" +#include "code\modules\projectiles\guns\launcher\rocket.dm" +#include "code\modules\projectiles\guns\launcher\syringe_gun.dm" +#include "code\modules\projectiles\guns\magic\fireball.dm" +#include "code\modules\projectiles\guns\magnetic\bore.dm" +#include "code\modules\projectiles\guns\magnetic\gasthrower.dm" +#include "code\modules\projectiles\guns\magnetic\magnetic.dm" +#include "code\modules\projectiles\guns\magnetic\magnetic_construction.dm" +#include "code\modules\projectiles\guns\magnetic\magnetic_railgun.dm" +#include "code\modules\projectiles\guns\projectile\automatic.dm" +#include "code\modules\projectiles\guns\projectile\boltaction.dm" +#include "code\modules\projectiles\guns\projectile\caseless.dm" +#include "code\modules\projectiles\guns\projectile\contender.dm" +#include "code\modules\projectiles\guns\projectile\dartgun.dm" +#include "code\modules\projectiles\guns\projectile\pistol.dm" +#include "code\modules\projectiles\guns\projectile\revolver.dm" +#include "code\modules\projectiles\guns\projectile\semiauto.dm" +#include "code\modules\projectiles\guns\projectile\shotgun.dm" +#include "code\modules\projectiles\guns\projectile\sniper.dm" +#include "code\modules\projectiles\guns\projectile\toy.dm" +#include "code\modules\projectiles\guns\projectile\sniper\collapsible_sniper.dm" +#include "code\modules\projectiles\projectile\arc.dm" +#include "code\modules\projectiles\projectile\beams.dm" +#include "code\modules\projectiles\projectile\blob.dm" +#include "code\modules\projectiles\projectile\bullets.dm" +#include "code\modules\projectiles\projectile\change.dm" +#include "code\modules\projectiles\projectile\energy.dm" +#include "code\modules\projectiles\projectile\explosive.dm" +#include "code\modules\projectiles\projectile\force.dm" +#include "code\modules\projectiles\projectile\hook.dm" +#include "code\modules\projectiles\projectile\magic.dm" +#include "code\modules\projectiles\projectile\magnetic.dm" +#include "code\modules\projectiles\projectile\pellets.dm" +#include "code\modules\projectiles\projectile\scatter.dm" +#include "code\modules\projectiles\projectile\special.dm" +#include "code\modules\projectiles\projectile\trace.dm" +#include "code\modules\projectiles\targeting\targeting_client.dm" +#include "code\modules\projectiles\targeting\targeting_gun.dm" +#include "code\modules\projectiles\targeting\targeting_mob.dm" +#include "code\modules\projectiles\targeting\targeting_overlay.dm" +#include "code\modules\projectiles\targeting\targeting_triggers.dm" +#include "code\modules\radiation\radiation.dm" +#include "code\modules\random_map\_random_map_setup.dm" +#include "code\modules\random_map\random_map.dm" +#include "code\modules\random_map\random_map_verbs.dm" +#include "code\modules\random_map\automata\automata.dm" +#include "code\modules\random_map\automata\caves.dm" +#include "code\modules\random_map\building\building.dm" +#include "code\modules\random_map\drop\drop_types.dm" +#include "code\modules\random_map\drop\droppod.dm" +#include "code\modules\random_map\drop\droppod_doors.dm" +#include "code\modules\random_map\drop\supply.dm" +#include "code\modules\random_map\mazes\maze.dm" +#include "code\modules\random_map\mazes\maze_cell.dm" +#include "code\modules\random_map\meteor\meteor.dm" +#include "code\modules\random_map\noise\desert.dm" +#include "code\modules\random_map\noise\noise.dm" +#include "code\modules\random_map\noise\ore.dm" +#include "code\modules\random_map\noise\tundra.dm" +#include "code\modules\reagents\Chemistry-Colours.dm" +#include "code\modules\reagents\Chemistry-Logging.dm" +#include "code\modules\reagents\Chemistry-Metabolism.dm" +#include "code\modules\reagents\holder\distilling.dm" +#include "code\modules\reagents\holder\holder.dm" +#include "code\modules\reagents\hoses\connector.dm" +#include "code\modules\reagents\hoses\hose.dm" +#include "code\modules\reagents\hoses\hose_connector.dm" +#include "code\modules\reagents\machinery\chem_master.dm" +#include "code\modules\reagents\machinery\chemalyzer.dm" +#include "code\modules\reagents\machinery\distillery.dm" +#include "code\modules\reagents\machinery\grinder.dm" +#include "code\modules\reagents\machinery\pump.dm" +#include "code\modules\reagents\machinery\dispenser\_defines.dm" +#include "code\modules\reagents\machinery\dispenser\cartridge.dm" +#include "code\modules\reagents\machinery\dispenser\cartridge_presets.dm" +#include "code\modules\reagents\machinery\dispenser\cartridge_spawn.dm" +#include "code\modules\reagents\machinery\dispenser\dispenser2.dm" +#include "code\modules\reagents\machinery\dispenser\dispenser2_energy.dm" +#include "code\modules\reagents\machinery\dispenser\dispenser_presets.dm" +#include "code\modules\reagents\machinery\dispenser\reagent_tank.dm" +#include "code\modules\reagents\machinery\dispenser\supply.dm" +#include "code\modules\reagents\reactions\_reactions.dm" +#include "code\modules\reagents\reactions\distilling\distilling.dm" +#include "code\modules\reagents\reactions\fusion\fusion.dm" +#include "code\modules\reagents\reactions\instant\drinks.dm" +#include "code\modules\reagents\reactions\instant\food.dm" +#include "code\modules\reagents\reactions\instant\instant.dm" +#include "code\modules\reagents\reagent_containers\_reagent_containers.dm" +#include "code\modules\reagents\reagent_containers\blood_pack.dm" +#include "code\modules\reagents\reagent_containers\borghypo.dm" +#include "code\modules\reagents\reagent_containers\dropper.dm" +#include "code\modules\reagents\reagent_containers\glass.dm" +#include "code\modules\reagents\reagent_containers\hypospray.dm" +#include "code\modules\reagents\reagent_containers\patch.dm" +#include "code\modules\reagents\reagent_containers\pill.dm" +#include "code\modules\reagents\reagent_containers\spray.dm" +#include "code\modules\reagents\reagent_containers\syringes.dm" +#include "code\modules\reagents\reagent_containers\unidentified_hypospray.dm" +#include "code\modules\reagents\reagents\_helpers.dm" +#include "code\modules\reagents\reagents\_reagents.dm" +#include "code\modules\reagents\reagents\core.dm" +#include "code\modules\reagents\reagents\dispenser.dm" +#include "code\modules\reagents\reagents\drugs.dm" +#include "code\modules\reagents\reagents\food_drinks.dm" +#include "code\modules\reagents\reagents\medicine.dm" +#include "code\modules\reagents\reagents\modifiers.dm" +#include "code\modules\reagents\reagents\other.dm" +#include "code\modules\reagents\reagents\toxins.dm" +#include "code\modules\recycling\conveyor2.dm" +#include "code\modules\recycling\disposal-construction.dm" +#include "code\modules\recycling\disposal.dm" +#include "code\modules\recycling\sortingmachinery.dm" +#include "code\modules\research\circuitprinter.dm" +#include "code\modules\research\designs.dm" +#include "code\modules\research\destructive_analyzer.dm" +#include "code\modules\research\mechfab_designs.dm" +#include "code\modules\research\message_server.dm" +#include "code\modules\research\prosfab_designs.dm" +#include "code\modules\research\protolathe.dm" +#include "code\modules\research\rdconsole.dm" +#include "code\modules\research\rdmachines.dm" +#include "code\modules\research\research.dm" +#include "code\modules\research\server.dm" +#include "code\modules\research\designs\ai_holders.dm" +#include "code\modules\research\designs\bag_of_holding.dm" +#include "code\modules\research\designs\beakers.dm" +#include "code\modules\research\designs\bio_devices.dm" +#include "code\modules\research\designs\circuit_assembly.dm" +#include "code\modules\research\designs\engineering.dm" +#include "code\modules\research\designs\HUDs.dm" +#include "code\modules\research\designs\implants.dm" +#include "code\modules\research\designs\locator_devices.dm" +#include "code\modules\research\designs\medical.dm" +#include "code\modules\research\designs\mining_toys.dm" +#include "code\modules\research\designs\misc.dm" +#include "code\modules\research\designs\modular_computer.dm" +#include "code\modules\research\designs\pdas.dm" +#include "code\modules\research\designs\power_cells.dm" +#include "code\modules\research\designs\precursor.dm" +#include "code\modules\research\designs\stock_parts.dm" +#include "code\modules\research\designs\subspace_parts.dm" +#include "code\modules\research\designs\tech_disks.dm" +#include "code\modules\research\designs\weapons.dm" +#include "code\modules\research\designs\xenoarch_toys.dm" +#include "code\modules\research\designs\xenobio_toys.dm" +#include "code\modules\research\designs\circuits\ai_modules.dm" +#include "code\modules\research\designs\circuits\circuits.dm" +#include "code\modules\research\designs\circuits\disks.dm" +#include "code\modules\scripting\Errors.dm" +#include "code\modules\scripting\IDE.dm" +#include "code\modules\scripting\Options.dm" +#include "code\modules\scripting\stack.dm" +#include "code\modules\scripting\AST\AST Nodes.dm" +#include "code\modules\scripting\AST\Blocks.dm" +#include "code\modules\scripting\AST\Statements.dm" +#include "code\modules\scripting\AST\Operators\Binary Operators.dm" +#include "code\modules\scripting\AST\Operators\Unary Operators.dm" +#include "code\modules\scripting\Implementations\_Logic.dm" +#include "code\modules\scripting\Implementations\Telecomms.dm" +#include "code\modules\scripting\Interpreter\Evaluation.dm" +#include "code\modules\scripting\Interpreter\Interaction.dm" +#include "code\modules\scripting\Interpreter\Interpreter.dm" +#include "code\modules\scripting\Interpreter\Scope.dm" +#include "code\modules\scripting\Parser\Expressions.dm" +#include "code\modules\scripting\Parser\Keywords.dm" +#include "code\modules\scripting\Parser\Parser.dm" +#include "code\modules\scripting\Scanner\Scanner.dm" +#include "code\modules\scripting\Scanner\Tokens.dm" +#include "code\modules\security levels\keycard authentication.dm" +#include "code\modules\security levels\security levels.dm" +#include "code\modules\shieldgen\directional_shield.dm" +#include "code\modules\shieldgen\emergency_shield.dm" +#include "code\modules\shieldgen\energy_field.dm" +#include "code\modules\shieldgen\handheld_defuser.dm" +#include "code\modules\shieldgen\sheldwallgen.dm" +#include "code\modules\shieldgen\shield_capacitor.dm" +#include "code\modules\shieldgen\shield_diffuser.dm" +#include "code\modules\shieldgen\shield_gen.dm" +#include "code\modules\shieldgen\shield_gen_external.dm" +#include "code\modules\shuttles\antagonist.dm" +#include "code\modules\shuttles\departmental.dm" +#include "code\modules\shuttles\escape_pods.dm" +#include "code\modules\shuttles\landmarks.dm" +#include "code\modules\shuttles\shuttle.dm" +#include "code\modules\shuttles\shuttle_arrivals.dm" +#include "code\modules\shuttles\shuttle_autodock.dm" +#include "code\modules\shuttles\shuttle_console.dm" +#include "code\modules\shuttles\shuttle_console_multi.dm" +#include "code\modules\shuttles\shuttle_emergency.dm" +#include "code\modules\shuttles\shuttle_ferry.dm" +#include "code\modules\shuttles\shuttle_specops.dm" +#include "code\modules\shuttles\shuttle_supply.dm" +#include "code\modules\shuttles\shuttles_multi.dm" +#include "code\modules\shuttles\shuttles_web.dm" +#include "code\modules\shuttles\web_datums.dm" +#include "code\modules\spells\artifacts.dm" +#include "code\modules\spells\construct_spells.dm" +#include "code\modules\spells\no_clothes.dm" +#include "code\modules\spells\spell_code.dm" +#include "code\modules\spells\spell_projectile.dm" +#include "code\modules\spells\spellbook.dm" +#include "code\modules\spells\spells.dm" +#include "code\modules\spells\aoe_turf\aoe_turf.dm" +#include "code\modules\spells\aoe_turf\blink.dm" +#include "code\modules\spells\aoe_turf\charge.dm" +#include "code\modules\spells\aoe_turf\disable_tech.dm" +#include "code\modules\spells\aoe_turf\knock.dm" +#include "code\modules\spells\aoe_turf\smoke.dm" +#include "code\modules\spells\aoe_turf\summons.dm" +#include "code\modules\spells\aoe_turf\conjure\conjure.dm" +#include "code\modules\spells\aoe_turf\conjure\construct.dm" +#include "code\modules\spells\aoe_turf\conjure\forcewall.dm" +#include "code\modules\spells\general\area_teleport.dm" +#include "code\modules\spells\general\rune_write.dm" +#include "code\modules\spells\targeted\ethereal_jaunt.dm" +#include "code\modules\spells\targeted\genetic.dm" +#include "code\modules\spells\targeted\harvest.dm" +#include "code\modules\spells\targeted\mind_transfer.dm" +#include "code\modules\spells\targeted\shift.dm" +#include "code\modules\spells\targeted\subjugate.dm" +#include "code\modules\spells\targeted\targeted.dm" +#include "code\modules\spells\targeted\equip\equip.dm" +#include "code\modules\spells\targeted\equip\horsemask.dm" +#include "code\modules\spells\targeted\projectile\dumbfire.dm" +#include "code\modules\spells\targeted\projectile\fireball.dm" +#include "code\modules\spells\targeted\projectile\magic_missile.dm" +#include "code\modules\spells\targeted\projectile\projectile.dm" +#include "code\modules\surgery\_defines.dm" +#include "code\modules\surgery\bones.dm" +#include "code\modules\surgery\encased.dm" +#include "code\modules\surgery\external_repair.dm" +#include "code\modules\surgery\face.dm" +#include "code\modules\surgery\generic.dm" +#include "code\modules\surgery\implant.dm" +#include "code\modules\surgery\limb_reattach.dm" +#include "code\modules\surgery\neck.dm" +#include "code\modules\surgery\organs_internal.dm" +#include "code\modules\surgery\other.dm" +#include "code\modules\surgery\robotics.dm" +#include "code\modules\surgery\surgery.dm" +#include "code\modules\surgery\~defines.dm" +#include "code\modules\tables\bench.dm" +#include "code\modules\tables\flipping.dm" +#include "code\modules\tables\interactions.dm" +#include "code\modules\tables\presets.dm" +#include "code\modules\tables\rack.dm" +#include "code\modules\tables\tables.dm" +#include "code\modules\tension\tension.dm" +#include "code\modules\tgui\external.dm" +#include "code\modules\tgui\modal.dm" +#include "code\modules\tgui\states.dm" +#include "code\modules\tgui\tgui.dm" +#include "code\modules\tgui\tgui_window.dm" +#include "code\modules\tgui\modules\_base.dm" +#include "code\modules\tgui\modules\alarm.dm" +#include "code\modules\tgui\modules\appearance_changer.dm" +#include "code\modules\tgui\modules\atmos_control.dm" +#include "code\modules\tgui\modules\camera.dm" +#include "code\modules\tgui\modules\communications.dm" +#include "code\modules\tgui\modules\crew_monitor.dm" +#include "code\modules\tgui\modules\gyrotron_control.dm" +#include "code\modules\tgui\modules\law_manager.dm" +#include "code\modules\tgui\modules\overmap.dm" +#include "code\modules\tgui\modules\power_monitor.dm" +#include "code\modules\tgui\modules\rcon.dm" +#include "code\modules\tgui\modules\rustcore_monitor.dm" +#include "code\modules\tgui\modules\rustfuel_control.dm" +#include "code\modules\tgui\modules\shutoff_monitor.dm" +#include "code\modules\tgui\modules\supermatter_monitor.dm" +#include "code\modules\tgui\modules\ntos-only\cardmod.dm" +#include "code\modules\tgui\modules\ntos-only\configurator.dm" +#include "code\modules\tgui\modules\ntos-only\email.dm" +#include "code\modules\tgui\modules\ntos-only\uav.dm" +#include "code\modules\tgui\states\admin.dm" +#include "code\modules\tgui\states\always.dm" +#include "code\modules\tgui\states\conscious.dm" +#include "code\modules\tgui\states\contained.dm" +#include "code\modules\tgui\states\deep_inventory.dm" +#include "code\modules\tgui\states\default.dm" +#include "code\modules\tgui\states\hands.dm" +#include "code\modules\tgui\states\human_adjacent.dm" +#include "code\modules\tgui\states\inventory.dm" +#include "code\modules\tgui\states\not_incapacitated.dm" +#include "code\modules\tgui\states\notcontained.dm" +#include "code\modules\tgui\states\ntos.dm" +#include "code\modules\tgui\states\observer.dm" +#include "code\modules\tgui\states\physical.dm" +#include "code\modules\tgui\states\self.dm" +#include "code\modules\tgui\states\zlevel.dm" +#include "code\modules\tooltip\tooltip.dm" +#include "code\modules\turbolift\_turbolift.dm" +#include "code\modules\turbolift\turbolift.dm" +#include "code\modules\turbolift\turbolift_areas.dm" +#include "code\modules\turbolift\turbolift_console.dm" +#include "code\modules\turbolift\turbolift_door.dm" +#include "code\modules\turbolift\turbolift_floor.dm" +#include "code\modules\turbolift\turbolift_map.dm" +#include "code\modules\turbolift\turbolift_turfs.dm" +#include "code\modules\vchat\vchat_client.dm" +#include "code\modules\vchat\vchat_db.dm" +#include "code\modules\vehicles\bike.dm" +#include "code\modules\vehicles\boat.dm" +#include "code\modules\vehicles\cargo_train.dm" +#include "code\modules\vehicles\construction.dm" +#include "code\modules\vehicles\quad.dm" +#include "code\modules\vehicles\train.dm" +#include "code\modules\vehicles\vehicle.dm" +#include "code\modules\ventcrawl\ventcrawl.dm" +#include "code\modules\ventcrawl\ventcrawl_atmospherics.dm" +#include "code\modules\ventcrawl\ventcrawl_multiz.dm" +#include "code\modules\ventcrawl\ventcrawl_verb.dm" +#include "code\modules\virus2\admin.dm" +#include "code\modules\virus2\analyser.dm" +#include "code\modules\virus2\antibodies.dm" +#include "code\modules\virus2\centrifuge.dm" +#include "code\modules\virus2\curer.dm" +#include "code\modules\virus2\disease2.dm" +#include "code\modules\virus2\diseasesplicer.dm" +#include "code\modules\virus2\dishincubator.dm" +#include "code\modules\virus2\effect.dm" +#include "code\modules\virus2\helpers.dm" +#include "code\modules\virus2\isolator.dm" +#include "code\modules\virus2\items_devices.dm" +#include "code\modules\webhooks\_webhook.dm" +#include "code\modules\webhooks\webhook_ahelp2discord.dm" +#include "code\modules\webhooks\webhook_custom_event.dm" +#include "code\modules\webhooks\webhook_fax2discord.dm" +#include "code\modules\webhooks\webhook_roundend.dm" +#include "code\modules\webhooks\webhook_roundprep.dm" +#include "code\modules\webhooks\webhook_roundstart.dm" +#include "code\modules\xenoarcheaology\anomaly_container.dm" +#include "code\modules\xenoarcheaology\boulder.dm" +#include "code\modules\xenoarcheaology\effect.dm" +#include "code\modules\xenoarcheaology\effect_master.dm" +#include "code\modules\xenoarcheaology\manuals.dm" +#include "code\modules\xenoarcheaology\misc.dm" +#include "code\modules\xenoarcheaology\sampling.dm" +#include "code\modules\xenoarcheaology\artifacts\artifact.dm" +#include "code\modules\xenoarcheaology\artifacts\artifact_find.dm" +#include "code\modules\xenoarcheaology\artifacts\autocloner.dm" +#include "code\modules\xenoarcheaology\artifacts\crystal.dm" +#include "code\modules\xenoarcheaology\artifacts\gigadrill.dm" +#include "code\modules\xenoarcheaology\artifacts\replicator.dm" +#include "code\modules\xenoarcheaology\artifacts\predefined\_predefined.dm" +#include "code\modules\xenoarcheaology\artifacts\predefined\hungry_statue.dm" +#include "code\modules\xenoarcheaology\effects\animate_anomaly.dm" +#include "code\modules\xenoarcheaology\effects\badfeeling.dm" +#include "code\modules\xenoarcheaology\effects\berserk.dm" +#include "code\modules\xenoarcheaology\effects\cannibal.dm" +#include "code\modules\xenoarcheaology\effects\cellcharge.dm" +#include "code\modules\xenoarcheaology\effects\celldrain.dm" +#include "code\modules\xenoarcheaology\effects\cold.dm" +#include "code\modules\xenoarcheaology\effects\electric_field.dm" +#include "code\modules\xenoarcheaology\effects\emp.dm" +#include "code\modules\xenoarcheaology\effects\feysight.dm" +#include "code\modules\xenoarcheaology\effects\forcefield.dm" +#include "code\modules\xenoarcheaology\effects\gaia.dm" +#include "code\modules\xenoarcheaology\effects\gasco2.dm" +#include "code\modules\xenoarcheaology\effects\gasnitro.dm" +#include "code\modules\xenoarcheaology\effects\gasoxy.dm" +#include "code\modules\xenoarcheaology\effects\gasphoron.dm" +#include "code\modules\xenoarcheaology\effects\gassleeping.dm" +#include "code\modules\xenoarcheaology\effects\goodfeeling.dm" +#include "code\modules\xenoarcheaology\effects\gravitational_waves.dm" +#include "code\modules\xenoarcheaology\effects\heal.dm" +#include "code\modules\xenoarcheaology\effects\heat.dm" +#include "code\modules\xenoarcheaology\effects\hurt.dm" +#include "code\modules\xenoarcheaology\effects\poltergeist.dm" +#include "code\modules\xenoarcheaology\effects\radiate.dm" +#include "code\modules\xenoarcheaology\effects\resurrect.dm" +#include "code\modules\xenoarcheaology\effects\roboheal.dm" +#include "code\modules\xenoarcheaology\effects\robohurt.dm" +#include "code\modules\xenoarcheaology\effects\sleepy.dm" +#include "code\modules\xenoarcheaology\effects\stun.dm" +#include "code\modules\xenoarcheaology\effects\teleport.dm" +#include "code\modules\xenoarcheaology\effects\vampire.dm" +#include "code\modules\xenoarcheaology\finds\eguns.dm" +#include "code\modules\xenoarcheaology\finds\find_spawning.dm" +#include "code\modules\xenoarcheaology\finds\finds.dm" +#include "code\modules\xenoarcheaology\finds\finds_defines.dm" +#include "code\modules\xenoarcheaology\finds\fossils.dm" +#include "code\modules\xenoarcheaology\finds\misc.dm" +#include "code\modules\xenoarcheaology\finds\special.dm" +#include "code\modules\xenoarcheaology\finds\talking.dm" +#include "code\modules\xenoarcheaology\tools\ano_device_battery.dm" +#include "code\modules\xenoarcheaology\tools\artifact_analyser.dm" +#include "code\modules\xenoarcheaology\tools\artifact_harvester.dm" +#include "code\modules\xenoarcheaology\tools\artifact_scanner.dm" +#include "code\modules\xenoarcheaology\tools\coolant_tank.dm" +#include "code\modules\xenoarcheaology\tools\equipment.dm" +#include "code\modules\xenoarcheaology\tools\geosample_scanner.dm" +#include "code\modules\xenoarcheaology\tools\suspension_generator.dm" +#include "code\modules\xenoarcheaology\tools\tools.dm" +#include "code\modules\xenoarcheaology\tools\tools_pickaxe.dm" +#include "code\modules\xenobio\items\extracts.dm" +#include "code\modules\xenobio\items\slime_objects.dm" +#include "code\modules\xenobio\items\slimepotions.dm" +#include "code\modules\xenobio\items\weapons.dm" +#include "code\modules\xenobio\machinery\processor.dm" +#include "code\modules\xgm\xgm_gas_data.dm" +#include "code\modules\xgm\xgm_gas_mixture.dm" +#include "code\unit_tests\decl_tests.dm" +#include "code\unit_tests\language_tests.dm" +#include "code\unit_tests\loadout_tests.dm" +#include "code\unit_tests\map_tests.dm" +#include "code\unit_tests\mob_tests.dm" +#include "code\unit_tests\music_test.dm" +#include "code\unit_tests\recipe_tests.dm" +#include "code\unit_tests\research_tests.dm" +#include "code\unit_tests\sqlite_tests.dm" +#include "code\unit_tests\subsystem_tests.dm" +#include "code\unit_tests\unit_test.dm" +#include "code\unit_tests\zas_tests.dm" +#include "code\unit_tests\integrated_circuits\arithmetic.dm" +#include "code\unit_tests\integrated_circuits\circuits.dm" +#include "code\unit_tests\integrated_circuits\converter.dm" +#include "code\unit_tests\integrated_circuits\logic.dm" +#include "code\unit_tests\integrated_circuits\trig.dm" +#include "code\ZAS\Airflow.dm" +#include "code\ZAS\Atom.dm" +#include "code\ZAS\Connection.dm" +#include "code\ZAS\ConnectionGroup.dm" +#include "code\ZAS\ConnectionManager.dm" +#include "code\ZAS\Controller.dm" +#include "code\ZAS\Debug.dm" +#include "code\ZAS\Diagnostic.dm" +#include "code\ZAS\Fire.dm" +#include "code\ZAS\Phoron.dm" +#include "code\ZAS\Turf.dm" +#include "code\ZAS\Variable Settings.dm" +#include "code\ZAS\Zone.dm" +#include "interface\interface.dm" +#include "interface\skin.dmf" +#include "maps\cynosure\cynosure.dm" +#include "maps\submaps\_helpers.dm" +#include "maps\submaps\poi_landmark.dm" +#include "maps\submaps\engine_submaps\engine_areas.dm" +#include "maps\submaps\engine_submaps\southern_cross\_engine_submaps.dm" +#include "maps\submaps\space_submaps\space.dm" +#include "maps\submaps\surface_submaps\mountains\mountains.dm" +#include "maps\submaps\surface_submaps\mountains\mountains_areas.dm" +#include "maps\submaps\surface_submaps\plains\plains.dm" +#include "maps\submaps\surface_submaps\plains\plains_areas.dm" +#include "maps\submaps\surface_submaps\wilderness\wilderness.dm" +#include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm" +#include "maps\~map_system\maps.dm" +// END_INCLUDE From 30a192bb16a30f20aa3e226592e3e8ad38edb350 Mon Sep 17 00:00:00 2001 From: "C.L" Date: Sat, 1 Oct 2022 14:29:35 -0400 Subject: [PATCH 37/47] I learned how to do javascript I mean typescript I mean TGUI --- tgui/packages/tgui/interfaces/RapidPipeDispenser.js | 10 +++++----- tgui/public/tgui.bundle.js | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tgui/packages/tgui/interfaces/RapidPipeDispenser.js b/tgui/packages/tgui/interfaces/RapidPipeDispenser.js index a4f4086ae20..2f2578ebc8e 100644 --- a/tgui/packages/tgui/interfaces/RapidPipeDispenser.js +++ b/tgui/packages/tgui/interfaces/RapidPipeDispenser.js @@ -101,20 +101,20 @@ const SelectionSection = (props, context) => { const LayerSection = (props, context) => { const { act, data } = useBackend(context); - const { category: rootCategoryIndex, piping_layer } = data; + const { category: rootCategoryIndex, piping_layer, pipe_layers } = data; const previews = data.preview_rows.flatMap((row) => row.previews); return (
        {rootCategoryIndex === 0 && ( - {[1, 2, 3, 4, 5].map((layer) => ( + {Object.keys(pipe_layers).map((layer) => ( act('piping_layer', { - piping_layer: layer, + piping_layer: pipe_layers[layer], }) } /> diff --git a/tgui/public/tgui.bundle.js b/tgui/public/tgui.bundle.js index d8d17f2f504..f4ccd3eba1f 100644 --- a/tgui/public/tgui.bundle.js +++ b/tgui/public/tgui.bundle.js @@ -1 +1 @@ -!function(){var e={21926:function(e,t,n){"use strict";t.__esModule=!0,t.createPopper=void 0,t.popperGenerator=h;var o=m(n(48764)),r=m(n(68349)),a=m(n(3671)),i=m(n(55490)),c=(m(n(40755)),m(n(69282))),l=m(n(27672)),d=(m(n(30752)),m(n(12459)),m(n(27629)),m(n(54220))),s=m(n(75949));t.detectOverflow=s["default"];var u=n(79388);n(15954);function m(e){return e&&e.__esModule?e:{"default":e}}var p={placement:"bottom",modifiers:[],strategy:"absolute"};function f(){for(var e=arguments.length,t=new Array(e),n=0;n0&&(a=(0,r.round)(n.width)/l||1),c>0&&(i=(0,r.round)(n.height)/c||1)}return{width:n.width/a,height:n.height/i,top:n.top/i,right:n.right/a,bottom:n.bottom/i,left:n.left/a,x:n.left/a,y:n.top/i}};var o=n(79388),r=n(36291)},65647:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){var o="clippingParents"===t?function(e){var t=(0,i["default"])((0,m["default"])(e)),n=["absolute","fixed"].indexOf((0,d["default"])(e).position)>=0&&(0,s.isHTMLElement)(e)?(0,c["default"])(e):e;if(!(0,s.isElement)(n))return[];return t.filter((function(e){return(0,s.isElement)(e)&&(0,p["default"])(e,n)&&"body"!==(0,f["default"])(e)}))}(e):[].concat(t),r=[].concat(o,[n]),a=r[0],l=r.reduce((function(t,n){var o=N(e,n);return t.top=(0,C.max)(o.top,t.top),t.right=(0,C.min)(o.right,t.right),t.bottom=(0,C.min)(o.bottom,t.bottom),t.left=(0,C.max)(o.left,t.left),t}),N(e,a));return l.width=l.right-l.left,l.height=l.bottom-l.top,l.x=l.left,l.y=l.top,l};var o=n(15954),r=b(n(8204)),a=b(n(40015)),i=b(n(3671)),c=b(n(55490)),l=b(n(25890)),d=b(n(40755)),s=n(79388),u=b(n(11100)),m=b(n(95136)),p=b(n(62215)),f=b(n(38569)),h=b(n(73060)),C=n(36291);function b(e){return e&&e.__esModule?e:{"default":e}}function N(e,t){return t===o.viewport?(0,h["default"])((0,r["default"])(e)):(0,s.isElement)(t)?function(e){var t=(0,u["default"])(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}(t):(0,h["default"])((0,a["default"])((0,l["default"])(e)))}},48764:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){void 0===n&&(n=!1);var u=(0,i.isHTMLElement)(t),m=(0,i.isHTMLElement)(t)&&function(e){var t=e.getBoundingClientRect(),n=(0,s.round)(t.width)/e.offsetWidth||1,o=(0,s.round)(t.height)/e.offsetHeight||1;return 1!==n||1!==o}(t),p=(0,l["default"])(t),f=(0,o["default"])(e,m),h={scrollLeft:0,scrollTop:0},C={x:0,y:0};(u||!u&&!n)&&(("body"!==(0,a["default"])(t)||(0,d["default"])(p))&&(h=(0,r["default"])(t)),(0,i.isHTMLElement)(t)?((C=(0,o["default"])(t,!0)).x+=t.clientLeft,C.y+=t.clientTop):p&&(C.x=(0,c["default"])(p)));return{x:f.left+h.scrollLeft-C.x,y:f.top+h.scrollTop-C.y,width:f.width,height:f.height}};var o=u(n(11100)),r=u(n(3514)),a=u(n(38569)),i=n(79388),c=u(n(36056)),l=u(n(25890)),d=u(n(57360)),s=n(36291);function u(e){return e&&e.__esModule?e:{"default":e}}},40755:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(0,r["default"])(e).getComputedStyle(e)};var o,r=(o=n(96904))&&o.__esModule?o:{"default":o}},25890:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(((0,o.isElement)(e)?e.ownerDocument:e.document)||window.document).documentElement};var o=n(79388)},40015:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t,n=(0,o["default"])(e),l=(0,i["default"])(e),d=null==(t=e.ownerDocument)?void 0:t.body,s=(0,c.max)(n.scrollWidth,n.clientWidth,d?d.scrollWidth:0,d?d.clientWidth:0),u=(0,c.max)(n.scrollHeight,n.clientHeight,d?d.scrollHeight:0,d?d.clientHeight:0),m=-l.scrollLeft+(0,a["default"])(e),p=-l.scrollTop;"rtl"===(0,r["default"])(d||n).direction&&(m+=(0,c.max)(n.clientWidth,d?d.clientWidth:0)-s);return{width:s,height:u,x:m,y:p}};var o=l(n(25890)),r=l(n(40755)),a=l(n(36056)),i=l(n(69211)),c=n(36291);function l(e){return e&&e.__esModule?e:{"default":e}}},41829:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}},68349:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=e.offsetWidth,o=e.offsetHeight;Math.abs(t.width-n)<=1&&(n=t.width);Math.abs(t.height-o)<=1&&(o=t.height);return{x:e.offsetLeft,y:e.offsetTop,width:n,height:o}};var o,r=(o=n(11100))&&o.__esModule?o:{"default":o}},38569:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e?(e.nodeName||"").toLowerCase():null}},3514:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return e!==(0,r["default"])(e)&&(0,a.isHTMLElement)(e)?(0,i["default"])(e):(0,o["default"])(e)};var o=c(n(69211)),r=c(n(96904)),a=n(79388),i=c(n(41829));function c(e){return e&&e.__esModule?e:{"default":e}}},55490:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,o["default"])(e),n=s(e);for(;n&&(0,c["default"])(n)&&"static"===(0,a["default"])(n).position;)n=s(n);if(n&&("html"===(0,r["default"])(n)||"body"===(0,r["default"])(n)&&"static"===(0,a["default"])(n).position))return t;return n||function(e){var t=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&(0,i.isHTMLElement)(e)){if("fixed"===(0,a["default"])(e).position)return null}var n=(0,l["default"])(e);(0,i.isShadowRoot)(n)&&(n=n.host);for(;(0,i.isHTMLElement)(n)&&["html","body"].indexOf((0,r["default"])(n))<0;){var o=(0,a["default"])(n);if("none"!==o.transform||"none"!==o.perspective||"paint"===o.contain||-1!==["transform","perspective"].indexOf(o.willChange)||t&&"filter"===o.willChange||t&&o.filter&&"none"!==o.filter)return n;n=n.parentNode}return null}(e)||t};var o=d(n(96904)),r=d(n(38569)),a=d(n(40755)),i=n(79388),c=d(n(94437)),l=d(n(95136));function d(e){return e&&e.__esModule?e:{"default":e}}function s(e){return(0,i.isHTMLElement)(e)&&"fixed"!==(0,a["default"])(e).position?e.offsetParent:null}},95136:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){if("html"===(0,o["default"])(e))return e;return e.assignedSlot||e.parentNode||((0,a.isShadowRoot)(e)?e.host:null)||(0,r["default"])(e)};var o=i(n(38569)),r=i(n(25890)),a=n(79388);function i(e){return e&&e.__esModule?e:{"default":e}}},43367:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function l(e){if(["html","body","#document"].indexOf((0,a["default"])(e))>=0)return e.ownerDocument.body;if((0,i.isHTMLElement)(e)&&(0,r["default"])(e))return e;return l((0,o["default"])(e))};var o=c(n(95136)),r=c(n(57360)),a=c(n(38569)),i=n(79388);function c(e){return e&&e.__esModule?e:{"default":e}}},8204:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,o["default"])(e),n=(0,r["default"])(e),i=t.visualViewport,c=n.clientWidth,l=n.clientHeight,d=0,s=0;i&&(c=i.width,l=i.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(d=i.offsetLeft,s=i.offsetTop));return{width:c,height:l,x:d+(0,a["default"])(e),y:s}};var o=i(n(96904)),r=i(n(25890)),a=i(n(36056));function i(e){return e&&e.__esModule?e:{"default":e}}},96904:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}},69211:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=t.pageXOffset,o=t.pageYOffset;return{scrollLeft:n,scrollTop:o}};var o,r=(o=n(96904))&&o.__esModule?o:{"default":o}},36056:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(0,o["default"])((0,r["default"])(e)).left+(0,a["default"])(e).scrollLeft};var o=i(n(11100)),r=i(n(25890)),a=i(n(69211));function i(e){return e&&e.__esModule?e:{"default":e}}},79388:function(e,t,n){"use strict";t.__esModule=!0,t.isElement=function(e){var t=(0,r["default"])(e).Element;return e instanceof t||e instanceof Element},t.isHTMLElement=function(e){var t=(0,r["default"])(e).HTMLElement;return e instanceof t||e instanceof HTMLElement},t.isShadowRoot=function(e){if("undefined"==typeof ShadowRoot)return!1;var t=(0,r["default"])(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot};var o,r=(o=n(96904))&&o.__esModule?o:{"default":o}},57360:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=t.overflow,o=t.overflowX,a=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+a+o)};var o,r=(o=n(40755))&&o.__esModule?o:{"default":o}},94437:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return["table","td","th"].indexOf((0,r["default"])(e))>=0};var o,r=(o=n(38569))&&o.__esModule?o:{"default":o}},3671:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function l(e,t){var n;void 0===t&&(t=[]);var c=(0,o["default"])(e),d=c===(null==(n=e.ownerDocument)?void 0:n.body),s=(0,a["default"])(c),u=d?[s].concat(s.visualViewport||[],(0,i["default"])(c)?c:[]):c,m=t.concat(u);return d?m:m.concat(l((0,r["default"])(u)))};var o=c(n(43367)),r=c(n(95136)),a=c(n(96904)),i=c(n(57360));function c(e){return e&&e.__esModule?e:{"default":e}}},15954:function(e,t){"use strict";t.__esModule=!0,t.write=t.viewport=t.variationPlacements=t.top=t.start=t.right=t.reference=t.read=t.popper=t.placements=t.modifierPhases=t.main=t.left=t.end=t.clippingParents=t.bottom=t.beforeWrite=t.beforeRead=t.beforeMain=t.basePlacements=t.auto=t.afterWrite=t.afterRead=t.afterMain=void 0;t.top="top";var n="bottom";t.bottom=n;var o="right";t.right=o;var r="left";t.left=r;var a="auto";t.auto=a;var i=["top",n,o,r];t.basePlacements=i;var c="start";t.start=c;var l="end";t.end=l;t.clippingParents="clippingParents";t.viewport="viewport";t.popper="popper";t.reference="reference";var d=i.reduce((function(e,t){return e.concat([t+"-"+c,t+"-"+l])}),[]);t.variationPlacements=d;var s=[].concat(i,[a]).reduce((function(e,t){return e.concat([t,t+"-"+c,t+"-"+l])}),[]);t.placements=s;var u="beforeRead";t.beforeRead=u;var m="read";t.read=m;var p="afterRead";t.afterRead=p;var f="beforeMain";t.beforeMain=f;var h="main";t.main=h;var C="afterMain";t.afterMain=C;var b="beforeWrite";t.beforeWrite=b;var N="write";t.write=N;var g="afterWrite";t.afterWrite=g;var V=[u,m,p,f,h,C,b,N,g];t.modifierPhases=V},37809:function(e,t,n){"use strict";t.__esModule=!0;var o={popperGenerator:!0,detectOverflow:!0,createPopperBase:!0,createPopper:!0,createPopperLite:!0};t.popperGenerator=t.detectOverflow=t.createPopperLite=t.createPopperBase=t.createPopper=void 0;var r=n(15954);Object.keys(r).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===r[e]||(t[e]=r[e]))}));var a=n(4207);Object.keys(a).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===a[e]||(t[e]=a[e]))}));var i=n(21926);t.popperGenerator=i.popperGenerator,t.detectOverflow=i.detectOverflow,t.createPopperBase=i.createPopper;var c=n(17827);t.createPopper=c.createPopper;var l=n(47952);t.createPopperLite=l.createPopper},89290:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(38569))&&o.__esModule?o:{"default":o},a=n(79388);var i={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},o=t.attributes[e]||{},i=t.elements[e];(0,a.isHTMLElement)(i)&&(0,r["default"])(i)&&(Object.assign(i.style,n),Object.keys(o).forEach((function(e){var t=o[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var o=t.elements[e],i=t.attributes[e]||{},c=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});(0,a.isHTMLElement)(o)&&(0,r["default"])(o)&&(Object.assign(o.style,c),Object.keys(i).forEach((function(e){o.removeAttribute(e)})))}))}},requires:["computeStyles"]};t["default"]=i},71313:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=m(n(27629)),r=m(n(68349)),a=m(n(62215)),i=m(n(55490)),c=m(n(78772)),l=n(54444),d=m(n(11277)),s=m(n(45674)),u=n(15954);n(79388);function m(e){return e&&e.__esModule?e:{"default":e}}var p=function(e,t){return e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e,(0,d["default"])("number"!=typeof e?e:(0,s["default"])(e,u.basePlacements))};var f={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,a=e.name,d=e.options,s=n.elements.arrow,m=n.modifiersData.popperOffsets,f=(0,o["default"])(n.placement),h=(0,c["default"])(f),C=[u.left,u.right].indexOf(f)>=0?"height":"width";if(s&&m){var b=p(d.padding,n),N=(0,r["default"])(s),g="y"===h?u.top:u.left,V="y"===h?u.bottom:u.right,v=n.rects.reference[C]+n.rects.reference[h]-m[h]-n.rects.popper[C],_=m[h]-n.rects.reference[h],y=(0,i["default"])(s),k=y?"y"===h?y.clientHeight||0:y.clientWidth||0:0,x=v/2-_/2,w=b[g],B=k-N[C]-b[V],L=k/2-N[C]/2+x,S=(0,l.within)(w,L,B),I=h;n.modifiersData[a]=((t={})[I]=S,t.centerOffset=S-L,t)}},effect:function(e){var t=e.state,n=e.options.element,o=void 0===n?"[data-popper-arrow]":n;null!=o&&("string"!=typeof o||(o=t.elements.popper.querySelector(o)))&&(0,a["default"])(t.elements.popper,o)&&(t.elements.arrow=o)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};t["default"]=f},54680:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0,t.mapToStyles=p;var o=n(15954),r=u(n(55490)),a=u(n(96904)),i=u(n(25890)),c=u(n(40755)),l=u(n(27629)),d=u(n(31686)),s=n(36291);function u(e){return e&&e.__esModule?e:{"default":e}}var m={top:"auto",right:"auto",bottom:"auto",left:"auto"};function p(e){var t,n=e.popper,l=e.popperRect,d=e.placement,u=e.variation,p=e.offsets,f=e.position,h=e.gpuAcceleration,C=e.adaptive,b=e.roundOffsets,N=e.isFixed,g=p.x,V=void 0===g?0:g,v=p.y,_=void 0===v?0:v,y="function"==typeof b?b({x:V,y:_}):{x:V,y:_};V=y.x,_=y.y;var k=p.hasOwnProperty("x"),x=p.hasOwnProperty("y"),w=o.left,B=o.top,L=window;if(C){var S=(0,r["default"])(n),I="clientHeight",T="clientWidth";if(S===(0,a["default"])(n)&&(S=(0,i["default"])(n),"static"!==(0,c["default"])(S).position&&"absolute"===f&&(I="scrollHeight",T="scrollWidth")),d===o.top||(d===o.left||d===o.right)&&u===o.end)B=o.bottom,_-=(N&&S===L&&L.visualViewport?L.visualViewport.height:S[I])-l.height,_*=h?1:-1;if(d===o.left||(d===o.top||d===o.bottom)&&u===o.end)w=o.right,V-=(N&&S===L&&L.visualViewport?L.visualViewport.width:S[T])-l.width,V*=h?1:-1}var A,M=Object.assign({position:f},C&&m),E=!0===b?function(e){var t=e.x,n=e.y,o=window.devicePixelRatio||1;return{x:(0,s.round)(t*o)/o||0,y:(0,s.round)(n*o)/o||0}}({x:V,y:_}):{x:V,y:_};return V=E.x,_=E.y,h?Object.assign({},M,((A={})[B]=x?"0":"",A[w]=k?"0":"",A.transform=(L.devicePixelRatio||1)<=1?"translate("+V+"px, "+_+"px)":"translate3d("+V+"px, "+_+"px, 0)",A)):Object.assign({},M,((t={})[B]=x?_+"px":"",t[w]=k?V+"px":"",t.transform="",t))}var f={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,o=n.gpuAcceleration,r=void 0===o||o,a=n.adaptive,i=void 0===a||a,c=n.roundOffsets,s=void 0===c||c,u={placement:(0,l["default"])(t.placement),variation:(0,d["default"])(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:r,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,p(Object.assign({},u,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:i,roundOffsets:s})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,p(Object.assign({},u,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:s})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};t["default"]=f},53887:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(96904))&&o.__esModule?o:{"default":o};var a={passive:!0};var i={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,o=e.options,i=o.scroll,c=void 0===i||i,l=o.resize,d=void 0===l||l,s=(0,r["default"])(t.elements.popper),u=[].concat(t.scrollParents.reference,t.scrollParents.popper);return c&&u.forEach((function(e){e.addEventListener("scroll",n.update,a)})),d&&s.addEventListener("resize",n.update,a),function(){c&&u.forEach((function(e){e.removeEventListener("scroll",n.update,a)})),d&&s.removeEventListener("resize",n.update,a)}},data:{}};t["default"]=i},82566:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=s(n(31477)),r=s(n(27629)),a=s(n(44214)),i=s(n(75949)),c=s(n(2894)),l=n(15954),d=s(n(31686));function s(e){return e&&e.__esModule?e:{"default":e}}var u={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,s=e.name;if(!t.modifiersData[s]._skip){for(var u=n.mainAxis,m=void 0===u||u,p=n.altAxis,f=void 0===p||p,h=n.fallbackPlacements,C=n.padding,b=n.boundary,N=n.rootBoundary,g=n.altBoundary,V=n.flipVariations,v=void 0===V||V,_=n.allowedAutoPlacements,y=t.options.placement,k=(0,r["default"])(y),x=h||(k===y||!v?[(0,o["default"])(y)]:function(e){if((0,r["default"])(e)===l.auto)return[];var t=(0,o["default"])(e);return[(0,a["default"])(e),t,(0,a["default"])(t)]}(y)),w=[y].concat(x).reduce((function(e,n){return e.concat((0,r["default"])(n)===l.auto?(0,c["default"])(t,{placement:n,boundary:b,rootBoundary:N,padding:C,flipVariations:v,allowedAutoPlacements:_}):n)}),[]),B=t.rects.reference,L=t.rects.popper,S=new Map,I=!0,T=w[0],A=0;A=0,D=O?"width":"height",F=(0,i["default"])(t,{placement:M,boundary:b,rootBoundary:N,altBoundary:g,padding:C}),R=O?P?l.right:l.left:P?l.bottom:l.top;B[D]>L[D]&&(R=(0,o["default"])(R));var j=(0,o["default"])(R),W=[];if(m&&W.push(F[E]<=0),f&&W.push(F[R]<=0,F[j]<=0),W.every((function(e){return e}))){T=M,I=!1;break}S.set(M,W)}if(I)for(var z=function(e){var t=w.find((function(t){var n=S.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return T=t,"break"},U=v?3:1;U>0;U--){if("break"===z(U))break}t.placement!==T&&(t.modifiersData[s]._skip=!0,t.placement=T,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};t["default"]=u},27353:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=n(15954),a=(o=n(75949))&&o.__esModule?o:{"default":o};function i(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function c(e){return[r.top,r.right,r.bottom,r.left].some((function(t){return e[t]>=0}))}var l={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,o=t.rects.reference,r=t.rects.popper,l=t.modifiersData.preventOverflow,d=(0,a["default"])(t,{elementContext:"reference"}),s=(0,a["default"])(t,{altBoundary:!0}),u=i(d,o),m=i(s,r,l),p=c(u),f=c(m);t.modifiersData[n]={referenceClippingOffsets:u,popperEscapeOffsets:m,isReferenceHidden:p,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":f})}};t["default"]=l},4207:function(e,t,n){"use strict";t.__esModule=!0,t.preventOverflow=t.popperOffsets=t.offset=t.hide=t.flip=t.eventListeners=t.computeStyles=t.arrow=t.applyStyles=void 0;var o=m(n(89290));t.applyStyles=o["default"];var r=m(n(71313));t.arrow=r["default"];var a=m(n(54680));t.computeStyles=a["default"];var i=m(n(53887));t.eventListeners=i["default"];var c=m(n(82566));t.flip=c["default"];var l=m(n(27353));t.hide=l["default"];var d=m(n(99873));t.offset=d["default"];var s=m(n(83662));t.popperOffsets=s["default"];var u=m(n(21031));function m(e){return e&&e.__esModule?e:{"default":e}}t.preventOverflow=u["default"]},99873:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0,t.distanceAndSkiddingToXY=i;var o,r=(o=n(27629))&&o.__esModule?o:{"default":o},a=n(15954);function i(e,t,n){var o=(0,r["default"])(e),i=[a.left,a.top].indexOf(o)>=0?-1:1,c="function"==typeof n?n(Object.assign({},t,{placement:e})):n,l=c[0],d=c[1];return l=l||0,d=(d||0)*i,[a.left,a.right].indexOf(o)>=0?{x:d,y:l}:{x:l,y:d}}var c={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,o=e.name,r=n.offset,c=void 0===r?[0,0]:r,l=a.placements.reduce((function(e,n){return e[n]=i(n,t.rects,c),e}),{}),d=l[t.placement],s=d.x,u=d.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=s,t.modifiersData.popperOffsets.y+=u),t.modifiersData[o]=l}};t["default"]=c},83662:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o,r=(o=n(2002))&&o.__esModule?o:{"default":o};var a={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=(0,r["default"])({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}};t["default"]=a},21031:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var o=n(15954),r=f(n(27629)),a=f(n(78772)),i=f(n(16696)),c=n(54444),l=f(n(68349)),d=f(n(55490)),s=f(n(75949)),u=f(n(31686)),m=f(n(22710)),p=n(36291);function f(e){return e&&e.__esModule?e:{"default":e}}var h={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,f=e.name,h=n.mainAxis,C=void 0===h||h,b=n.altAxis,N=void 0!==b&&b,g=n.boundary,V=n.rootBoundary,v=n.altBoundary,_=n.padding,y=n.tether,k=void 0===y||y,x=n.tetherOffset,w=void 0===x?0:x,B=(0,s["default"])(t,{boundary:g,rootBoundary:V,padding:_,altBoundary:v}),L=(0,r["default"])(t.placement),S=(0,u["default"])(t.placement),I=!S,T=(0,a["default"])(L),A=(0,i["default"])(T),M=t.modifiersData.popperOffsets,E=t.rects.reference,P=t.rects.popper,O="function"==typeof w?w(Object.assign({},t.rects,{placement:t.placement})):w,D="number"==typeof O?{mainAxis:O,altAxis:O}:Object.assign({mainAxis:0,altAxis:0},O),F=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,R={x:0,y:0};if(M){if(C){var j,W="y"===T?o.top:o.left,z="y"===T?o.bottom:o.right,U="y"===T?"height":"width",H=M[T],G=H+B[W],K=H-B[z],Y=k?-P[U]/2:0,q=S===o.start?E[U]:P[U],$=S===o.start?-P[U]:-E[U],X=t.elements.arrow,Q=k&&X?(0,l["default"])(X):{width:0,height:0},J=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:(0,m["default"])(),Z=J[W],ee=J[z],te=(0,c.within)(0,E[U],Q[U]),ne=I?E[U]/2-Y-te-Z-D.mainAxis:q-te-Z-D.mainAxis,oe=I?-E[U]/2+Y+te+ee+D.mainAxis:$+te+ee+D.mainAxis,re=t.elements.arrow&&(0,d["default"])(t.elements.arrow),ae=re?"y"===T?re.clientTop||0:re.clientLeft||0:0,ie=null!=(j=null==F?void 0:F[T])?j:0,ce=H+ne-ie-ae,le=H+oe-ie,de=(0,c.within)(k?(0,p.min)(G,ce):G,H,k?(0,p.max)(K,le):K);M[T]=de,R[T]=de-H}if(N){var se,ue="x"===T?o.top:o.left,me="x"===T?o.bottom:o.right,pe=M[A],fe="y"===A?"height":"width",he=pe+B[ue],Ce=pe-B[me],be=-1!==[o.top,o.left].indexOf(L),Ne=null!=(se=null==F?void 0:F[A])?se:0,ge=be?he:pe-E[fe]-P[fe]-Ne+D.altAxis,Ve=be?pe+E[fe]+P[fe]-Ne-D.altAxis:Ce,ve=k&&be?(0,c.withinMaxClamp)(ge,pe,Ve):(0,c.within)(k?ge:he,pe,k?Ve:Ce);M[A]=ve,R[A]=ve-pe}t.modifiersData[f]=R}},requiresIfExists:["offset"]};t["default"]=h},47952:function(e,t,n){"use strict";t.__esModule=!0,t.defaultModifiers=t.createPopper=void 0;var o=n(21926);t.popperGenerator=o.popperGenerator,t.detectOverflow=o.detectOverflow;var r=l(n(53887)),a=l(n(83662)),i=l(n(54680)),c=l(n(89290));function l(e){return e&&e.__esModule?e:{"default":e}}var d=[r["default"],a["default"],i["default"],c["default"]];t.defaultModifiers=d;var s=(0,o.popperGenerator)({defaultModifiers:d});t.createPopper=s},17827:function(e,t,n){"use strict";t.__esModule=!0;var o={createPopper:!0,createPopperLite:!0,defaultModifiers:!0,popperGenerator:!0,detectOverflow:!0};t.defaultModifiers=t.createPopperLite=t.createPopper=void 0;var r=n(21926);t.popperGenerator=r.popperGenerator,t.detectOverflow=r.detectOverflow;var a=C(n(53887)),i=C(n(83662)),c=C(n(54680)),l=C(n(89290)),d=C(n(99873)),s=C(n(82566)),u=C(n(21031)),m=C(n(71313)),p=C(n(27353)),f=n(47952);t.createPopperLite=f.createPopper;var h=n(4207);function C(e){return e&&e.__esModule?e:{"default":e}}Object.keys(h).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(o,e)||e in t&&t[e]===h[e]||(t[e]=h[e]))}));var b=[a["default"],i["default"],c["default"],l["default"],d["default"],s["default"],u["default"],m["default"],p["default"]];t.defaultModifiers=b;var N=(0,r.popperGenerator)({defaultModifiers:b});t.createPopperLite=t.createPopper=N},2894:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t={});var n=t,c=n.placement,l=n.boundary,d=n.rootBoundary,s=n.padding,u=n.flipVariations,m=n.allowedAutoPlacements,p=void 0===m?r.placements:m,f=(0,o["default"])(c),h=f?u?r.variationPlacements:r.variationPlacements.filter((function(e){return(0,o["default"])(e)===f})):r.basePlacements,C=h.filter((function(e){return p.indexOf(e)>=0}));0===C.length&&(C=h);var b=C.reduce((function(t,n){return t[n]=(0,a["default"])(e,{placement:n,boundary:l,rootBoundary:d,padding:s})[(0,i["default"])(n)],t}),{});return Object.keys(b).sort((function(e,t){return b[e]-b[t]}))};var o=c(n(31686)),r=n(15954),a=c(n(75949)),i=c(n(27629));function c(e){return e&&e.__esModule?e:{"default":e}}},2002:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t,n=e.reference,c=e.element,l=e.placement,d=l?(0,o["default"])(l):null,s=l?(0,r["default"])(l):null,u=n.x+n.width/2-c.width/2,m=n.y+n.height/2-c.height/2;switch(d){case i.top:t={x:u,y:n.y-c.height};break;case i.bottom:t={x:u,y:n.y+n.height};break;case i.right:t={x:n.x+n.width,y:m};break;case i.left:t={x:n.x-c.width,y:m};break;default:t={x:n.x,y:n.y}}var p=d?(0,a["default"])(d):null;if(null!=p){var f="y"===p?"height":"width";switch(s){case i.start:t[p]=t[p]-(n[f]/2-c[f]/2);break;case i.end:t[p]=t[p]+(n[f]/2-c[f]/2)}}return t};var o=c(n(27629)),r=c(n(31686)),a=c(n(78772)),i=n(15954);function c(e){return e&&e.__esModule?e:{"default":e}}},27672:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){var t;return function(){return t||(t=new Promise((function(n){Promise.resolve().then((function(){t=undefined,n(e())}))}))),t}}},75949:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t={});var n=t,m=n.placement,p=void 0===m?e.placement:m,f=n.boundary,h=void 0===f?l.clippingParents:f,C=n.rootBoundary,b=void 0===C?l.viewport:C,N=n.elementContext,g=void 0===N?l.popper:N,V=n.altBoundary,v=void 0!==V&&V,_=n.padding,y=void 0===_?0:_,k=(0,s["default"])("number"!=typeof y?y:(0,u["default"])(y,l.basePlacements)),x=g===l.popper?l.reference:l.popper,w=e.rects.popper,B=e.elements[v?x:g],L=(0,o["default"])((0,d.isElement)(B)?B:B.contextElement||(0,r["default"])(e.elements.popper),h,b),S=(0,a["default"])(e.elements.reference),I=(0,i["default"])({reference:S,element:w,strategy:"absolute",placement:p}),T=(0,c["default"])(Object.assign({},w,I)),A=g===l.popper?T:S,M={top:L.top-A.top+k.top,bottom:A.bottom-L.bottom+k.bottom,left:L.left-A.left+k.left,right:A.right-L.right+k.right},E=e.modifiersData.offset;if(g===l.popper&&E){var P=E[p];Object.keys(M).forEach((function(e){var t=[l.right,l.bottom].indexOf(e)>=0?1:-1,n=[l.top,l.bottom].indexOf(e)>=0?"y":"x";M[e]+=P[n]*t}))}return M};var o=m(n(65647)),r=m(n(25890)),a=m(n(11100)),i=m(n(2002)),c=m(n(73060)),l=n(15954),d=n(79388),s=m(n(11277)),u=m(n(45674));function m(e){return e&&e.__esModule?e:{"default":e}}},45674:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}},80885:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o=0?"x":"y"}},31477:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.replace(/left|right|bottom|top/g,(function(e){return n[e]}))};var n={left:"right",right:"left",bottom:"top",top:"bottom"}},44214:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.replace(/start|end/g,(function(e){return n[e]}))};var n={start:"end",end:"start"}},31686:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.split("-")[1]}},36291:function(e,t){"use strict";t.__esModule=!0,t.round=t.min=t.max=void 0;var n=Math.max;t.max=n;var o=Math.min;t.min=o;var r=Math.round;t.round=r},54220:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){var t=e.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{});return Object.keys(t).map((function(e){return t[e]}))}},11277:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return Object.assign({},(0,r["default"])(),e)};var o,r=(o=n(22710))&&o.__esModule?o:{"default":o}},69282:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=function(e){var t=new Map,n=new Set,o=[];function r(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var o=t.get(e);o&&r(o)}})),o.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||r(e)})),o}(e);return o.modifierPhases.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])};var o=n(15954)},73060:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}},12459:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e,t){var n=new Set;return e.filter((function(e){var o=t(e);if(!n.has(o))return n.add(o),!0}))}},30752:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){e.forEach((function(t){[].concat(Object.keys(t),a).filter((function(e,t,n){return n.indexOf(e)===t})).forEach((function(n){switch(n){case"name":t.name;break;case"enabled":t.enabled;break;case"phase":r.modifierPhases.indexOf(t.phase);break;case"fn":t.fn;break;case"effect":null!=t.effect&&t.effect;break;case"requires":null!=t.requires&&Array.isArray(t.requires);break;case"requiresIfExists":Array.isArray(t.requiresIfExists)}t.requires&&t.requires.forEach((function(t){e.find((function(e){return e.name===t}))}))}))}))};(o=n(80885))&&o.__esModule;var o,r=n(15954);var a=["name","enabled","phase","fn","effect","requires","options"]},54444:function(e,t,n){"use strict";t.__esModule=!0,t.within=r,t.withinMaxClamp=function(e,t,n){var o=r(e,t,n);return o>n?n:o};var o=n(36291);function r(e,t,n){return(0,o.max)(e,(0,o.min)(t,n))}},7696:function(e,t,n){"use strict";var o=n(45744),r=n(56279),a=TypeError;e.exports=function(e){if(o(e))return e;throw a(r(e)+" is not a function")}},99079:function(e,t,n){"use strict";var o=n(49332),r=n(56279),a=TypeError;e.exports=function(e){if(o(e))return e;throw a(r(e)+" is not a constructor")}},3760:function(e,t,n){"use strict";var o=n(45744),r=String,a=TypeError;e.exports=function(e){if("object"==typeof e||o(e))return e;throw a("Can't set "+r(e)+" as a prototype")}},48144:function(e,t,n){"use strict";var o=n(43741),r=n(48525),a=n(92723).f,i=o("unscopables"),c=Array.prototype;c[i]==undefined&&a(c,i,{configurable:!0,value:r(null)}),e.exports=function(e){c[i][e]=!0}},21679:function(e,t,n){"use strict";var o=n(59529).charAt;e.exports=function(e,t,n){return t+(n?o(e,t).length:1)}},41706:function(e,t,n){"use strict";var o=n(76469),r=TypeError;e.exports=function(e,t){if(o(t,e))return e;throw r("Incorrect invocation")}},65522:function(e,t,n){"use strict";var o=n(5484),r=String,a=TypeError;e.exports=function(e){if(o(e))return e;throw a(r(e)+" is not an object")}},65167:function(e){"use strict";e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},26974:function(e,t,n){"use strict";var o=n(39125);e.exports=o((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},92574:function(e,t,n){"use strict";var o,r,a,i=n(65167),c=n(77849),l=n(61770),d=n(45744),s=n(5484),u=n(77807),m=n(10374),p=n(56279),f=n(87229),h=n(73e3),C=n(92723).f,b=n(76469),N=n(56997),g=n(44958),V=n(43741),v=n(8220),_=n(48797),y=_.enforce,k=_.get,x=l.Int8Array,w=x&&x.prototype,B=l.Uint8ClampedArray,L=B&&B.prototype,S=x&&N(x),I=w&&N(w),T=Object.prototype,A=l.TypeError,M=V("toStringTag"),E=v("TYPED_ARRAY_TAG"),P="TypedArrayConstructor",O=i&&!!g&&"Opera"!==m(l.opera),D=!1,F={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},R={BigInt64Array:8,BigUint64Array:8},j=function(e){if(!s(e))return!1;var t=m(e);return"DataView"===t||u(F,t)||u(R,t)},W=function(e){if(!s(e))return!1;var t=m(e);return u(F,t)||u(R,t)};for(o in F)(a=(r=l[o])&&r.prototype)?y(a).TypedArrayConstructor=r:O=!1;for(o in R)(a=(r=l[o])&&r.prototype)&&(y(a).TypedArrayConstructor=r);if((!O||!d(S)||S===Function.prototype)&&(S=function(){throw A("Incorrect invocation")},O))for(o in F)l[o]&&g(l[o],S);if((!O||!I||I===T)&&(I=S.prototype,O))for(o in F)l[o]&&g(l[o].prototype,I);if(O&&N(L)!==I&&g(L,I),c&&!u(I,M))for(o in D=!0,C(I,M,{get:function(){return s(this)?this[E]:undefined}}),F)l[o]&&f(l[o],E,o);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:O,TYPED_ARRAY_TAG:D&&E,aTypedArray:function(e){if(W(e))return e;throw A("Target is not a typed array")},aTypedArrayConstructor:function(e){if(d(e)&&(!g||b(S,e)))return e;throw A(p(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,n,o){if(c){if(n)for(var r in F){var a=l[r];if(a&&u(a.prototype,e))try{delete a.prototype[e]}catch(i){try{a.prototype[e]=t}catch(d){}}}I[e]&&!n||h(I,e,n?t:O&&w[e]||t,o)}},exportTypedArrayStaticMethod:function(e,t,n){var o,r;if(c){if(g){if(n)for(o in F)if((r=l[o])&&u(r,e))try{delete r[e]}catch(a){}if(S[e]&&!n)return;try{return h(S,e,n?t:O&&S[e]||t)}catch(a){}}for(o in F)!(r=l[o])||r[e]&&!n||h(r,e,t)}},getTypedArrayConstructor:function z(e){var t=N(e);if(s(t)){var n=k(t);return n&&u(n,P)?n.TypedArrayConstructor:z(t)}},isView:j,isTypedArray:W,TypedArray:S,TypedArrayPrototype:I}},10377:function(e,t,n){"use strict";var o=n(61770),r=n(90655),a=n(77849),i=n(65167),c=n(82429),l=n(87229),d=n(60495),s=n(39125),u=n(41706),m=n(94868),p=n(87543),f=n(76124),h=n(29209),C=n(56997),b=n(44958),N=n(94600).f,g=n(92723).f,V=n(8093),v=n(74337),_=n(93182),y=n(48797),k=c.PROPER,x=c.CONFIGURABLE,w=y.get,B=y.set,L="ArrayBuffer",S="DataView",I="Wrong index",T=o.ArrayBuffer,A=T,M=A&&A.prototype,E=o.DataView,P=E&&E.prototype,O=Object.prototype,D=o.Array,F=o.RangeError,R=r(V),j=r([].reverse),W=h.pack,z=h.unpack,U=function(e){return[255&e]},H=function(e){return[255&e,e>>8&255]},G=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},K=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},Y=function(e){return W(e,23,4)},q=function(e){return W(e,52,8)},$=function(e,t){g(e.prototype,t,{get:function(){return w(this)[t]}})},X=function(e,t,n,o){var r=f(n),a=w(e);if(r+t>a.byteLength)throw F(I);var i=w(a.buffer).bytes,c=r+a.byteOffset,l=v(i,c,c+t);return o?l:j(l)},Q=function(e,t,n,o,r,a){var i=f(n),c=w(e);if(i+t>c.byteLength)throw F(I);for(var l=w(c.buffer).bytes,d=i+c.byteOffset,s=o(+r),u=0;ute;)(Z=ee[te++])in A||l(A,Z,T[Z]);M.constructor=A}b&&C(P)!==O&&b(P,O);var ne=new E(new A(2)),oe=r(P.setInt8);ne.setInt8(0,2147483648),ne.setInt8(1,2147483649),!ne.getInt8(0)&&ne.getInt8(1)||d(P,{setInt8:function(e,t){oe(this,e,t<<24>>24)},setUint8:function(e,t){oe(this,e,t<<24>>24)}},{unsafe:!0})}else M=(A=function(e){u(this,M);var t=f(e);B(this,{bytes:R(D(t),0),byteLength:t}),a||(this.byteLength=t)}).prototype,P=(E=function(e,t,n){u(this,P),u(e,M);var o=w(e).byteLength,r=m(t);if(r<0||r>o)throw F("Wrong offset");if(r+(n=n===undefined?o-r:p(n))>o)throw F("Wrong length");B(this,{buffer:e,byteLength:n,byteOffset:r}),a||(this.buffer=e,this.byteLength=n,this.byteOffset=r)}).prototype,a&&($(A,"byteLength"),$(E,"buffer"),$(E,"byteLength"),$(E,"byteOffset")),d(P,{getInt8:function(e){return X(this,1,e)[0]<<24>>24},getUint8:function(e){return X(this,1,e)[0]},getInt16:function(e){var t=X(this,2,e,arguments.length>1?arguments[1]:undefined);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=X(this,2,e,arguments.length>1?arguments[1]:undefined);return t[1]<<8|t[0]},getInt32:function(e){return K(X(this,4,e,arguments.length>1?arguments[1]:undefined))},getUint32:function(e){return K(X(this,4,e,arguments.length>1?arguments[1]:undefined))>>>0},getFloat32:function(e){return z(X(this,4,e,arguments.length>1?arguments[1]:undefined),23)},getFloat64:function(e){return z(X(this,8,e,arguments.length>1?arguments[1]:undefined),52)},setInt8:function(e,t){Q(this,1,e,U,t)},setUint8:function(e,t){Q(this,1,e,U,t)},setInt16:function(e,t){Q(this,2,e,H,t,arguments.length>2?arguments[2]:undefined)},setUint16:function(e,t){Q(this,2,e,H,t,arguments.length>2?arguments[2]:undefined)},setInt32:function(e,t){Q(this,4,e,G,t,arguments.length>2?arguments[2]:undefined)},setUint32:function(e,t){Q(this,4,e,G,t,arguments.length>2?arguments[2]:undefined)},setFloat32:function(e,t){Q(this,4,e,Y,t,arguments.length>2?arguments[2]:undefined)},setFloat64:function(e,t){Q(this,8,e,q,t,arguments.length>2?arguments[2]:undefined)}});_(A,L),_(E,S),e.exports={ArrayBuffer:A,DataView:E}},21497:function(e,t,n){"use strict";var o=n(73502),r=n(312),a=n(10950),i=n(33099),c=Math.min;e.exports=[].copyWithin||function(e,t){var n=o(this),l=a(n),d=r(e,l),s=r(t,l),u=arguments.length>2?arguments[2]:undefined,m=c((u===undefined?l:r(u,l))-s,l-d),p=1;for(s0;)s in n?n[d]=n[s]:i(n,d),d+=p,s+=p;return n}},8093:function(e,t,n){"use strict";var o=n(73502),r=n(312),a=n(10950);e.exports=function(e){for(var t=o(this),n=a(t),i=arguments.length,c=r(i>1?arguments[1]:undefined,n),l=i>2?arguments[2]:undefined,d=l===undefined?n:r(l,n);d>c;)t[c++]=e;return t}},29074:function(e,t,n){"use strict";var o=n(36249).forEach,r=n(74640)("forEach");e.exports=r?[].forEach:function(e){return o(this,e,arguments.length>1?arguments[1]:undefined)}},15993:function(e,t,n){"use strict";var o=n(10950);e.exports=function(e,t){for(var n=0,r=o(t),a=new e(r);r>n;)a[n]=t[n++];return a}},49981:function(e,t,n){"use strict";var o=n(9341),r=n(76348),a=n(73502),i=n(63635),c=n(94535),l=n(49332),d=n(10950),s=n(61154),u=n(93247),m=n(52522),p=Array;e.exports=function(e){var t=a(e),n=l(this),f=arguments.length,h=f>1?arguments[1]:undefined,C=h!==undefined;C&&(h=o(h,f>2?arguments[2]:undefined));var b,N,g,V,v,_,y=m(t),k=0;if(!y||this===p&&c(y))for(b=d(t),N=n?new this(b):p(b);b>k;k++)_=C?h(t[k],k):t[k],s(N,k,_);else for(v=(V=u(t,y)).next,N=n?new this:[];!(g=r(v,V)).done;k++)_=C?i(V,h,[g.value,k],!0):g.value,s(N,k,_);return N.length=k,N}},89344:function(e,t,n){"use strict";var o=n(4254),r=n(312),a=n(10950),i=function(e){return function(t,n,i){var c,l=o(t),d=a(l),s=r(i,d);if(e&&n!=n){for(;d>s;)if((c=l[s++])!=c)return!0}else for(;d>s;s++)if((e||s in l)&&l[s]===n)return e||s||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},36249:function(e,t,n){"use strict";var o=n(9341),r=n(90655),a=n(83609),i=n(73502),c=n(10950),l=n(64711),d=r([].push),s=function(e){var t=1==e,n=2==e,r=3==e,s=4==e,u=6==e,m=7==e,p=5==e||u;return function(f,h,C,b){for(var N,g,V=i(f),v=a(V),_=o(h,C),y=c(v),k=0,x=b||l,w=t?x(f,y):n||m?x(f,0):undefined;y>k;k++)if((p||k in v)&&(g=_(N=v[k],k,V),e))if(t)w[k]=g;else if(g)switch(e){case 3:return!0;case 5:return N;case 6:return k;case 2:d(w,N)}else switch(e){case 4:return!1;case 7:d(w,N)}return u?-1:r||s?s:w}};e.exports={forEach:s(0),map:s(1),filter:s(2),some:s(3),every:s(4),find:s(5),findIndex:s(6),filterReject:s(7)}},93881:function(e,t,n){"use strict";var o=n(10261),r=n(4254),a=n(94868),i=n(10950),c=n(74640),l=Math.min,d=[].lastIndexOf,s=!!d&&1/[1].lastIndexOf(1,-0)<0,u=c("lastIndexOf"),m=s||!u;e.exports=m?function(e){if(s)return o(d,this,arguments)||0;var t=r(this),n=i(t),c=n-1;for(arguments.length>1&&(c=l(c,a(arguments[1]))),c<0&&(c=n+c);c>=0;c--)if(c in t&&t[c]===e)return c||0;return-1}:d},10112:function(e,t,n){"use strict";var o=n(39125),r=n(43741),a=n(64279),i=r("species");e.exports=function(e){return a>=51||!o((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},74640:function(e,t,n){"use strict";var o=n(39125);e.exports=function(e,t){var n=[][e];return!!n&&o((function(){n.call(null,t||function(){return 1},1)}))}},21038:function(e,t,n){"use strict";var o=n(7696),r=n(73502),a=n(83609),i=n(10950),c=TypeError,l=function(e){return function(t,n,l,d){o(n);var s=r(t),u=a(s),m=i(s),p=e?m-1:0,f=e?-1:1;if(l<2)for(;;){if(p in u){d=u[p],p+=f;break}if(p+=f,e?p<0:m<=p)throw c("Reduce of empty array with no initial value")}for(;e?p>=0:m>p;p+=f)p in u&&(d=n(d,u[p],p,s));return d}};e.exports={left:l(!1),right:l(!0)}},74337:function(e,t,n){"use strict";var o=n(312),r=n(10950),a=n(61154),i=Array,c=Math.max;e.exports=function(e,t,n){for(var l=r(e),d=o(t,l),s=o(n===undefined?l:n,l),u=i(c(s-d,0)),m=0;d0;)e[o]=e[--o];o!==a++&&(e[o]=n)}return e},i=function(e,t,n,o){for(var r=t.length,a=n.length,i=0,c=0;i1?arguments[1]:undefined);t=t?t.next:n.first;)for(o(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!N(this,e)}}),a(p,n?{get:function(e){var t=N(this,e);return t&&t.value},set:function(e,t){return b(this,0===e?0:e,t)}}:{add:function(e){return b(this,e=0===e?0:e,e)}}),u&&o(p,"size",{get:function(){return C(this).size}}),s},setStrong:function(e,t,n){var o=t+" Iterator",r=h(t),a=h(o);d(e,t,(function(e,t){f(this,{type:o,target:e,state:r(e),kind:t,last:undefined})}),(function(){for(var e=a(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=undefined,{value:undefined,done:!0})}),n?"entries":"values",!n,!0),s(t)}}},81995:function(e,t,n){"use strict";var o=n(90655),r=n(60495),a=n(49632).getWeakData,i=n(65522),c=n(5484),l=n(41706),d=n(47916),s=n(36249),u=n(77807),m=n(48797),p=m.set,f=m.getterFor,h=s.find,C=s.findIndex,b=o([].splice),N=0,g=function(e){return e.frozen||(e.frozen=new V)},V=function(){this.entries=[]},v=function(e,t){return h(e.entries,(function(e){return e[0]===t}))};V.prototype={get:function(e){var t=v(this,e);if(t)return t[1]},has:function(e){return!!v(this,e)},set:function(e,t){var n=v(this,e);n?n[1]=t:this.entries.push([e,t])},"delete":function(e){var t=C(this.entries,(function(t){return t[0]===e}));return~t&&b(this.entries,t,1),!!~t}},e.exports={getConstructor:function(e,t,n,o){var s=e((function(e,r){l(e,m),p(e,{type:t,id:N++,frozen:undefined}),r!=undefined&&d(r,e[o],{that:e,AS_ENTRIES:n})})),m=s.prototype,h=f(t),C=function(e,t,n){var o=h(e),r=a(i(t),!0);return!0===r?g(o).set(t,n):r[o.id]=n,e};return r(m,{"delete":function(e){var t=h(this);if(!c(e))return!1;var n=a(e);return!0===n?g(t)["delete"](e):n&&u(n,t.id)&&delete n[t.id]},has:function(e){var t=h(this);if(!c(e))return!1;var n=a(e);return!0===n?g(t).has(e):n&&u(n,t.id)}}),r(m,n?{get:function(e){var t=h(this);if(c(e)){var n=a(e);return!0===n?g(t).get(e):n?n[t.id]:undefined}},set:function(e,t){return C(this,e,t)}}:{add:function(e){return C(this,e,!0)}}),s}}},18291:function(e,t,n){"use strict";var o=n(59450),r=n(61770),a=n(90655),i=n(16851),c=n(73e3),l=n(49632),d=n(47916),s=n(41706),u=n(45744),m=n(5484),p=n(39125),f=n(98994),h=n(93182),C=n(75121);e.exports=function(e,t,n){var b=-1!==e.indexOf("Map"),N=-1!==e.indexOf("Weak"),g=b?"set":"add",V=r[e],v=V&&V.prototype,_=V,y={},k=function(e){var t=a(v[e]);c(v,e,"add"==e?function(e){return t(this,0===e?0:e),this}:"delete"==e?function(e){return!(N&&!m(e))&&t(this,0===e?0:e)}:"get"==e?function(e){return N&&!m(e)?undefined:t(this,0===e?0:e)}:"has"==e?function(e){return!(N&&!m(e))&&t(this,0===e?0:e)}:function(e,n){return t(this,0===e?0:e,n),this})};if(i(e,!u(V)||!(N||v.forEach&&!p((function(){(new V).entries().next()})))))_=n.getConstructor(t,e,b,g),l.enable();else if(i(e,!0)){var x=new _,w=x[g](N?{}:-0,1)!=x,B=p((function(){x.has(1)})),L=f((function(e){new V(e)})),S=!N&&p((function(){for(var e=new V,t=5;t--;)e[g](t,t);return!e.has(-0)}));L||((_=t((function(e,t){s(e,v);var n=C(new V,e,_);return t!=undefined&&d(t,n[g],{that:n,AS_ENTRIES:b}),n}))).prototype=v,v.constructor=_),(B||S)&&(k("delete"),k("has"),b&&k("get")),(S||w)&&k(g),N&&v.clear&&delete v.clear}return y[e]=_,o({global:!0,constructor:!0,forced:_!=V},y),h(_,e),N||n.setStrong(_,e,b),_}},35155:function(e,t,n){"use strict";var o=n(77807),r=n(75379),a=n(12488),i=n(92723);e.exports=function(e,t,n){for(var c=r(t),l=i.f,d=a.f,s=0;s"+l+""}},92413:function(e,t,n){"use strict";var o=n(80936).IteratorPrototype,r=n(48525),a=n(20471),i=n(93182),c=n(53481),l=function(){return this};e.exports=function(e,t,n,d){var s=t+" Iterator";return e.prototype=r(o,{next:a(+!d,n)}),i(e,s,!1,!0),c[s]=l,e}},87229:function(e,t,n){"use strict";var o=n(77849),r=n(92723),a=n(20471);e.exports=o?function(e,t,n){return r.f(e,t,a(1,n))}:function(e,t,n){return e[t]=n,e}},20471:function(e){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},61154:function(e,t,n){"use strict";var o=n(23986),r=n(92723),a=n(20471);e.exports=function(e,t,n){var i=o(t);i in e?r.f(e,i,a(0,n)):e[i]=n}},36849:function(e,t,n){"use strict";var o=n(90655),r=n(39125),a=n(79408).start,i=RangeError,c=Math.abs,l=Date.prototype,d=l.toISOString,s=o(l.getTime),u=o(l.getUTCDate),m=o(l.getUTCFullYear),p=o(l.getUTCHours),f=o(l.getUTCMilliseconds),h=o(l.getUTCMinutes),C=o(l.getUTCMonth),b=o(l.getUTCSeconds);e.exports=r((function(){return"0385-07-25T07:06:39.999Z"!=d.call(new Date(-50000000000001))}))||!r((function(){d.call(new Date(NaN))}))?function(){if(!isFinite(s(this)))throw i("Invalid time value");var e=this,t=m(e),n=f(e),o=t<0?"-":t>9999?"+":"";return o+a(c(t),o?6:4,0)+"-"+a(C(e)+1,2,0)+"-"+a(u(e),2,0)+"T"+a(p(e),2,0)+":"+a(h(e),2,0)+":"+a(b(e),2,0)+"."+a(n,3,0)+"Z"}:d},81990:function(e,t,n){"use strict";var o=n(65522),r=n(2118),a=TypeError;e.exports=function(e){if(o(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw a("Incorrect hint");return r(this,e)}},66384:function(e,t,n){"use strict";var o=n(28859),r=n(92723);e.exports=function(e,t,n){return n.get&&o(n.get,t,{getter:!0}),n.set&&o(n.set,t,{setter:!0}),r.f(e,t,n)}},73e3:function(e,t,n){"use strict";var o=n(45744),r=n(92723),a=n(28859),i=n(58962);e.exports=function(e,t,n,c){c||(c={});var l=c.enumerable,d=c.name!==undefined?c.name:t;return o(n)&&a(n,d,c),c.global?l?e[t]=n:i(t,n):(c.unsafe?e[t]&&(l=!0):delete e[t],l?e[t]=n:r.f(e,t,{value:n,enumerable:!1,configurable:!c.nonConfigurable,writable:!c.nonWritable})),e}},60495:function(e,t,n){"use strict";var o=n(73e3);e.exports=function(e,t,n){for(var r in t)o(e,r,t[r],n);return e}},58962:function(e,t,n){"use strict";var o=n(61770),r=Object.defineProperty;e.exports=function(e,t){try{r(o,e,{value:t,configurable:!0,writable:!0})}catch(n){o[e]=t}return t}},11335:function(e,t,n){"use strict";var o=n(59450),r=n(76348),a=n(37249),i=n(82429),c=n(45744),l=n(92413),d=n(56997),s=n(44958),u=n(93182),m=n(87229),p=n(73e3),f=n(43741),h=n(53481),C=n(80936),b=i.PROPER,N=i.CONFIGURABLE,g=C.IteratorPrototype,V=C.BUGGY_SAFARI_ITERATORS,v=f("iterator"),_="keys",y="values",k="entries",x=function(){return this};e.exports=function(e,t,n,i,f,C,w){l(n,t,i);var B,L,S,I=function(e){if(e===f&&P)return P;if(!V&&e in M)return M[e];switch(e){case _:case y:case k:return function(){return new n(this,e)}}return function(){return new n(this)}},T=t+" Iterator",A=!1,M=e.prototype,E=M[v]||M["@@iterator"]||f&&M[f],P=!V&&E||I(f),O="Array"==t&&M.entries||E;if(O&&(B=d(O.call(new e)))!==Object.prototype&&B.next&&(a||d(B)===g||(s?s(B,g):c(B[v])||p(B,v,x)),u(B,T,!0,!0),a&&(h[T]=x)),b&&f==y&&E&&E.name!==y&&(!a&&N?m(M,"name",y):(A=!0,P=function(){return r(E,this)})),f)if(L={values:I(y),keys:C?P:I(_),entries:I(k)},w)for(S in L)(V||A||!(S in M))&&p(M,S,L[S]);else o({target:t,proto:!0,forced:V||A},L);return a&&!w||M[v]===P||p(M,v,P,{name:f}),h[t]=P,L}},89604:function(e,t,n){"use strict";var o=n(62660),r=n(77807),a=n(68438),i=n(92723).f;e.exports=function(e){var t=o.Symbol||(o.Symbol={});r(t,e)||i(t,e,{value:a.f(e)})}},33099:function(e,t,n){"use strict";var o=n(56279),r=TypeError;e.exports=function(e,t){if(!delete e[t])throw r("Cannot delete property "+o(t)+" of "+o(e))}},77849:function(e,t,n){"use strict";var o=n(39125);e.exports=!o((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},50842:function(e,t,n){"use strict";var o=n(61770),r=n(5484),a=o.document,i=r(a)&&r(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},97989:function(e){"use strict";var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},13811:function(e,t,n){"use strict";var o=n(42630).match(/firefox\/(\d+)/i);e.exports=!!o&&+o[1]},15904:function(e){"use strict";e.exports="object"==typeof window&&"object"!=typeof Deno},86936:function(e,t,n){"use strict";var o=n(42630);e.exports=/MSIE|Trident/.test(o)},48715:function(e,t,n){"use strict";var o=n(42630),r=n(61770);e.exports=/ipad|iphone|ipod/i.test(o)&&r.Pebble!==undefined},25515:function(e,t,n){"use strict";var o=n(42630);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(o)},67745:function(e,t,n){"use strict";var o=n(61496),r=n(61770);e.exports="process"==o(r.process)},35016:function(e,t,n){"use strict";var o=n(42630);e.exports=/web0s(?!.*chrome)/i.test(o)},42630:function(e,t,n){"use strict";var o=n(54965);e.exports=o("navigator","userAgent")||""},64279:function(e,t,n){"use strict";var o,r,a=n(61770),i=n(42630),c=a.process,l=a.Deno,d=c&&c.versions||l&&l.version,s=d&&d.v8;s&&(r=(o=s.split("."))[0]>0&&o[0]<4?1:+(o[0]+o[1])),!r&&i&&(!(o=i.match(/Edge\/(\d+)/))||o[1]>=74)&&(o=i.match(/Chrome\/(\d+)/))&&(r=+o[1]),e.exports=r},86778:function(e,t,n){"use strict";var o=n(42630).match(/AppleWebKit\/(\d+)\./);e.exports=!!o&&+o[1]},59096:function(e){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},59450:function(e,t,n){"use strict";var o=n(61770),r=n(12488).f,a=n(87229),i=n(73e3),c=n(58962),l=n(35155),d=n(16851);e.exports=function(e,t){var n,s,u,m,p,f=e.target,h=e.global,C=e.stat;if(n=h?o:C?o[f]||c(f,{}):(o[f]||{}).prototype)for(s in t){if(m=t[s],u=e.dontCallGetSet?(p=r(n,s))&&p.value:n[s],!d(h?s:f+(C?".":"#")+s,e.forced)&&u!==undefined){if(typeof m==typeof u)continue;l(m,u)}(e.sham||u&&u.sham)&&a(m,"sham",!0),i(n,s,m,e)}}},39125:function(e){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},6531:function(e,t,n){"use strict";n(50044);var o=n(90655),r=n(73e3),a=n(50174),i=n(39125),c=n(43741),l=n(87229),d=c("species"),s=RegExp.prototype;e.exports=function(e,t,n,u){var m=c(e),p=!i((function(){var t={};return t[m]=function(){return 7},7!=""[e](t)})),f=p&&!i((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[d]=function(){return n},n.flags="",n[m]=/./[m]),n.exec=function(){return t=!0,null},n[m](""),!t}));if(!p||!f||n){var h=o(/./[m]),C=t(m,""[e],(function(e,t,n,r,i){var c=o(e),l=t.exec;return l===a||l===s.exec?p&&!i?{done:!0,value:h(t,n,r)}:{done:!0,value:c(n,t,r)}:{done:!1}}));r(String.prototype,e,C[0]),r(s,m,C[1])}u&&l(s[m],"sham",!0)}},23507:function(e,t,n){"use strict";var o=n(98037),r=n(10950),a=n(97989),i=n(9341);e.exports=function c(e,t,n,l,d,s,u,m){for(var p,f=d,h=0,C=!!u&&i(u,m);h0&&o(p)?f=c(e,t,p,r(p),f,s-1)-1:(a(f+1),e[f]=p),f++),h++;return f}},57724:function(e,t,n){"use strict";var o=n(39125);e.exports=!o((function(){return Object.isExtensible(Object.preventExtensions({}))}))},10261:function(e,t,n){"use strict";var o=n(14687),r=Function.prototype,a=r.apply,i=r.call;e.exports="object"==typeof Reflect&&Reflect.apply||(o?i.bind(a):function(){return i.apply(a,arguments)})},9341:function(e,t,n){"use strict";var o=n(90655),r=n(7696),a=n(14687),i=o(o.bind);e.exports=function(e,t){return r(e),t===undefined?e:a?i(e,t):function(){return e.apply(t,arguments)}}},14687:function(e,t,n){"use strict";var o=n(39125);e.exports=!o((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},38349:function(e,t,n){"use strict";var o=n(90655),r=n(7696),a=n(5484),i=n(77807),c=n(53898),l=n(14687),d=Function,s=o([].concat),u=o([].join),m={},p=function(e,t,n){if(!i(m,t)){for(var o=[],r=0;r]*>)/g,s=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,o,u,m){var p=n+e.length,f=o.length,h=s;return u!==undefined&&(u=r(u),h=d),c(m,h,(function(r,c){var d;switch(i(c,0)){case"$":return"$";case"&":return e;case"`":return l(t,0,n);case"'":return l(t,p);case"<":d=u[l(c,1,-1)];break;default:var s=+c;if(0===s)return r;if(s>f){var m=a(s/10);return 0===m?r:m<=f?o[m-1]===undefined?i(c,1):o[m-1]+i(c,1):r}d=o[s-1]}return d===undefined?"":d}))}},61770:function(e,t,n){"use strict";var o=function(e){return e&&e.Math==Math&&e};e.exports=o("object"==typeof globalThis&&globalThis)||o("object"==typeof window&&window)||o("object"==typeof self&&self)||o("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},77807:function(e,t,n){"use strict";var o=n(90655),r=n(73502),a=o({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return a(r(e),t)}},31645:function(e){"use strict";e.exports={}},66791:function(e,t,n){"use strict";var o=n(61770);e.exports=function(e,t){var n=o.console;n&&n.error&&(1==arguments.length?n.error(e):n.error(e,t))}},29093:function(e,t,n){"use strict";var o=n(54965);e.exports=o("document","documentElement")},17041:function(e,t,n){"use strict";var o=n(77849),r=n(39125),a=n(50842);e.exports=!o&&!r((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},29209:function(e){"use strict";var t=Array,n=Math.abs,o=Math.pow,r=Math.floor,a=Math.log,i=Math.LN2;e.exports={pack:function(e,c,l){var d,s,u,m=t(l),p=8*l-c-1,f=(1<>1,C=23===c?o(2,-24)-o(2,-77):0,b=e<0||0===e&&1/e<0?1:0,N=0;for((e=n(e))!=e||e===Infinity?(s=e!=e?1:0,d=f):(d=r(a(e)/i),e*(u=o(2,-d))<1&&(d--,u*=2),(e+=d+h>=1?C/u:C*o(2,1-h))*u>=2&&(d++,u/=2),d+h>=f?(s=0,d=f):d+h>=1?(s=(e*u-1)*o(2,c),d+=h):(s=e*o(2,h-1)*o(2,c),d=0));c>=8;)m[N++]=255&s,s/=256,c-=8;for(d=d<0;)m[N++]=255&d,d/=256,p-=8;return m[--N]|=128*b,m},unpack:function(e,t){var n,r=e.length,a=8*r-t-1,i=(1<>1,l=a-7,d=r-1,s=e[d--],u=127&s;for(s>>=7;l>0;)u=256*u+e[d--],l-=8;for(n=u&(1<<-l)-1,u>>=-l,l+=t;l>0;)n=256*n+e[d--],l-=8;if(0===u)u=1-c;else{if(u===i)return n?NaN:s?-Infinity:Infinity;n+=o(2,t),u-=c}return(s?-1:1)*n*o(2,u-t)}}},83609:function(e,t,n){"use strict";var o=n(90655),r=n(39125),a=n(61496),i=Object,c=o("".split);e.exports=r((function(){return!i("z").propertyIsEnumerable(0)}))?function(e){return"String"==a(e)?c(e,""):i(e)}:i},75121:function(e,t,n){"use strict";var o=n(45744),r=n(5484),a=n(44958);e.exports=function(e,t,n){var i,c;return a&&o(i=t.constructor)&&i!==n&&r(c=i.prototype)&&c!==n.prototype&&a(e,c),e}},44790:function(e,t,n){"use strict";var o=n(90655),r=n(45744),a=n(42878),i=o(Function.toString);r(a.inspectSource)||(a.inspectSource=function(e){return i(e)}),e.exports=a.inspectSource},49632:function(e,t,n){"use strict";var o=n(59450),r=n(90655),a=n(31645),i=n(5484),c=n(77807),l=n(92723).f,d=n(94600),s=n(25586),u=n(65067),m=n(8220),p=n(57724),f=!1,h=m("meta"),C=0,b=function(e){l(e,h,{value:{objectID:"O"+C++,weakData:{}}})},N=e.exports={enable:function(){N.enable=function(){},f=!0;var e=d.f,t=r([].splice),n={};n[h]=1,e(n).length&&(d.f=function(n){for(var o=e(n),r=0,a=o.length;rN;N++)if((V=S(e[N]))&&d(h,V))return V;return new f(!1)}C=s(e,b)}for(v=C.next;!(_=r(v,C)).done;){try{V=S(_.value)}catch(I){m(C,"throw",I)}if("object"==typeof V&&V&&d(h,V))return V}return new f(!1)}},80261:function(e,t,n){"use strict";var o=n(76348),r=n(65522),a=n(36750);e.exports=function(e,t,n){var i,c;r(e);try{if(!(i=a(e,"return"))){if("throw"===t)throw n;return n}i=o(i,e)}catch(l){c=!0,i=l}if("throw"===t)throw n;if(c)throw i;return r(i),n}},80936:function(e,t,n){"use strict";var o,r,a,i=n(39125),c=n(45744),l=n(48525),d=n(56997),s=n(73e3),u=n(43741),m=n(37249),p=u("iterator"),f=!1;[].keys&&("next"in(a=[].keys())?(r=d(d(a)))!==Object.prototype&&(o=r):f=!0),o==undefined||i((function(){var e={};return o[p].call(e)!==e}))?o={}:m&&(o=l(o)),c(o[p])||s(o,p,(function(){return this})),e.exports={IteratorPrototype:o,BUGGY_SAFARI_ITERATORS:f}},53481:function(e){"use strict";e.exports={}},10950:function(e,t,n){"use strict";var o=n(87543);e.exports=function(e){return o(e.length)}},28859:function(e,t,n){"use strict";var o=n(39125),r=n(45744),a=n(77807),i=n(77849),c=n(82429).CONFIGURABLE,l=n(44790),d=n(48797),s=d.enforce,u=d.get,m=Object.defineProperty,p=i&&!o((function(){return 8!==m((function(){}),"length",{value:8}).length})),f=String(String).split("String"),h=e.exports=function(e,t,n){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!a(e,"name")||c&&e.name!==t)&&m(e,"name",{value:t,configurable:!0}),p&&n&&a(n,"arity")&&e.length!==n.arity&&m(e,"length",{value:n.arity});try{n&&a(n,"constructor")&&n.constructor?i&&m(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=undefined)}catch(r){}var o=s(e);return a(o,"source")||(o.source=f.join("string"==typeof t?t:"")),e};Function.prototype.toString=h((function(){return r(this)&&u(this).source||l(this)}),"toString")},73346:function(e){"use strict";var t=Math.expm1,n=Math.exp;e.exports=!t||t(10)>22025.465794806718||t(10)<22025.465794806718||-2e-17!=t(-2e-17)?function(e){var t=+e;return 0==t?t:t>-1e-6&&t<1e-6?t+t*t/2:n(t)-1}:t},92647:function(e,t,n){"use strict";var o=n(61303),r=Math.abs,a=Math.pow,i=a(2,-52),c=a(2,-23),l=a(2,127)*(2-c),d=a(2,-126);e.exports=Math.fround||function(e){var t,n,a=+e,s=r(a),u=o(a);return sl||n!=n?u*Infinity:u*n}},12153:function(e){"use strict";var t=Math.log,n=Math.LOG10E;e.exports=Math.log10||function(e){return t(e)*n}},28010:function(e){"use strict";var t=Math.log;e.exports=Math.log1p||function(e){var n=+e;return n>-1e-8&&n<1e-8?n-n*n/2:t(1+n)}},61303:function(e){"use strict";e.exports=Math.sign||function(e){var t=+e;return 0==t||t!=t?t:t<0?-1:1}},9275:function(e){"use strict";var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var o=+e;return(o>0?n:t)(o)}},34063:function(e,t,n){"use strict";var o,r,a,i,c,l,d,s,u=n(61770),m=n(9341),p=n(12488).f,f=n(61777).set,h=n(25515),C=n(48715),b=n(35016),N=n(67745),g=u.MutationObserver||u.WebKitMutationObserver,V=u.document,v=u.process,_=u.Promise,y=p(u,"queueMicrotask"),k=y&&y.value;k||(o=function(){var e,t;for(N&&(e=v.domain)&&e.exit();r;){t=r.fn,r=r.next;try{t()}catch(n){throw r?i():a=undefined,n}}a=undefined,e&&e.enter()},h||N||b||!g||!V?!C&&_&&_.resolve?((d=_.resolve(undefined)).constructor=_,s=m(d.then,d),i=function(){s(o)}):N?i=function(){v.nextTick(o)}:(f=m(f,u),i=function(){f(o)}):(c=!0,l=V.createTextNode(""),new g(o).observe(l,{characterData:!0}),i=function(){l.data=c=!c})),e.exports=k||function(e){var t={fn:e,next:undefined};a&&(a.next=t),r||(r=t,i()),a=t}},58822:function(e,t,n){"use strict";var o=n(67581);e.exports=o&&!!Symbol["for"]&&!!Symbol.keyFor},67581:function(e,t,n){"use strict";var o=n(64279),r=n(39125);e.exports=!!Object.getOwnPropertySymbols&&!r((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&o&&o<41}))},37494:function(e,t,n){"use strict";var o=n(61770),r=n(45744),a=n(44790),i=o.WeakMap;e.exports=r(i)&&/native code/.test(a(i))},16002:function(e,t,n){"use strict";var o=n(7696),r=function(e){var t,n;this.promise=new e((function(e,o){if(t!==undefined||n!==undefined)throw TypeError("Bad Promise constructor");t=e,n=o})),this.resolve=o(t),this.reject=o(n)};e.exports.f=function(e){return new r(e)}},96794:function(e,t,n){"use strict";var o=n(71857),r=TypeError;e.exports=function(e){if(o(e))throw r("The method doesn't accept regular expressions");return e}},46329:function(e,t,n){"use strict";var o=n(61770).isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&o(e)}},90119:function(e,t,n){"use strict";var o=n(61770),r=n(39125),a=n(90655),i=n(95372),c=n(56404).trim,l=n(93966),d=a("".charAt),s=o.parseFloat,u=o.Symbol,m=u&&u.iterator,p=1/s(l+"-0")!=-Infinity||m&&!r((function(){s(Object(m))}));e.exports=p?function(e){var t=c(i(e)),n=s(t);return 0===n&&"-"==d(t,0)?-0:n}:s},80280:function(e,t,n){"use strict";var o=n(61770),r=n(39125),a=n(90655),i=n(95372),c=n(56404).trim,l=n(93966),d=o.parseInt,s=o.Symbol,u=s&&s.iterator,m=/^[+-]?0x/i,p=a(m.exec),f=8!==d(l+"08")||22!==d(l+"0x16")||u&&!r((function(){d(Object(u))}));e.exports=f?function(e,t){var n=c(i(e));return d(n,t>>>0||(p(m,n)?16:10))}:d},35350:function(e,t,n){"use strict";var o=n(77849),r=n(90655),a=n(76348),i=n(39125),c=n(21417),l=n(41543),d=n(89328),s=n(73502),u=n(83609),m=Object.assign,p=Object.defineProperty,f=r([].concat);e.exports=!m||i((function(){if(o&&1!==m({b:1},m(p({},"a",{enumerable:!0,get:function(){p(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach((function(e){t[e]=e})),7!=m({},e)[n]||c(m({},t)).join("")!=r}))?function(e,t){for(var n=s(e),r=arguments.length,i=1,m=l.f,p=d.f;r>i;)for(var h,C=u(arguments[i++]),b=m?f(c(C),m(C)):c(C),N=b.length,g=0;N>g;)h=b[g++],o&&!a(p,C,h)||(n[h]=C[h]);return n}:m},48525:function(e,t,n){"use strict";var o,r=n(65522),a=n(86328),i=n(59096),c=n(31645),l=n(29093),d=n(50842),s=n(95541),u=s("IE_PROTO"),m=function(){},p=function(e){return"