From 7994cd6eb342be50c152f8daff5c38caeacfdf0b Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Thu, 26 Aug 2021 12:07:46 -0400 Subject: [PATCH 01/26] Bad fix WIP --- code/game/objects/items.dm | 2 +- .../objects/items/weapons/material/misc.dm | 13 +++ code/game/objects/structures/flora/flora.dm | 95 +++++++++++------- code/game/objects/structures/flora/trees.dm | 6 +- code/game/turfs/flooring/flooring.dm | 4 +- code/game/turfs/simulated/outdoors/dirt.dm | 15 +-- code/game/turfs/simulated/outdoors/grass.dm | 3 +- .../game/turfs/simulated/outdoors/outdoors.dm | 37 +++++++ .../simulated/outdoors/outdoors_attackby.dm | 12 +-- code/modules/food/food/snacks.dm | 68 ++++--------- code/modules/hydroponics/grown.dm | 35 +++++-- code/modules/hydroponics/grown_predefined.dm | 3 - code/modules/hydroponics/grown_sif.dm | 39 +++++++ code/modules/hydroponics/seed_packets.dm | 4 +- code/modules/hydroponics/seedtypes/apples.dm | 2 +- code/modules/hydroponics/trays/tray_soil.dm | 10 ++ .../materials/materials/organic/wood.dm | 4 +- .../materials/sheets/organic/tanning/hide.dm | 2 +- code/modules/mining/mine_items.dm | 20 ++++ code/modules/mining/mine_turfs.dm | 28 ++++-- .../subtypes/animal/passive/fish.dm | 10 +- code/modules/random_map/random_map.dm | 20 ++-- .../reagents/reactions/instant/instant.dm | 10 +- code/modules/reagents/reagents/food_drinks.dm | 7 -- code/modules/reagents/reagents/other.dm | 7 +- code/modules/reagents/reagents/toxins.dm | 2 +- icons/obj/flora/mushrooms.dmi | Bin 0 -> 560 bytes icons/turf/flooring/asteroid.dmi | Bin 24335 -> 29079 bytes vorestation.dme | 1 + 29 files changed, 301 insertions(+), 158 deletions(-) create mode 100644 code/modules/hydroponics/grown_sif.dm create mode 100644 icons/obj/flora/mushrooms.dmi diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 652a413707..c8c7dbbbfc 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -85,7 +85,7 @@ // Works similarly to worn sprite_sheets, except the alternate sprites are used when the clothing/refit_for_species() proc is called. var/list/sprite_sheets_obj - var/toolspeed = 1.0 // This is a multipler on how 'fast' a tool works. e.g. setting this to 0.5 will make the tool work twice as fast. + var/toolspeed = 1 // This is a multipler on how 'fast' a tool works. e.g. setting this to 0.5 will make the tool work twice as fast. var/attackspeed = DEFAULT_ATTACK_COOLDOWN // How long click delay will be when using this, in 1/10ths of a second. Checked in the user's get_attack_speed(). var/reach = 1 // Length of tiles it can reach, 1 is adjacent. var/addblends // Icon overlay for ADD highlights when applicable. diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm index da1ba64a59..333064c3f6 100644 --- a/code/game/objects/items/weapons/material/misc.dm +++ b/code/game/objects/items/weapons/material/misc.dm @@ -23,7 +23,20 @@ applies_material_colour = 0 drop_sound = 'sound/items/drop/axe.ogg' pickup_sound = 'sound/items/pickup/axe.ogg' +/* VOREStation Removal - We have one already +/obj/item/weapon/material/knife/machete/hatchet/stone + name = "sharp rock" + desc = "The secret is to bang the rocks together, guys." + force_divisor = 0.2 + icon_state = "rock" + item_state = "rock" + attack_verb = list("chopped", "torn", "cut") +/obj/item/weapon/material/knife/machete/hatchet/stone/set_material(var/new_material) + var/old_name = name + . = ..() + name = old_name +*/ /obj/item/weapon/material/knife/machete/hatchet/unathiknife name = "duelling knife" desc = "A length of leather-bound wood studded with razor-sharp teeth. How crude." diff --git a/code/game/objects/structures/flora/flora.dm b/code/game/objects/structures/flora/flora.dm index 96795f446d..8a130c91f5 100644 --- a/code/game/objects/structures/flora/flora.dm +++ b/code/game/objects/structures/flora/flora.dm @@ -13,6 +13,7 @@ var/min_x_scale = 0.9 var/min_y_scale = 0.9 + var/removal_tool = /obj/item/weapon/shovel var/harvest_tool = null // The type of item used to harvest the plant. var/harvest_count = 0 var/destroy_on_harvest = FALSE @@ -40,23 +41,34 @@ . = ..() if(harvest_count < max_harvests) . += get_harvestable_desc() + if(harvest_tool) + var/obj/item/tool = harvest_tool + . += SPAN_NOTICE("\The [src] can be harvested with \a [initial(tool.name)].") + + if(removal_tool) + var/obj/item/tool = removal_tool + . += SPAN_NOTICE("\The [src] can be removed with \a [initial(tool.name)].") /obj/structure/flora/proc/get_harvestable_desc() return "\The [src] seems to have something hanging from it." /obj/structure/flora/attackby(var/obj/item/weapon/W, var/mob/living/user) + if(can_harvest(W)) var/harvest_spawn = pickweight(harvest_loot) var/atom/movable/AM = spawn_harvest(harvest_spawn, user) - - if(!AM) - to_chat(user, "You fail to harvest anything from \the [src].") - + if(AM) + to_chat(user, SPAN_NOTICE("You harvest \the [AM] from \the [src].")) else - to_chat(user, "You harvest \the [AM] from \the [src].") - if(harvest_count >= max_harvests && destroy_on_harvest) - qdel(src) - return + to_chat(user, SPAN_NOTICE("You fail to harvest anything from \the [src].")) + return + + if(removal_tool && istype(W, removal_tool)) + to_chat(user, SPAN_WARNING("You start uprooting \the [src]...")) + if(do_after(user, 30)) + visible_message(SPAN_NOTICE("\The [user] uproots and discards \the [src]!")) + qdel(src) + return ..(W, user) @@ -450,19 +462,28 @@ desc = "This is a tiny well lit decorative christmas tree." icon_state = "plant-xmas" +/obj/structure/flora/mushroom + name = "mushroom" + desc = "Hey, this one seems like a fun guy." + icon_state = "mush1" + icon = 'icons/obj/flora/mushrooms.dmi' + harvest_loot = list(/obj/item/weapon/reagent_containers/food/snacks/mushroomslice = 1) + harvest_tool = /obj/item/weapon/material/knife + max_harvests = 2 + min_harvests = 0 + +/obj/structure/flora/mushroom/Initialize() + . = ..() + icon_state = "mush[rand(1,4)]" + if(prob(50)) + adjust_scale(-1, 1) + pixel_x = rand(-4, 4) + /obj/structure/flora/sif icon = 'icons/obj/flora/sifflora.dmi' -/obj/structure/flora/sif/attack_hand(mob/user) - if (user.a_intent == I_HURT) - if(do_after(user, 5 SECONDS)) - user.visible_message("\The [user] digs up \the [src.name].", "You dig up \the [src.name].") - qdel(src) - else - user.visible_message("\The [user] pokes \the [src.name].", "You poke \the [src.name].") - /datum/category_item/catalogue/flora/subterranean_bulbs - name = "Sivian Flora - Subterranean Bulbs" + name = "Sivian Flora - Cavebulbs" desc = "A plant which is native to Sif, it continues the trend of being a bioluminescent specimen. These plants \ are generally suited for conditions experienced in caverns, which are generally dark and cold. It is not \ known why this plant evolved to be bioluminescent, however this property has, unintentionally, allowed for \ @@ -475,7 +496,7 @@ value = CATALOGUER_REWARD_EASY /obj/structure/flora/sif/subterranean - name = "subterranean plant" + name = "subterranean bulbs" desc = "This is a subterranean plant. It's bulbous ends glow faintly." icon_state = "glowplant" light_range = 2 @@ -483,12 +504,15 @@ light_color = "#FF6633" light_on = TRUE catalogue_data = list(/datum/category_item/catalogue/flora/subterranean_bulbs) + harvest_loot = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sif/cavebulbs = 1) + harvest_tool = /obj/item/weapon/material/knife + max_harvests = 2 + min_harvests = 0 /obj/structure/flora/sif/subterranean/Initialize() icon_state = "[initial(icon_state)][rand(1,2)]" . = ..() - /datum/category_item/catalogue/flora/eyebulbs name = "Sivian Flora - Eyebulbs" desc = "A plant native to Sif. On the end of its stems are bulbs which visually resemble \ @@ -497,10 +521,14 @@ value = CATALOGUER_REWARD_EASY /obj/structure/flora/sif/eyes - name = "mysterious bulbs" - desc = "This is a mysterious looking plant. They kind of look like eyeballs. Creepy." + name = "eyebulbs" + desc = "This is a mysterious-looking plant. They kind of look like eyeballs. Creepy." icon_state = "eyeplant" catalogue_data = list(/datum/category_item/catalogue/flora/eyebulbs) + harvest_tool = /obj/item/weapon/material/knife + max_harvests = 2 + min_harvests = 0 + harvest_loot = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sif/eyebulbs = 1) /obj/structure/flora/sif/eyes/Initialize() icon_state = "[initial(icon_state)][rand(1,3)]" @@ -514,20 +542,20 @@ value = CATALOGUER_REWARD_TRIVIAL /obj/structure/flora/sif/tendrils - name = "stocky tendrils" + name = "wabback tendrils" desc = "A 'plant' made up of hardened moss. It has tiny hairs that bunch together to look like snow." icon_state = "grass" randomize_size = TRUE catalogue_data = list(/datum/category_item/catalogue/flora/mosstendrils) harvest_tool = /obj/item/weapon/material/knife - max_harvests = 1 - min_harvests = -4 + max_harvests = 3 + min_harvests = 0 harvest_loot = list( - /obj/item/seeds/wabback = 15, - /obj/item/seeds/blackwabback = 1, - /obj/item/seeds/wildwabback = 30 - ) + /obj/item/weapon/reagent_containers/food/snacks/grown/sif/wabback = 15, + /obj/item/weapon/reagent_containers/food/snacks/grown/sif/blackwabback = 1, + /obj/item/weapon/reagent_containers/food/snacks/grown/sif/wildwabback = 30 + ) /obj/structure/flora/sif/tendrils/Initialize() icon_state = "[initial(icon_state)][rand(1,3)]" @@ -546,26 +574,24 @@ value = CATALOGUER_REWARD_HARD /obj/structure/flora/sif/frostbelle - name = "gnarly shrub" + name = "frostbelle shrub" desc = "A stocky plant with fins bearing luminescent veins along its branches." - icon_state = "grass" + icon_state = "frostbelle" randomize_size = TRUE catalogue_data = list(/datum/category_item/catalogue/flora/frostbelle) harvest_tool = /obj/item/weapon/material/knife max_harvests = 2 - min_harvests = -4 + min_harvests = 0 harvest_loot = list( /obj/item/weapon/reagent_containers/food/snacks/frostbelle = 1 - ) + ) var/variantnum = null /obj/structure/flora/sif/frostbelle/Initialize() . = ..() - variantnum = rand(1,3) - update_icon() /obj/structure/flora/sif/frostbelle/update_icon() @@ -573,7 +599,6 @@ if(max_harvests > 0 && harvest_count < max_harvests) icon_state = "[initial(icon_state)][variantnum]" - else icon_state = initial(icon_state) diff --git a/code/game/objects/structures/flora/trees.dm b/code/game/objects/structures/flora/trees.dm index 3598523671..ff1a99cd0c 100644 --- a/code/game/objects/structures/flora/trees.dm +++ b/code/game/objects/structures/flora/trees.dm @@ -272,12 +272,12 @@ harvest_tool = /obj/item/weapon/material/knife max_harvests = 2 - min_harvests = -4 + min_harvests = 0 harvest_loot = list( /obj/item/weapon/reagent_containers/food/snacks/siffruit = 20, - /obj/item/weapon/reagent_containers/food/snacks/grown/sifpod = 5, + /obj/item/weapon/reagent_containers/food/snacks/grown/sif/sifpod = 5, /obj/item/seeds/sifbulb = 1 - ) + ) var/light_shift = 0 diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index 4f83f297c7..ba7429eec4 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -143,7 +143,7 @@ var/list/flooring_types /decl/flooring/grass/sif // Subtype for Sif's grass. name = "growth" desc = "A natural moss that has adapted to the sheer cold climate." - flags = TURF_REMOVE_SHOVEL + flags = 0 icon = 'icons/turf/outdoors.dmi' icon_base = "grass_sif" build_type = /obj/item/stack/tile/grass/sif @@ -152,7 +152,7 @@ var/list/flooring_types /decl/flooring/grass/sif/forest name = "thick growth" desc = "A natural moss that has adapted to the sheer cold climate." - flags = TURF_REMOVE_SHOVEL + flags = 0 icon = 'icons/turf/outdoors.dmi' icon_base = "grass_sif_dark" build_type = /obj/item/stack/tile/grass/sif/forest diff --git a/code/game/turfs/simulated/outdoors/dirt.dm b/code/game/turfs/simulated/outdoors/dirt.dm index b02bbdd9f0..e4e97388f9 100644 --- a/code/game/turfs/simulated/outdoors/dirt.dm +++ b/code/game/turfs/simulated/outdoors/dirt.dm @@ -1,7 +1,8 @@ -/turf/simulated/floor/outdoors/dirt - name = "dirt" - desc = "Quite dirty!" - icon_state = "dirt-dark" - edge_blending_priority = 2 - turf_layers = list(/turf/simulated/floor/outdoors/rocks) - initial_flooring = /decl/flooring/dirt +/turf/simulated/floor/outdoors/dirt + name = "dirt" + desc = "Quite dirty!" + icon_state = "dirt-dark" + edge_blending_priority = 2 + turf_layers = list(/turf/simulated/floor/outdoors/rocks) + initial_flooring = /decl/flooring/dirt + can_dig = TRUE diff --git a/code/game/turfs/simulated/outdoors/grass.dm b/code/game/turfs/simulated/outdoors/grass.dm index 65d0e472f1..41aa084773 100644 --- a/code/game/turfs/simulated/outdoors/grass.dm +++ b/code/game/turfs/simulated/outdoors/grass.dm @@ -7,6 +7,7 @@ var/list/grass_types = list( icon_state = "grass0" edge_blending_priority = 4 initial_flooring = /decl/flooring/grass/outdoors // VOREStation Edit + can_dig = TRUE turf_layers = list( /turf/simulated/floor/outdoors/rocks, /turf/simulated/floor/outdoors/dirt @@ -42,7 +43,6 @@ var/list/grass_types = list( var/tree_chance = 2 /* animal_chance = 0.5 - animal_types = list( /mob/living/simple_mob/animal/sif/diyaab = 10, /mob/living/simple_mob/animal/sif/glitterfly = 2, @@ -96,4 +96,3 @@ var/list/grass_types = list( /obj/structure/flora/sif/eyes = 5, /obj/structure/flora/sif/tendrils = 30 ) - diff --git a/code/game/turfs/simulated/outdoors/outdoors.dm b/code/game/turfs/simulated/outdoors/outdoors.dm index 84c91366f1..07d382a161 100644 --- a/code/game/turfs/simulated/outdoors/outdoors.dm +++ b/code/game/turfs/simulated/outdoors/outdoors.dm @@ -24,6 +24,42 @@ var/list/turf_edge_cache = list() // When a turf gets demoted or promoted, this list gets adjusted. The top-most layer is the layer on the bottom of the list, due to how pop() works. var/list/turf_layers = list(/turf/simulated/floor/outdoors/rocks) + var/can_dig = FALSE + var/loot_count + +/turf/simulated/floor/outdoors/proc/get_loot_type() + if(loot_count && prob(60)) + return pick( \ + 12;/obj/item/weapon/reagent_containers/food/snacks/worm, \ + 1;/obj/item/weapon/material/knife/machete/hatchet/stone \ + ) + +/turf/simulated/floor/outdoors/Initialize(mapload) + . = ..() + if(can_dig && prob(33)) + loot_count = rand(1,3) + +/turf/simulated/floor/outdoors/attackby(obj/item/C, mob/user) + + if(can_dig && istype(C, /obj/item/weapon/shovel)) + to_chat(user, SPAN_NOTICE("\The [user] begins digging into \the [src] with \the [C].")) + var/delay = (3 SECONDS * C.toolspeed) + user.setClickCooldown(delay) + if(do_after(user, delay, src)) + if(!(locate(/obj/machinery/portable_atmospherics/hydroponics/soil) in contents)) + var/obj/machinery/portable_atmospherics/hydroponics/soil/soil = new(src) + user.visible_message(SPAN_NOTICE("\The [src] digs \a [soil] into \the [src].")) + else + var/loot_type = get_loot_type() + if(loot_type) + loot_count-- + var/obj/item/loot = new loot_type(src) + to_chat(user, SPAN_NOTICE("You dug up \a [loot]!")) + else + to_chat(user, SPAN_NOTICE("You didn't find anything of note in \the [src].")) + return + + . = ..() /turf/simulated/floor/Initialize(mapload) if(is_outdoors()) @@ -80,6 +116,7 @@ var/list/turf_edge_cache = list() icon_state = "mud_dark" edge_blending_priority = 3 initial_flooring = /decl/flooring/mud + can_dig = TRUE /turf/simulated/floor/outdoors/rocks name = "rocks" diff --git a/code/game/turfs/simulated/outdoors/outdoors_attackby.dm b/code/game/turfs/simulated/outdoors/outdoors_attackby.dm index a59676834f..1a969fee98 100644 --- a/code/game/turfs/simulated/outdoors/outdoors_attackby.dm +++ b/code/game/turfs/simulated/outdoors/outdoors_attackby.dm @@ -1,15 +1,7 @@ // this code here enables people to dig up worms from certain tiles. /turf/simulated/floor/outdoors/grass/attackby(obj/item/weapon/S as obj, mob/user as mob) - if(istype(S, /obj/item/weapon/shovel)) - to_chat(user, "You begin to dig in \the [src] with your [S].") - if(do_after(user, 4 SECONDS * S.toolspeed)) - to_chat(user, "\The [src] has been dug up, a worm pops from the ground.") - new /obj/item/weapon/reagent_containers/food/snacks/worm(src) - else - to_chat(user, "You decide to not finish digging in \the [src].") - else if(istype(S, /obj/item/stack/tile/floor)) + if(istype(S, /obj/item/stack/tile/floor)) ChangeTurf(/turf/simulated/floor, preserve_outdoors = TRUE) return - else - ..() \ No newline at end of file + . = ..() \ No newline at end of file diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index 300b8d87f9..d92499f29b 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -842,47 +842,18 @@ /obj/item/weapon/reagent_containers/food/snacks/carpmeat/Initialize() . = ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent(toxin_type, toxin_amount) - -/obj/item/weapon/reagent_containers/food/snacks/crabmeat - name = "crab legs" - desc = "... Coffee? Is that you?" - icon_state = "crabmeat" - bitesize = 1 - -/obj/item/weapon/reagent_containers/food/snacks/crabmeat/Initialize() - . = ..() - reagents.add_reagent("seafood", 2) - -/obj/item/weapon/reagent_containers/food/snacks/crab_legs - name = "steamed crab legs" - desc = "Crab legs steamed and buttered to perfection. One day when the boss gets hungry..." - icon_state = "crablegs" - nutriment_amt = 2 - nutriment_desc = list("savory butter" = 2) - bitesize = 2 - trash = /obj/item/trash/plate - -/obj/item/weapon/reagent_containers/food/snacks/crab_legs/Initialize() - . = ..() - reagents.add_reagent("seafood", 6) - reagents.add_reagent("sodiumchloride", 1) - -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif - desc = "A fillet of sivian fish meat." - filling_color = "#2c2cff" - color = "#2c2cff" - toxin_type = "neurotoxic_protein" - toxin_amount = 2 - -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish - toxin_type = "murk_protein" + reagents.add_reagent("seafood", 3) + if(toxin_type && toxin_amount) + reagents.add_reagent(toxin_type, toxin_amount) /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish desc = "A fillet of fish meat." - toxin_type = "neurotoxic_protein" - toxin_amount = 1 + toxin_type = null + +/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif + desc = "A fillet of sivian fish meat." + filling_color = "#2c2cff" + color = "#2c2cff" /obj/item/weapon/reagent_containers/food/snacks/fishfingers name = "Fish Fingers" @@ -894,7 +865,7 @@ /obj/item/weapon/reagent_containers/food/snacks/fishfingers/Initialize() . = ..() - reagents.add_reagent("protein", 4) + reagents.add_reagent("seafood", 4) /obj/item/weapon/reagent_containers/food/snacks/zestfish name = "Zesty Fish" @@ -906,11 +877,11 @@ /obj/item/weapon/reagent_containers/food/snacks/zestfish/Initialize() . = ..() - reagents.add_reagent("protein", 4) + reagents.add_reagent("seafood", 4) -/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice - name = "huge mushroom slice" - desc = "A slice from a huge mushroom." +/obj/item/weapon/reagent_containers/food/snacks/mushroomslice + name = "mushroom slice" + desc = "A slice of mushroom." icon_state = "hugemushroomslice" filling_color = "#E0D7C5" center_of_mass = list("x"=17, "y"=16) @@ -918,7 +889,7 @@ nutriment_desc = list("raw" = 2, "mushroom" = 2) bitesize = 6 -/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/Initialize() +/obj/item/weapon/reagent_containers/food/snacks/mushroomslice/Initialize() . = ..() reagents.add_reagent("psilocybin", 3) @@ -3941,7 +3912,8 @@ /obj/item/weapon/reagent_containers/food/snacks/rawcutlet/Initialize() . = ..() - reagents.add_reagent("protein", 1) + reagents.add_reagent("fishbait", 9) + reagents.add_reagent("protein", 3) /obj/item/weapon/reagent_containers/food/snacks/cutlet name = "cutlet" @@ -3953,7 +3925,8 @@ /obj/item/weapon/reagent_containers/food/snacks/cutlet/Initialize() . = ..() - reagents.add_reagent("protein", 2) + reagents.add_reagent("fishbait", 15) + reagents.add_reagent("protein", 5) /obj/item/weapon/reagent_containers/food/snacks/rawmeatball name = "raw meatball" @@ -3965,7 +3938,8 @@ /obj/item/weapon/reagent_containers/food/snacks/rawmeatball/Initialize() . = ..() - reagents.add_reagent("protein", 2) + reagents.add_reagent("fishbait", 30) + reagents.add_reagent("protein", 10) /obj/item/weapon/reagent_containers/food/snacks/hotdog name = "hotdog" diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index bf83e28bf7..24c5ca9b46 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -185,13 +185,17 @@ pocell.charge = pocell.maxcharge qdel(src) return - else if(W.sharp) + + if(W.sharp) + if(seed.kitchen_tag == "pumpkin") // Ugggh these checks are awful. user.show_message("You carve a face into [src]!", 1) new /obj/item/clothing/head/pumpkinhead (user.loc) qdel(src) return - else if(seed.chems) + + if(seed.chems) + if(W.sharp && W.edge && !isnull(seed.chems["woodpulp"])) user.show_message("You make planks out of \the [src]!", 1) playsound(src, 'sound/effects/woodcutting.ogg', 50, 1) @@ -209,36 +213,49 @@ to_chat(user, "You add the newly-formed wood to the stack. It now contains [NG.amount] planks.") qdel(src) return - else if(!isnull(seed.chems["potato"])) + + if(seed.kitchen_tag == "sunflower") + new /obj/item/weapon/reagent_containers/food/snacks/rawsunflower(get_turf(src)) + to_chat(user, SPAN_NOTICE("You remove the seeds from the flower, slightly damaging them.")) + qdel(src) + return + + if(seed.kitchen_tag == "potato" || !isnull(seed.chems["potato"])) to_chat(user, "You slice \the [src] into sticks.") new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src)) qdel(src) return - else if(!isnull(seed.chems["carrotjuice"])) + + if(!isnull(seed.chems["carrotjuice"])) to_chat(user, "You slice \the [src] into sticks.") new /obj/item/weapon/reagent_containers/food/snacks/carrotfries(get_turf(src)) qdel(src) return - else if(!isnull(seed.chems["pineapplejuice"])) + + if(!isnull(seed.chems["pineapplejuice"])) to_chat(user, "You slice \the [src] into rings.") new /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring(get_turf(src)) qdel(src) return - else if(!isnull(seed.chems["soymilk"])) + + if(!isnull(seed.chems["soymilk"])) to_chat(user, "You roughly chop up \the [src].") new /obj/item/weapon/reagent_containers/food/snacks/soydope(get_turf(src)) qdel(src) return - else if(seed.get_trait(TRAIT_FLESH_COLOUR)) + + if(seed.get_trait(TRAIT_FLESH_COLOUR)) to_chat(user, "You slice up \the [src].") var/slices = rand(3,5) var/reagents_to_transfer = round(reagents.total_volume/slices) for(var/i=1; i<=slices; i++) var/obj/item/weapon/reagent_containers/food/snacks/fruit_slice/F = new(get_turf(src),seed) - if(reagents_to_transfer) reagents.trans_to_obj(F,reagents_to_transfer) + if(reagents_to_transfer) + reagents.trans_to_obj(F,reagents_to_transfer) qdel(src) return - ..() + + . = ..() /obj/item/weapon/reagent_containers/food/snacks/grown/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) . = ..() diff --git a/code/modules/hydroponics/grown_predefined.dm b/code/modules/hydroponics/grown_predefined.dm index d8187fb24e..643d27030a 100644 --- a/code/modules/hydroponics/grown_predefined.dm +++ b/code/modules/hydroponics/grown_predefined.dm @@ -3,6 +3,3 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus plantname = "ambrosiadeus" - -/obj/item/weapon/reagent_containers/food/snacks/grown/sifpod - plantname = "sifbulb" diff --git a/code/modules/hydroponics/grown_sif.dm b/code/modules/hydroponics/grown_sif.dm new file mode 100644 index 0000000000..3075fc148f --- /dev/null +++ b/code/modules/hydroponics/grown_sif.dm @@ -0,0 +1,39 @@ +/obj/item/weapon/reagent_containers/food/snacks/grown/sif + var/seeds = 0 + +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/Initialize(mapload, planttype) // Wild Sifplants have some seeds you can extract with a knife. + . = ..() + seeds = rand(1, 2) + +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/examine(mob/user) + . = ..() + if(seeds) + to_chat(user, SPAN_NOTICE("You can see [seeds] seed\s in \the [src]. You might be able to extract them with a sharp object.")) + +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/attackby(var/obj/item/weapon/W, var/mob/living/user) + if(seed && W.sharp && seeds > 0) + var/take_seeds = min(seeds, rand(1,2)) + seeds -= take_seeds + to_chat(user, SPAN_NOTICE("You stick \the [W] into \the [src] and lever out [take_seeds] seed\s.")) + for(var/i = 1 to take_seeds) + new /obj/item/seeds(get_turf(src), seed.name) + return + . = ..() + +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/sifpod + plantname = "sifbulb" + +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wabback + plantname = "wabback" + +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/blackwabback + plantname = "blackwabback" + +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wildwabback + plantname = "wildwabback" + +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/eyebulbs + plantname = "eyebulbs" + +/obj/item/weapon/reagent_containers/food/snacks/grown/sif/cavebulbs + plantname = "cavebulbs" diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm index 08eea609bf..c228617712 100644 --- a/code/modules/hydroponics/seed_packets.dm +++ b/code/modules/hydroponics/seed_packets.dm @@ -13,7 +13,9 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds) var/datum/seed/seed var/modified = 0 -/obj/item/seeds/Initialize() +/obj/item/seeds/Initialize(var/ml, var/_seed_type) + if(_seed_type in SSplants.seeds) + seed_type = _seed_type update_seed() . = ..() diff --git a/code/modules/hydroponics/seedtypes/apples.dm b/code/modules/hydroponics/seedtypes/apples.dm index 7044a0c6dc..4bd8a0bade 100644 --- a/code/modules/hydroponics/seedtypes/apples.dm +++ b/code/modules/hydroponics/seedtypes/apples.dm @@ -43,7 +43,7 @@ /datum/seed/apple/sif name = "sifbulb" - seed_name = "sivian tree" + seed_name = "sivian pod" display_name = "sivian pod" kitchen_tag = "apple" chems = list("nutriment" = list(1,5),"sifsap" = list(10,20)) diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm index f396b00dbf..43c918507b 100644 --- a/code/modules/hydroponics/trays/tray_soil.dm +++ b/code/modules/hydroponics/trays/tray_soil.dm @@ -32,6 +32,16 @@ /obj/machinery/portable_atmospherics/hydroponics/soil/CanPass() return 1 +/obj/machinery/portable_atmospherics/hydroponics/soil/attackby(obj/item/O, mob/user) + if(istype(O, /obj/item/weapon/shovel) && user.a_intent == I_HURT) + user.visible_message(SPAN_NOTICE("\The [user] begins filling in \the [src].")) + if(do_after(user, 3 SECONDS) && !QDELETED(src)) + user.visible_message(SPAN_NOTICE("\The [user] fills in \the [src].")) + qdel(src) + return + . = ..() + + // Holder for vine plants. // Icons for plants are generated as overlays, so setting it to invisible wouldn't work. // Hence using a blank icon. diff --git a/code/modules/materials/materials/organic/wood.dm b/code/modules/materials/materials/organic/wood.dm index 6b2fb2ca06..93b642af74 100644 --- a/code/modules/materials/materials/organic/wood.dm +++ b/code/modules/materials/materials/organic/wood.dm @@ -45,7 +45,9 @@ new /datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]"), new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]"), new /datum/stack_recipe("painting easel", /obj/structure/easel, 5, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]"), - new /datum/stack_recipe("painting frame", /obj/item/frame/painting, 5, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]") + new /datum/stack_recipe("painting frame", /obj/item/frame/painting, 5, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]"), + new /datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]"), + new /datum/stack_recipe("shovel", /obj/item/weapon/shovel/wood, 2, time = 10, on_floor = TRUE, supplied_material = "[name]") ) /datum/material/wood/sif diff --git a/code/modules/materials/sheets/organic/tanning/hide.dm b/code/modules/materials/sheets/organic/tanning/hide.dm index e9617ba921..26894dcaf6 100644 --- a/code/modules/materials/sheets/organic/tanning/hide.dm +++ b/code/modules/materials/sheets/organic/tanning/hide.dm @@ -20,7 +20,7 @@ //visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message) user.visible_message("\The [user] starts cutting hair off \the [src]", "You start cutting the hair off \the [src]", "You hear the sound of a knife rubbing against flesh") var/scraped = 0 - while(amount > 0 && do_after(user, 2.5 SECONDS)) // 2.5s per hide + while(amount > 0 && do_after(user, 2.5 SECONDS, user)) //Try locating an exisitng stack on the tile and add to there if possible var/obj/item/stack/hairlesshide/H = null for(var/obj/item/stack/hairlesshide/HS in user.loc) // Could be scraping something inside a locker, hence the .loc, not get_turf diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 2f744ac7c5..2c661ba062 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -128,6 +128,26 @@ edge = TRUE var/digspeed = 40 +/obj/item/weapon/shovel/wood + icon_state = "whiteshovel" + item_state = "whiteshovel" + var/datum/material/material + +/obj/item/weapon/shovel/wood/Initialize(var/ml, var/_mat) + . = ..() + material = get_material_by_name(_mat) + if(!istype(material)) + material = null + else + name = "[material.display_name] shovel" + matter = list("[material.name]" = 50) + update_icon() + +/obj/item/weapon/shovel/wood/update_icon() + . = ..() + color = material ? material.icon_colour : initial(color) + alpha = min(max(255 * material.opacity, 80), 255) + /obj/item/weapon/shovel/spade name = "spade" desc = "A small tool for digging and moving dirt." diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index aea40de035..0c6c8b44ad 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -6,24 +6,25 @@ var/list/mining_overlay_cache = list() icon = 'icons/turf/walls.dmi' icon_state = "rock-dark" density = TRUE - + /turf/simulated/mineral //wall piece name = "rock" icon = 'icons/turf/walls.dmi' icon_state = "rock" - var/rock_side_icon_state = "rock_side" - var/sand_icon_state = "asteroid" - var/rock_icon_state = "rock" - var/random_icon = 0 oxygen = 0 nitrogen = 0 opacity = 1 density = TRUE blocks_air = 1 temperature = T0C - can_dirty = FALSE + var/floor_name = "sand" + var/rock_side_icon_state = "rock_side" + var/sand_icon_state = "asteroid" + var/rock_icon_state = "rock" + var/random_icon = 0 + var/ore/mineral var/sand_dug var/mined_ore = 0 @@ -65,6 +66,10 @@ var/list/mining_overlay_cache = list() has_resources = 1 +/turf/simulated/mineral/ChangeTurf(turf/N, tell_universe, force_lighting_update, preserve_outdoors) + clear_ore_effects() + . = ..() + // Alternative rock wall sprites. /turf/simulated/mineral/light icon_state = "rock-light" @@ -109,6 +114,14 @@ var/list/mining_overlay_cache = list() blocks_air = 0 can_build_into_floor = TRUE +/turf/simulated/mineral/floor/mud + icon_state = "mud" + sand_icon_state = "mud" + +/turf/simulated/mineral/floor/dirt + icon_state = "dirt" + sand_icon_state = "dirt" + //Alternative sand floor sprite. /turf/simulated/mineral/floor/light icon_state = "sand-light" @@ -140,6 +153,7 @@ var/list/mining_overlay_cache = list() opacity = 0 blocks_air = 0 can_build_into_floor = TRUE + clear_ore_effects() update_general() /turf/simulated/mineral/proc/make_wall() @@ -223,7 +237,7 @@ var/list/mining_overlay_cache = list() //We are a sand floor else - name = "sand" + name = floor_name icon = 'icons/turf/flooring/asteroid.dmi' icon_state = sand_icon_state diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm index a4fb4f4078..408969d16a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm @@ -129,7 +129,7 @@ catalogue_data = list(/datum/category_item/catalogue/fauna/javelin) - meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif /datum/category_item/catalogue/fauna/icebass name = "Sivian Fauna - Glitter Bass" @@ -156,7 +156,7 @@ catalogue_data = list(/datum/category_item/catalogue/fauna/icebass) - meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif var/max_red = 150 var/min_red = 50 @@ -245,7 +245,7 @@ var/image/head_image - meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif /mob/living/simple_mob/animal/passive/fish/rockfish/Initialize() . = ..() @@ -292,7 +292,7 @@ has_eye_glow = TRUE - meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif /datum/category_item/catalogue/fauna/murkin name = "Sivian Fauna - Murkfish" @@ -319,4 +319,4 @@ catalogue_data = list(/datum/category_item/catalogue/fauna/murkin) - meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish + meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif diff --git a/code/modules/random_map/random_map.dm b/code/modules/random_map/random_map.dm index d36e7a80a1..a563f16c11 100644 --- a/code/modules/random_map/random_map.dm +++ b/code/modules/random_map/random_map.dm @@ -24,6 +24,9 @@ var/global/list/map_count = list() var/floor_type = /turf/simulated/floor var/target_turf_type + var/skip_dense = FALSE + var/keep_outside = FALSE + // Storage for the final iteration of the map. var/list/map = list() // Actual map. @@ -61,11 +64,16 @@ var/global/list/map_count = list() rand_seed(seed) priority_process = 1 + var/failed = FALSE for(var/i = 0;i[capitalize(name)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.", R_DEBUG) - return - if(!do_not_announce) admin_notice("[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map.", R_DEBUG) + if(!generate()) + failed = TRUE + + if(!do_not_announce) + if(!failed) + admin_notice("[capitalize(name)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.", R_DEBUG) + else + admin_notice("[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map.", R_DEBUG) /datum/random_map/proc/get_map_cell(var/x,var/y) if(!map) @@ -162,11 +170,11 @@ var/global/list/map_count = list() if(!current_cell) return 0 var/turf/T = locate((origin_x-1)+x,(origin_y-1)+y,origin_z) - if(!T || (target_turf_type && !istype(T,target_turf_type))) + if(!T || (skip_dense && T.density) || (target_turf_type && !istype(T,target_turf_type))) return 0 var/newpath = get_appropriate_path(map[current_cell]) if(newpath) - T.ChangeTurf(newpath) + T.ChangeTurf(newpath, preserve_outdoors = keep_outside) get_additional_spawns(map[current_cell],T,get_spawn_dir(x, y)) return T diff --git a/code/modules/reagents/reactions/instant/instant.dm b/code/modules/reagents/reactions/instant/instant.dm index bb9e443f59..6f49a56ef3 100644 --- a/code/modules/reagents/reactions/instant/instant.dm +++ b/code/modules/reagents/reactions/instant/instant.dm @@ -1122,14 +1122,12 @@ name = "Neutralize Carpotoxin" id = "carpotoxin_neutral" result = "protein" - required_reagents = list("radium" = 1, "carpotoxin" = 1, "sifsap" = 1) - catalysts = list("sifsap" = 10) - result_amount = 2 + required_reagents = list("enzyme" = 1, "carpotoxin" = 1, "sifsap" = 1) + result_amount = 1 /decl/chemical_reaction/instant/neutralize_spidertoxin name = "Neutralize Spidertoxin" id = "spidertoxin_neutral" result = "protein" - required_reagents = list("radium" = 1, "spidertoxin" = 1, "sifsap" = 1) - catalysts = list("sifsap" = 10) - result_amount = 2 \ No newline at end of file + required_reagents = list("enzyme" = 1, "spidertoxin" = 1, "sifsap" = 1) + result_amount = 1 \ No newline at end of file diff --git a/code/modules/reagents/reagents/food_drinks.dm b/code/modules/reagents/reagents/food_drinks.dm index 457a73b01e..eac9d25471 100644 --- a/code/modules/reagents/reagents/food_drinks.dm +++ b/code/modules/reagents/reagents/food_drinks.dm @@ -309,13 +309,6 @@ color = "#FFFFAA" allergen_type = ALLERGEN_EGGS //Eggs contain egg -/datum/reagent/nutriment/protein/murk - name = "murkfin protein" - id = "murk_protein" - taste_description = "mud" - color = "#664330" - allergen_type = ALLERGEN_FISH //Murkfin is fish - /datum/reagent/nutriment/honey name = "Honey" id = "honey" diff --git a/code/modules/reagents/reagents/other.dm b/code/modules/reagents/reagents/other.dm index b6775e1759..722fcbd59c 100644 --- a/code/modules/reagents/reagents/other.dm +++ b/code/modules/reagents/reagents/other.dm @@ -631,10 +631,11 @@ M.adjustToxLoss(2 * removed) M.adjustCloneLoss(2 * removed) -/datum/reagent/fishbait +/datum/reagent/nutriment/fishbait name = "Fish Bait" id = "fishbait" description = "A natural slurry that particularily appeals to fish." - taste_description = "earthy" + taste_description = "slimy dirt" reagent_state = LIQUID - color = "#62764E" \ No newline at end of file + color = "#62764E" + nutriment_factor = 15 diff --git a/code/modules/reagents/reagents/toxins.dm b/code/modules/reagents/reagents/toxins.dm index dde7bf21a9..b59be5c7d1 100644 --- a/code/modules/reagents/reagents/toxins.dm +++ b/code/modules/reagents/reagents/toxins.dm @@ -67,7 +67,7 @@ /datum/reagent/toxin/neurotoxic_protein name = "toxic protein" id = "neurotoxic_protein" - description = "A weak neurotoxic chemical commonly found in Sivian fish meat." + description = "A weak neurotoxic chemical." taste_description = "fish" reagent_state = LIQUID color = "#005555" diff --git a/icons/obj/flora/mushrooms.dmi b/icons/obj/flora/mushrooms.dmi new file mode 100644 index 0000000000000000000000000000000000000000..755acb8d641102c7f840ba63bb1b85e6b6488e20 GIT binary patch literal 560 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 LNkvXXu0mjffp_2r literal 24335 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 r6wBGvhOU(eJ47kC@IO|&Ut# Date: Mon, 20 Sep 2021 16:25:14 -0700 Subject: [PATCH 02/26] Universal Anomalies --- code/__defines/dcs/signals.dm | 12 +- code/_onclick/item_attack.dm | 35 +- code/_onclick/other_mobs.dm | 4 +- code/game/atoms.dm | 10 + code/game/atoms_movable.dm | 12 + code/modules/reagents/reagents/_reagents.dm | 3 + code/modules/reagents/reagents/core.dm | 14 + code/modules/reagents/reagents/dispenser.dm | 5 + code/modules/reagents/reagents/food_drinks.dm | 5 + code/modules/reagents/reagents/medicine.dm | 5 + code/modules/reagents/reagents/modifiers.dm | 2 + code/modules/reagents/reagents/other.dm | 21 +- code/modules/reagents/reagents/toxins.dm | 7 + .../xenoarcheaology/anomaly_container.dm | 21 +- .../xenoarcheaology/artifacts/artifact.dm | 127 +----- .../artifacts/predefined/_predefined.dm | 14 +- .../artifacts/predefined/hungry_statue.dm | 14 +- code/modules/xenoarcheaology/boulder.dm | 4 +- code/modules/xenoarcheaology/effect.dm | 52 ++- code/modules/xenoarcheaology/effect_master.dm | 415 ++++++++++++++++++ .../effects/animate_anomaly.dm | 41 +- .../xenoarcheaology/effects/badfeeling.dm | 5 + .../xenoarcheaology/effects/berserk.dm | 5 + .../xenoarcheaology/effects/cannibal.dm | 5 + .../xenoarcheaology/effects/cellcharge.dm | 4 + .../xenoarcheaology/effects/celldrain.dm | 5 + code/modules/xenoarcheaology/effects/cold.dm | 4 + .../xenoarcheaology/effects/dnaswitch.dm | 5 + .../xenoarcheaology/effects/electric_field.dm | 5 + code/modules/xenoarcheaology/effects/emp.dm | 3 + .../xenoarcheaology/effects/feysight.dm | 5 + .../xenoarcheaology/effects/forcefield.dm | 5 + code/modules/xenoarcheaology/effects/gaia.dm | 6 + .../modules/xenoarcheaology/effects/gasco2.dm | 4 + .../xenoarcheaology/effects/gasnitro.dm | 4 + .../modules/xenoarcheaology/effects/gasoxy.dm | 2 + .../xenoarcheaology/effects/gasphoron.dm | 4 + .../xenoarcheaology/effects/gassleeping.dm | 2 + .../xenoarcheaology/effects/goodfeeling.dm | 5 + .../effects/gravitational_waves.dm | 5 + code/modules/xenoarcheaology/effects/heal.dm | 3 + code/modules/xenoarcheaology/effects/heat.dm | 3 + code/modules/xenoarcheaology/effects/hurt.dm | 4 + .../xenoarcheaology/effects/poltergeist.dm | 5 + .../xenoarcheaology/effects/radiate.dm | 4 + .../xenoarcheaology/effects/resurrect.dm | 9 + .../xenoarcheaology/effects/roboheal.dm | 4 + .../xenoarcheaology/effects/robohurt.dm | 4 + .../modules/xenoarcheaology/effects/sleepy.dm | 3 + code/modules/xenoarcheaology/effects/stun.dm | 3 + .../xenoarcheaology/effects/teleport.dm | 5 + .../xenoarcheaology/effects/vampire.dm | 26 +- .../xenoarcheaology/finds/find_spawning.dm | 131 +++--- .../tools/artifact_analyser.dm | 32 +- .../tools/artifact_harvester.dm | 134 ++++++ vorestation.dme | 1 + 56 files changed, 1033 insertions(+), 244 deletions(-) create mode 100644 code/modules/xenoarcheaology/effect_master.dm diff --git a/code/__defines/dcs/signals.dm b/code/__defines/dcs/signals.dm index df83ba66ec..d8284b8936 100644 --- a/code/__defines/dcs/signals.dm +++ b/code/__defines/dcs/signals.dm @@ -58,8 +58,8 @@ #define COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE "atom_init_success" ///from base of atom/attackby(): (/obj/item, /mob/living, params) #define COMSIG_PARENT_ATTACKBY "atom_attackby" -///Return this in response if you don't want afterattack to be called - #define COMPONENT_NO_AFTERATTACK (1<<0) +///Return this in response if you don't want later item attack procs to be called. + #define COMPONENT_CANCEL_ATTACK_CHAIN (1<<0) ///from base of atom/attack_hulk(): (/mob/living/carbon/human) #define COMSIG_ATOM_HULK_ATTACK "hulk_attack" ///from base of atom/animal_attack(): (/mob/user) @@ -94,6 +94,7 @@ #define COMSIG_ATOM_BUMPED "atom_bumped" ///from base of atom/ex_act(): (severity, target) #define COMSIG_ATOM_EX_ACT "atom_ex_act" + #define COMPONENT_IGNORE_EXPLOSION (1<<0) ///from base of atom/emp_act(): (severity) #define COMSIG_ATOM_EMP_ACT "atom_emp_act" ///from base of atom/fire_act(): (exposed_temperature, exposed_volume) @@ -225,7 +226,7 @@ // /atom/movable signals -///from base of atom/movable/Moved(): (/atom) +///from base of atom/movable/Move(): (atom/newloc, dir, movetime) #define COMSIG_MOVABLE_PRE_MOVE "movable_pre_move" #define COMPONENT_MOVABLE_BLOCK_PRE_MOVE (1<<0) ///from base of atom/movable/Moved(): (/atom, dir) @@ -737,6 +738,7 @@ #define COMSIG_REAGENTS_CRAFTING_PING "reagents_crafting_ping" +<<<<<<< HEAD // Lighting: ///from base of [atom/proc/set_light]: (l_range, l_power, l_color, l_on) #define COMSIG_ATOM_SET_LIGHT "atom_set_light" @@ -778,3 +780,7 @@ #define COMSIG_CONFLICT_ELEMENT_CHECK "conflict_element_check" /// A conflict was found #define ELEMENT_CONFLICT_FOUND (1<<0) +======= +//From reagents touch_x. +#define COMSIG_REAGENTS_TOUCH "reagent_touch" +>>>>>>> 71e8b0399de... Universal Anomalies (#7914) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 48accdb7fa..5de3846dc2 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -25,28 +25,51 @@ avoid code duplication. This includes items that may sometimes act as a standard return return -// Called at the start of resolve_attackby(), before the actual attack. -/obj/item/proc/pre_attack(atom/a, mob/user) - return +/** + * Called at the start of resolve_attackby(), before the actual attack. + * + * Arguments: + * * atom/A - The atom about to be hit + * * mob/living/user - The mob doing the htting + * * params - click params such as alt/shift etc + * + * See: [/obj/item/proc/melee_attack_chain] + */ + +/obj/item/proc/pre_attack(atom/A, mob/user, params) //do stuff before attackby! + if(SEND_SIGNAL(src, COMSIG_ITEM_PRE_ATTACK, A, user, params) & COMPONENT_CANCEL_ATTACK_CHAIN) + return TRUE + return FALSE //return TRUE to avoid calling attackby after this proc does stuff //I would prefer to rename this to attack(), but that would involve touching hundreds of files. /obj/item/proc/resolve_attackby(atom/A, mob/user, var/attack_modifier = 1, var/click_parameters) - pre_attack(A, user) add_fingerprint(user) + . = pre_attack(A, user, click_parameters) + if(.) // We're returning the value of pre_attack, important if it has a special return. + return return A.attackby(src, user, attack_modifier, click_parameters) // No comment /atom/proc/attackby(obj/item/W, mob/user, var/attack_modifier, var/click_parameters) - if(SEND_SIGNAL(src, COMSIG_PARENT_ATTACKBY, W, user, click_parameters) & COMPONENT_NO_AFTERATTACK) + if(SEND_SIGNAL(src, COMSIG_PARENT_ATTACKBY, W, user, click_parameters) & COMPONENT_CANCEL_ATTACK_CHAIN) return TRUE return FALSE /mob/living/attackby(obj/item/I, mob/user, var/attack_modifier, var/click_parameters) if(!ismob(user)) - return 0 + return FALSE + + if(SEND_SIGNAL(src, COMSIG_PARENT_ATTACKBY, I, user, click_parameters) & COMPONENT_CANCEL_ATTACK_CHAIN) + return FALSE + if(can_operate(src, user) && I.do_surgery(src,user)) +<<<<<<< HEAD return 1 if(attempt_vr(src,"vore_attackby",args)) return //VOREStation Add - The vore, of course. +======= + return TRUE + +>>>>>>> 71e8b0399de... Universal Anomalies (#7914) return I.attack(src, user, user.zone_sel.selecting, attack_modifier) // Used to get how fast a mob should attack, and influences click delay. diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 3bd1a0afb2..5351139540 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -26,7 +26,9 @@ A.attack_hand(src) /atom/proc/attack_hand(mob/user as mob) - return + if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_HAND, user) & COMPONENT_CANCEL_ATTACK_CHAIN) + return TRUE + return FALSE /mob/living/carbon/human/RestrainedClickOn(var/atom/A) return diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 183cbf4ca8..af407eb96c 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -125,6 +125,8 @@ /atom/proc/Bumped(AM as mob|obj) set waitfor = FALSE + SEND_SIGNAL(src, COMSIG_ATOM_BUMPED, AM) + // Convenience proc to see if a container is open for chemistry handling // returns true if open // false if closed @@ -166,6 +168,9 @@ return /atom/proc/bullet_act(obj/item/projectile/P, def_zone) + if(SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, P, def_zone) & COMPONENT_CANCEL_ATTACK_CHAIN) + return + P.on_hit(src, 0, def_zone) . = 0 @@ -246,6 +251,7 @@ . = new_dir != dir dir = new_dir +<<<<<<< HEAD // Called to set the atom's density and used to add behavior to density changes. /atom/proc/set_density(var/new_density) if(density == new_density) @@ -262,6 +268,10 @@ /atom/proc/ex_act() return +======= +/atom/proc/ex_act(var/strength = 3) + return (SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, strength, src) & COMPONENT_IGNORE_EXPLOSION) +>>>>>>> 71e8b0399de... Universal Anomalies (#7914) /atom/proc/emag_act(var/remaining_charges, var/mob/user, var/emag_source) return -1 diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 195e02e8fa..137355564a 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -85,6 +85,9 @@ if(!loc || !newloc) return FALSE + if(SEND_SIGNAL(src, COMSIG_MOVABLE_PRE_MOVE, newloc, direct, movetime) & COMPONENT_MOVABLE_BLOCK_PRE_MOVE) + return FALSE + // Store this early before we might move, it's used several places var/atom/oldloc = loc @@ -230,8 +233,14 @@ if(riding_datum) riding_datum.handle_vehicle_layer() riding_datum.handle_vehicle_offsets() +<<<<<<< HEAD for (var/datum/light_source/light as anything in light_sources) // Cycle through the light sources on this atom and tell them to update. light.source_atom.update_light() +======= + + SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, old_loc, direction) + +>>>>>>> 71e8b0399de... Universal Anomalies (#7914) return TRUE /atom/movable/set_dir(newdir) @@ -265,6 +274,9 @@ throwing = 0 if(QDELETED(A)) return + + SEND_SIGNAL(src, COMSIG_MOVABLE_BUMP, A) + A.Bumped(src) A.last_bumped = world.time diff --git a/code/modules/reagents/reagents/_reagents.dm b/code/modules/reagents/reagents/_reagents.dm index 3ffb7e58e5..3bc9b50a8c 100644 --- a/code/modules/reagents/reagents/_reagents.dm +++ b/code/modules/reagents/reagents/_reagents.dm @@ -48,12 +48,15 @@ // This doesn't apply to skin contact - this is for, e.g. extinguishers and sprays. The difference is that reagent is not directly on the mob's skin - it might just be on their clothing. /datum/reagent/proc/touch_mob(var/mob/M, var/amount) + SEND_SIGNAL(M, COMSIG_REAGENTS_TOUCH, src, amount) return /datum/reagent/proc/touch_obj(var/obj/O, var/amount) // Acid melting, cleaner cleaning, etc + SEND_SIGNAL(O, COMSIG_REAGENTS_TOUCH, src, amount) return /datum/reagent/proc/touch_turf(var/turf/T, var/amount) // Cleaner cleaning, lube lubbing, etc, all go here + SEND_SIGNAL(T, COMSIG_REAGENTS_TOUCH, src, amount) return /datum/reagent/proc/on_mob_life(var/mob/living/carbon/M, var/alien, var/datum/reagents/metabolism/location) // Currently, on_mob_life is called on carbons. Any interaction with non-carbon mobs (lube) will need to be done in touch_mob. diff --git a/code/modules/reagents/reagents/core.dm b/code/modules/reagents/reagents/core.dm index a235a61755..b454824275 100644 --- a/code/modules/reagents/reagents/core.dm +++ b/code/modules/reagents/reagents/core.dm @@ -31,6 +31,9 @@ /datum/reagent/blood/touch_turf(var/turf/simulated/T) if(!istype(T) || volume < 3) return + + ..() + if(!data["donor"] || istype(data["donor"], /mob/living/carbon/human)) blood_splatter(T, src, 1) else if(istype(data["donor"], /mob/living/carbon/alien)) @@ -169,6 +172,8 @@ if(!istype(T)) return + ..() + var/datum/gas_mixture/environment = T.return_air() var/min_temperature = T0C + 100 // 100C, the boiling point of water @@ -190,14 +195,21 @@ T.wet_floor(1) /datum/reagent/water/touch_obj(var/obj/O, var/amount) +<<<<<<< HEAD if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube)) var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O +======= + ..() + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/cube)) + var/obj/item/weapon/reagent_containers/food/snacks/cube/cube = O +>>>>>>> 71e8b0399de... Universal Anomalies (#7914) if(!cube.wrapped) cube.Expand() else O.water_act(amount / 5) /datum/reagent/water/touch_mob(var/mob/living/L, var/amount) + ..() if(istype(L)) // First, kill slimes. if(istype(L, /mob/living/simple_mob/slime)) @@ -252,6 +264,7 @@ glass_desc = "Unless you are an industrial tool, this is probably not safe for consumption." /datum/reagent/fuel/touch_turf(var/turf/T, var/amount) + ..() new /obj/effect/decal/cleanable/liquid_fuel(T, amount, FALSE) remove_self(amount) return @@ -261,5 +274,6 @@ M.adjustToxLoss(4 * removed) /datum/reagent/fuel/touch_mob(var/mob/living/L, var/amount) + ..() if(istype(L)) L.adjust_fire_stacks(amount / 10) // Splashing people with welding fuel to make them easy to ignite! diff --git a/code/modules/reagents/reagents/dispenser.dm b/code/modules/reagents/reagents/dispenser.dm index 6dd8a79285..abc0522886 100644 --- a/code/modules/reagents/reagents/dispenser.dm +++ b/code/modules/reagents/reagents/dispenser.dm @@ -49,6 +49,7 @@ M.ingested.remove_reagent(R.id, removed * effect) /datum/reagent/carbon/touch_turf(var/turf/T) + ..() if(!istype(T, /turf/space)) var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, T) if (!dirtoverlay) @@ -106,6 +107,7 @@ allergen_factor = 0.5 //simulates mixed drinks containing less of the allergen, as they have only a single actual reagent unlike food /datum/reagent/ethanol/touch_mob(var/mob/living/L, var/amount) + ..() if(istype(L)) L.adjust_fire_stacks(amount / 15) @@ -199,6 +201,7 @@ M.hallucination = max(M.hallucination, halluci) /datum/reagent/ethanol/touch_obj(var/obj/O) + ..() if(istype(O, /obj/item/weapon/paper)) var/obj/item/weapon/paper/paperaffected = O paperaffected.clearpaper() @@ -342,6 +345,7 @@ M.adjustToxLoss(100) /datum/reagent/radium/touch_turf(var/turf/T) + ..() if(volume >= 3) if(!istype(T, /turf/space)) var/obj/effect/decal/cleanable/greenglow/glow = locate(/obj/effect/decal/cleanable/greenglow, T) @@ -426,6 +430,7 @@ M.take_organ_damage(0, removed * power * 0.1) // Balance. The damage is instant, so it's weaker. 10 units -> 5 damage, double for pacid. 120 units beaker could deal 60, but a) it's burn, which is not as dangerous, b) it's a one-use weapon, c) missing with it will splash it over the ground and d) clothes give some protection, so not everything will hit /datum/reagent/acid/touch_obj(var/obj/O) + ..() if(O.unacidable) return if((istype(O, /obj/item) || istype(O, /obj/effect/plant)) && (volume > meltdose)) diff --git a/code/modules/reagents/reagents/food_drinks.dm b/code/modules/reagents/reagents/food_drinks.dm index 457a73b01e..0cedd04306 100644 --- a/code/modules/reagents/reagents/food_drinks.dm +++ b/code/modules/reagents/reagents/food_drinks.dm @@ -170,6 +170,8 @@ if(!istype(T)) return + ..() + var/hotspot = (locate(/obj/fire) in T) if(hotspot && !istype(T, /turf/space)) var/datum/gas_mixture/lowertemp = T.remove_air(T:air:total_moles) @@ -373,6 +375,7 @@ allergen_type = ALLERGEN_GRAINS //Flour is made from grain /datum/reagent/nutriment/flour/touch_turf(var/turf/simulated/T) + ..() if(!istype(T, /turf/space)) new /obj/effect/decal/cleanable/flour(T) @@ -542,6 +545,7 @@ glass_desc = "Durian paste. It smells horrific." /datum/reagent/nutriment/durian/touch_mob(var/mob/M, var/amount) + ..() if(iscarbon(M) && !M.isSynthetic()) var/message = pick("Oh god, it smells disgusting here.", "What is that stench?", "That's an awful odor.") to_chat(M, "[message]") @@ -551,6 +555,7 @@ return ..() /datum/reagent/nutriment/durian/touch_turf(var/turf/T, var/amount) + ..() if(istype(T)) var/obj/effect/decal/cleanable/chemcoating/C = new /obj/effect/decal/cleanable/chemcoating(T) C.reagents.add_reagent(id, amount) diff --git a/code/modules/reagents/reagents/medicine.dm b/code/modules/reagents/reagents/medicine.dm index e0130e54bb..70a4bc5965 100644 --- a/code/modules/reagents/reagents/medicine.dm +++ b/code/modules/reagents/reagents/medicine.dm @@ -339,6 +339,7 @@ M.adjustToxLoss(3 * removed) /datum/reagent/tricorlidaze/touch_obj(var/obj/O) + ..() if(istype(O, /obj/item/stack/medical/bruise_pack) && round(volume) >= 5) var/obj/item/stack/medical/bruise_pack/C = O var/packname = C.name @@ -1248,6 +1249,7 @@ M.add_chemical_effect(CE_PAINKILLER, 20 * M.species.chem_strength_pain) // 5 less than paracetamol. /datum/reagent/spacomycaze/touch_obj(var/obj/O) + ..() if(istype(O, /obj/item/stack/medical/crude_pack) && round(volume) >= 1) var/obj/item/stack/medical/crude_pack/C = O var/packname = C.name @@ -1284,10 +1286,12 @@ M.adjustToxLoss(2 * removed) /datum/reagent/sterilizine/touch_obj(var/obj/O) + ..() O.germ_level -= min(volume*20, O.germ_level) O.was_bloodied = null /datum/reagent/sterilizine/touch_turf(var/turf/T) + ..() T.germ_level -= min(volume*20, T.germ_level) for(var/obj/item/I in T.contents) I.was_bloodied = null @@ -1301,6 +1305,7 @@ //VOREstation edit end /datum/reagent/sterilizine/touch_mob(var/mob/living/L, var/amount) + ..() if(istype(L)) if(istype(L, /mob/living/simple_mob/slime)) var/mob/living/simple_mob/slime/S = L diff --git a/code/modules/reagents/reagents/modifiers.dm b/code/modules/reagents/reagents/modifiers.dm index bed5da5f47..22b1f047c7 100644 --- a/code/modules/reagents/reagents/modifiers.dm +++ b/code/modules/reagents/reagents/modifiers.dm @@ -42,6 +42,7 @@ affect_blood(M, alien, removed * 0.6) /datum/reagent/modapplying/cryofluid/touch_mob(var/mob/M, var/amount) + ..() if(isliving(M)) var/mob/living/L = M for(var/I = 1 to rand(1, round(amount + 1))) @@ -49,6 +50,7 @@ return /datum/reagent/modapplying/cryofluid/touch_turf(var/turf/T, var/amount) + ..() if(istype(T, /turf/simulated/floor/water) && prob(amount)) T.visible_message("\The [T] crackles loudly as the cryogenic fluid causes it to boil away, leaving behind a hard layer of ice.") T.ChangeTurf(/turf/simulated/floor/outdoors/ice, 1, 1, TRUE) diff --git a/code/modules/reagents/reagents/other.dm b/code/modules/reagents/reagents/other.dm index b6775e1759..fb5468d3ee 100644 --- a/code/modules/reagents/reagents/other.dm +++ b/code/modules/reagents/reagents/other.dm @@ -114,14 +114,17 @@ color_weight = 20 /datum/reagent/paint/touch_turf(var/turf/T) + ..() if(istype(T) && !istype(T, /turf/space)) T.color = color /datum/reagent/paint/touch_obj(var/obj/O) + ..() if(istype(O)) O.color = color /datum/reagent/paint/touch_mob(var/mob/M) + ..() if(istype(M) && !istype(M, /mob/observer)) //painting ghosts: not allowed M.color = color //maybe someday change this to paint only clothes and exposed body parts for human mobs. @@ -267,6 +270,7 @@ M.apply_effect(5 * removed, IRRADIATE, 0) /datum/reagent/uranium/touch_turf(var/turf/T) + ..() if(volume >= 3) if(!istype(T, /turf/space)) var/obj/effect/decal/cleanable/greenglow/glow = locate(/obj/effect/decal/cleanable/greenglow, T) @@ -288,7 +292,7 @@ name = "Lithium-6" id = "lithium6" description = "An isotope of lithium. It has 3 neutrons, but shares all chemical characteristics with regular lithium." - + /datum/reagent/helium/helium3 name = "Helium-3" id = "helium3" @@ -321,11 +325,11 @@ /datum/reagent/supermatter/affect_ingest(mob/living/carbon/M, alien, removed) . = ..() M.ash() - + /datum/reagent/supermatter/affect_blood(mob/living/carbon/M, alien, removed) . = ..() M.ash() - + /datum/reagent/adrenaline name = "Adrenaline" @@ -361,6 +365,7 @@ cult.remove_antagonist(M.mind) /datum/reagent/water/holywater/touch_turf(var/turf/T) + ..() if(volume >= 5) T.holy = 1 return @@ -408,6 +413,7 @@ touch_met = 50 /datum/reagent/thermite/touch_turf(var/turf/T) + ..() if(volume >= 5) if(istype(T, /turf/simulated/wall)) var/turf/simulated/wall/W = T @@ -417,6 +423,7 @@ return /datum/reagent/thermite/touch_mob(var/mob/living/L, var/amount) + ..() if(istype(L)) L.adjust_fire_stacks(amount / 5) @@ -433,14 +440,17 @@ touch_met = 50 /datum/reagent/space_cleaner/touch_mob(var/mob/M) + ..() if(iscarbon(M)) var/mob/living/carbon/C = M C.clean_blood() /datum/reagent/space_cleaner/touch_obj(var/obj/O) + ..() O.clean_blood() /datum/reagent/space_cleaner/touch_turf(var/turf/T) + ..() if(volume >= 1) if(istype(T, /turf/simulated)) var/turf/simulated/S = T @@ -488,6 +498,7 @@ M.vomit() /datum/reagent/space_cleaner/touch_mob(var/mob/living/L, var/amount) + ..() if(istype(L, /mob/living/carbon/human)) var/mob/living/carbon/human/H = L if(H.wear_mask) @@ -506,6 +517,7 @@ color = "#009CA8" /datum/reagent/lube/touch_turf(var/turf/simulated/T) + ..() if(!istype(T)) return if(volume >= 1) @@ -520,6 +532,7 @@ color = "#C7FFFF" /datum/reagent/silicate/touch_obj(var/obj/O) + ..() if(istype(O, /obj/structure/window)) var/obj/structure/window/W = O W.apply_silicate(volume) @@ -593,9 +606,11 @@ color = "#F2F3F4" /datum/reagent/luminol/touch_obj(var/obj/O) + ..() O.reveal_blood() /datum/reagent/luminol/touch_mob(var/mob/living/L) + ..() L.reveal_blood() /datum/reagent/nutriment/biomass diff --git a/code/modules/reagents/reagents/toxins.dm b/code/modules/reagents/reagents/toxins.dm index dde7bf21a9..d71f38338c 100644 --- a/code/modules/reagents/reagents/toxins.dm +++ b/code/modules/reagents/reagents/toxins.dm @@ -94,6 +94,7 @@ var/fire_mult = 30 /datum/reagent/toxin/hydrophoron/touch_mob(var/mob/living/L, var/amount) + ..() if(istype(L)) L.adjust_fire_stacks(amount / fire_mult) @@ -105,6 +106,7 @@ /datum/reagent/toxin/hydrophoron/touch_turf(var/turf/simulated/T) if(!istype(T)) return + ..() T.assume_gas("phoron", CEILING(volume/2, 1), T20C) for(var/turf/simulated/floor/target_tile in range(0,T)) target_tile.assume_gas("phoron", volume/2, 400+T0C) @@ -146,6 +148,7 @@ skin_danger = 1 /datum/reagent/toxin/phoron/touch_mob(var/mob/living/L, var/amount) + ..() if(istype(L)) L.adjust_fire_stacks(amount / 5) @@ -167,6 +170,7 @@ ..() /datum/reagent/toxin/phoron/touch_turf(var/turf/simulated/T, var/amount) + ..() if(!istype(T)) return T.assume_gas("volatile_fuel", amount, T20C) @@ -388,6 +392,7 @@ color = "#e67819" /datum/reagent/toxin/fertilizer/tannin/touch_obj(var/obj/O, var/volume) + ..() if(istype(O, /obj/item/stack/hairlesshide)) var/obj/item/stack/hairlesshide/HH = O HH.rapidcure(round(volume)) @@ -403,6 +408,7 @@ strength = 4 /datum/reagent/toxin/plantbgone/touch_turf(var/turf/T) + ..() if(istype(T, /turf/simulated/wall)) var/turf/simulated/wall/W = T if(locate(/obj/effect/overlay/wallrot) in W) @@ -411,6 +417,7 @@ W.visible_message("The fungi are completely dissolved by the solution!") /datum/reagent/toxin/plantbgone/touch_obj(var/obj/O, var/volume) + ..() if(istype(O, /obj/effect/plant)) qdel(O) else if(istype(O, /obj/effect/alien/weeds/)) diff --git a/code/modules/xenoarcheaology/anomaly_container.dm b/code/modules/xenoarcheaology/anomaly_container.dm index f9ac6ef4f5..e725254f0b 100644 --- a/code/modules/xenoarcheaology/anomaly_container.dm +++ b/code/modules/xenoarcheaology/anomaly_container.dm @@ -14,6 +14,15 @@ if(A) contain(A) + else + for(var/obj/Ob in loc) + if(can_contain(Ob)) + contain(Ob) + break + +/obj/structure/anomaly_container/proc/can_contain(var/obj/O) + return O.is_anomalous() + /obj/structure/anomaly_container/attack_hand(var/mob/user) release() @@ -37,7 +46,11 @@ underlays.Cut() desc = initial(desc) -/obj/machinery/artifact/MouseDrop(var/obj/structure/anomaly_container/over_object) - if(istype(over_object) && Adjacent(over_object) && CanMouseDrop(over_object, usr)) - Bumped(usr) - over_object.contain(src) \ No newline at end of file +/atom/MouseDrop(var/obj/structure/anomaly_container/over_object) + . = ..() + + if(istype(over_object)) + if(!QDELETED(src) && istype(loc, /turf) && is_anomalous() && Adjacent(over_object) && CanMouseDrop(over_object, usr)) + Bumped(usr) + over_object.contain(src) + diff --git a/code/modules/xenoarcheaology/artifacts/artifact.dm b/code/modules/xenoarcheaology/artifacts/artifact.dm index e723561a73..05dbf1c7a8 100644 --- a/code/modules/xenoarcheaology/artifacts/artifact.dm +++ b/code/modules/xenoarcheaology/artifacts/artifact.dm @@ -4,6 +4,7 @@ icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "ano00" var/icon_num = 0 +<<<<<<< HEAD density = TRUE var/datum/artifact_effect/my_effect var/datum/artifact_effect/secondary_effect @@ -13,25 +14,25 @@ var/predefined_primary var/predefined_secondary +======= + density = 1 +>>>>>>> 71e8b0399de... Universal Anomalies (#7914) var/predefined_icon_num - var/predefined_triggers = FALSE + var/datum/component/artifact_master/artifact_master = /datum/component/artifact_master - var/predefined_trig_primary - var/predefined_trig_secondary + var/being_used = 0 /obj/machinery/artifact/New() ..() - if(predefined_effects && predefined_primary) - my_effect = new predefined_primary(src) + if(ispath(artifact_master)) + AddComponent(artifact_master) - if(predefined_secondary) - secondary_effect = new predefined_secondary(src) - if(prob(75)) - secondary_effect.ToggleActivate(0) + artifact_master = GetComponent(artifact_master) +<<<<<<< HEAD else var/effecttype = pick(subtypesof(/datum/artifact_effect)) my_effect = new effecttype(src) @@ -41,6 +42,12 @@ secondary_effect = new effecttype(src) if(prob(75)) secondary_effect.ToggleActivate(0) +======= + if(!istype(artifact_master)) + return + + var/datum/artifact_effect/my_effect = artifact_master.get_primary() +>>>>>>> 71e8b0399de... Universal Anomalies (#7914) if(!isnull(predefined_icon_num)) icon_num = predefined_icon_num @@ -77,6 +84,7 @@ if(prob(60)) my_effect.trigger = pick(TRIGGER_TOUCH, TRIGGER_HEAT, TRIGGER_COLD, TRIGGER_PHORON, TRIGGER_OXY, TRIGGER_CO2, TRIGGER_NITRO) +<<<<<<< HEAD if(predefined_triggers) if(predefined_trig_primary && my_effect) my_effect.trigger = predefined_trig_primary @@ -277,99 +285,12 @@ secondary_effect.ToggleActivate(0) /obj/machinery/artifact/Bumped(M as mob|obj) - ..() - if(istype(M,/obj)) - if(M:throwforce >= 10) - if(my_effect.trigger == TRIGGER_FORCE) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_FORCE && prob(25)) - secondary_effect.ToggleActivate(0) - else if(ishuman(M) && !istype(M:gloves,/obj/item/clothing/gloves)) - var/warn = 0 - - if (my_effect.trigger == TRIGGER_TOUCH && prob(50)) - my_effect.ToggleActivate() - warn = 1 - if(secondary_effect && secondary_effect.trigger == TRIGGER_TOUCH && prob(25)) - secondary_effect.ToggleActivate(0) - warn = 1 - - if (my_effect.effect == EFFECT_TOUCH && prob(50)) - my_effect.DoEffectTouch(M) - warn = 1 - if(secondary_effect && secondary_effect.effect == EFFECT_TOUCH && secondary_effect.activated && prob(50)) - secondary_effect.DoEffectTouch(M) - warn = 1 - - if(warn) - to_chat(M, "You accidentally touch \the [src].") +======= +/obj/machinery/artifact/update_icon() +>>>>>>> 71e8b0399de... Universal Anomalies (#7914) ..() -/obj/machinery/artifact/Bump(var/atom/bumped) - if(istype(bumped,/obj)) - if(bumped:throwforce >= 10) - if(my_effect.trigger == TRIGGER_FORCE) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_FORCE && prob(25)) - secondary_effect.ToggleActivate(0) - else if(ishuman(bumped) && GetAnomalySusceptibility(bumped) >= 0.5) - var/warn = 0 - - if (my_effect.trigger == TRIGGER_TOUCH && prob(50)) - my_effect.ToggleActivate() - warn = 1 - if(secondary_effect && secondary_effect.trigger == TRIGGER_TOUCH && prob(25)) - secondary_effect.ToggleActivate(0) - warn = 1 - - if (my_effect.effect == EFFECT_TOUCH && prob(50)) - my_effect.DoEffectTouch(bumped) - warn = 1 - if(secondary_effect && secondary_effect.effect == EFFECT_TOUCH && secondary_effect.activated && prob(50)) - secondary_effect.DoEffectTouch(bumped) - warn = 1 - - if(warn) - to_chat(bumped, "You accidentally touch \the [src] as it hits you.") - - ..() - -/obj/machinery/artifact/bullet_act(var/obj/item/projectile/P) - if(istype(P,/obj/item/projectile/bullet)) - if(my_effect.trigger == TRIGGER_FORCE) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_FORCE && prob(25)) - secondary_effect.ToggleActivate(0) - - else if(istype(P,/obj/item/projectile/beam) ||\ - istype(P,/obj/item/projectile/ion) ||\ - istype(P,/obj/item/projectile/energy)) - if(my_effect.trigger == TRIGGER_ENERGY) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_ENERGY && prob(25)) - secondary_effect.ToggleActivate(0) - -/obj/machinery/artifact/ex_act(severity) - switch(severity) - if(1.0) qdel(src) - if(2.0) - if (prob(50)) - qdel(src) - else - if(my_effect.trigger == TRIGGER_FORCE || my_effect.trigger == TRIGGER_HEAT) - my_effect.ToggleActivate() - if(secondary_effect && (secondary_effect.trigger == TRIGGER_FORCE || secondary_effect.trigger == TRIGGER_HEAT) && prob(25)) - secondary_effect.ToggleActivate(0) - if(3.0) - if (my_effect.trigger == TRIGGER_FORCE || my_effect.trigger == TRIGGER_HEAT) - my_effect.ToggleActivate() - if(secondary_effect && (secondary_effect.trigger == TRIGGER_FORCE || secondary_effect.trigger == TRIGGER_HEAT) && prob(25)) - secondary_effect.ToggleActivate(0) - return - -/obj/machinery/artifact/Moved() - . = ..() - if(my_effect) - my_effect.UpdateMove() - if(secondary_effect) - secondary_effect.UpdateMove() + if(LAZYLEN(artifact_master.get_active_effects())) + icon_state = "ano[icon_num]1" + else + icon_state = "ano[icon_num]0" diff --git a/code/modules/xenoarcheaology/artifacts/predefined/_predefined.dm b/code/modules/xenoarcheaology/artifacts/predefined/_predefined.dm index edec0dd052..bc0fa92645 100644 --- a/code/modules/xenoarcheaology/artifacts/predefined/_predefined.dm +++ b/code/modules/xenoarcheaology/artifacts/predefined/_predefined.dm @@ -1,15 +1,3 @@ /obj/machinery/artifact/predefined name = "alien artifact" - desc = "A large alien device." - - predefined_effects = TRUE - - predefined_primary = null - predefined_secondary = null - - predefined_icon_num = null - - predefined_triggers = FALSE - - predefined_trig_primary = null - predefined_trig_secondary = null + desc = "A large alien device." \ No newline at end of file diff --git a/code/modules/xenoarcheaology/artifacts/predefined/hungry_statue.dm b/code/modules/xenoarcheaology/artifacts/predefined/hungry_statue.dm index 6a81c02b8b..c4141ff192 100644 --- a/code/modules/xenoarcheaology/artifacts/predefined/hungry_statue.dm +++ b/code/modules/xenoarcheaology/artifacts/predefined/hungry_statue.dm @@ -2,14 +2,12 @@ name = "alien artifact" desc = "A large alien device." - predefined_effects = TRUE - - predefined_primary = /datum/artifact_effect/animate_anomaly - predefined_secondary = /datum/artifact_effect/vampire + artifact_master = /datum/component/artifact_master/hungry_statue predefined_icon_num = 14 - predefined_triggers = TRUE - - predefined_trig_primary = TRIGGER_OXY - predefined_trig_secondary = TRIGGER_OXY +/datum/component/artifact_master/hungry_statue + make_effects = list( + /datum/artifact_effect/animate_anomaly, + /datum/artifact_effect/vampire + ) diff --git a/code/modules/xenoarcheaology/boulder.dm b/code/modules/xenoarcheaology/boulder.dm index 7baa254643..b260f0b62a 100644 --- a/code/modules/xenoarcheaology/boulder.dm +++ b/code/modules/xenoarcheaology/boulder.dm @@ -75,8 +75,8 @@ var/obj/O = new spawn_type(get_turf(src)) if(istype(O, /obj/machinery/artifact)) var/obj/machinery/artifact/X = O - if(X.my_effect) - X.my_effect.artifact_id = artifact_find.artifact_id + if(X.artifact_master) + X.artifact_master.artifact_id = artifact_find.artifact_id O.anchored = FALSE // Anchored finds are lame. src.visible_message("\The [src] suddenly crumbles away.") else diff --git a/code/modules/xenoarcheaology/effect.dm b/code/modules/xenoarcheaology/effect.dm index 8b9dd625c1..74f2802aed 100644 --- a/code/modules/xenoarcheaology/effect.dm +++ b/code/modules/xenoarcheaology/effect.dm @@ -3,19 +3,42 @@ var/effect = EFFECT_TOUCH var/effectrange = 4 var/trigger = TRIGGER_TOUCH - var/atom/holder + var/datum/component/artifact_master/master var/activated = 0 - var/chargelevel = 0 + var/chargelevel = 1 var/chargelevelmax = 10 var/artifact_id = "" var/effect_type = 0 -/datum/artifact_effect/New(var/atom/location) + var/req_type = /atom/movable + + var/image/active_effect + var/effect_icon = 'icons/effects/effects.dmi' + var/effect_state = "sparkles" + var/effect_color = "#ffffff" + +// The last time the effect was toggled. + var/last_activation = 0 + +/datum/artifact_effect/Destroy() + if(master) + master = null + ..() - holder = location + +/datum/artifact_effect/New(var/datum/component/artifact_master/newmaster) + ..() + + master = newmaster effect = rand(0, MAX_EFFECT) trigger = rand(0, MAX_TRIGGER) + if(effect_icon && effect_state) + if(effect_state == "sparkles") + effect_state = "sparkles_[rand(1,4)]" + active_effect = image(effect_icon, effect_state) + active_effect.color = effect_color + //this will be replaced by the excavation code later, but it's here just in case artifact_id = "[pick("kappa","sigma","antaeres","beta","omicron","iota","epsilon","omega","gamma","delta","tau","alpha")]-[rand(100,999)]" @@ -36,21 +59,30 @@ /datum/artifact_effect/proc/ToggleActivate(var/reveal_toggle = 1) //so that other stuff happens first - spawn(0) + set waitfor = FALSE + + if(world.time - last_activation > 1 SECOND) + last_activation = world.time if(activated) activated = 0 else activated = 1 - if(reveal_toggle && holder) - if(istype(holder, /obj/machinery/artifact)) - var/obj/machinery/artifact/A = holder - A.icon_state = "ano[A.icon_num][activated]" + if(reveal_toggle && master.holder) + if(!isliving(master.holder)) + master.holder.update_icon() var/display_msg if(activated) display_msg = pick("momentarily glows brightly!","distorts slightly for a moment!","flickers slightly!","vibrates!","shimmers slightly for a moment!") else display_msg = pick("grows dull!","fades in intensity!","suddenly becomes very still!","suddenly becomes very quiet!") - var/atom/toplevelholder = holder + + if(active_effect) + if(activated) + master.holder.underlays.Add(active_effect) + else + master.holder.underlays.Remove(active_effect) + + var/atom/toplevelholder = master.holder while(!istype(toplevelholder.loc, /turf)) toplevelholder = toplevelholder.loc toplevelholder.visible_message("[bicon(toplevelholder)] [toplevelholder] [display_msg]") diff --git a/code/modules/xenoarcheaology/effect_master.dm b/code/modules/xenoarcheaology/effect_master.dm new file mode 100644 index 0000000000..4bb0780430 --- /dev/null +++ b/code/modules/xenoarcheaology/effect_master.dm @@ -0,0 +1,415 @@ + +/* + * Here there be the base component for artifacts. + */ + +/atom/proc/is_anomalous() + return (GetComponent(/datum/component/artifact_master)) + +/atom/proc/become_anomalous() + if(!is_anomalous()) + AddComponent(/datum/component/artifact_master) + if(istype(src, /obj/item)) + var/obj/item/I = src + LAZYINITLIST(I.origin_tech) + if(prob(50)) + I.origin_tech[TECH_PRECURSOR] += 1 + else + I.origin_tech[TECH_ARCANE] += 1 + var/rand_tech = pick(\ + TECH_MATERIAL,\ + TECH_ENGINEERING,\ + TECH_PHORON,\ + TECH_POWER,\ + TECH_BLUESPACE,\ + TECH_BIO,\ + TECH_COMBAT,\ + TECH_MAGNET,\ + TECH_DATA,\ + TECH_ILLEGAL\ + ) + LAZYSET(I.origin_tech, rand_tech, rand(4,7)) + +/datum/component/artifact_master + var/atom/holder + var/list/my_effects + + dupe_type = /datum/component/artifact_master + + var/effect_generation_chance = 100 + + var/list/make_effects + + var/artifact_id + +/datum/component/artifact_master/New() + . = ..() + holder = parent + + if(!holder) + qdel(src) + return + + my_effects = list() + + START_PROCESSING(SSobj, src) + + do_setup() + return + +/* + * Component System Registry. + * Here be dragons. + */ + +/datum/component/artifact_master/proc/DoRegistry() +//Melee Hit + RegisterSignal(holder, COMSIG_PARENT_ATTACKBY, /datum/component/artifact_master/proc/on_attackby, override = FALSE) +//Explosions + RegisterSignal(holder, COMSIG_ATOM_EX_ACT, /datum/component/artifact_master/proc/on_exact, override = FALSE) +//Bullets + RegisterSignal(holder, COMSIG_ATOM_BULLET_ACT, /datum/component/artifact_master/proc/on_bullet, override = FALSE) + +//Attackhand + RegisterSignal(holder, COMSIG_ATOM_ATTACK_HAND, /datum/component/artifact_master/proc/on_attack_hand, override = FALSE) + +//Bumped / Bumping + RegisterSignal(holder, COMSIG_MOVABLE_BUMP, /datum/component/artifact_master/proc/on_bump, override = FALSE) + RegisterSignal(holder, COMSIG_ATOM_BUMPED, /datum/component/artifact_master/proc/on_bumped, override = FALSE) + +//Moved + RegisterSignal(holder, COMSIG_MOVABLE_MOVED, /datum/component/artifact_master/proc/on_moved, override = FALSE) + +//Splashed with a reagent. + RegisterSignal(holder, COMSIG_REAGENTS_TOUCH, /datum/component/artifact_master/proc/on_reagent, override = FALSE) + +/* + * + */ + +/datum/component/artifact_master/proc/get_active_effects() + var/list/active_effects = list() + for(var/datum/artifact_effect/my_effect in my_effects) + if(my_effect.activated) + active_effects |= my_effect + + return active_effects + +/datum/component/artifact_master/proc/add_effect() + var/effect_type = input(usr, "What type do you want?", "Effect Type") as null|anything in subtypesof(/datum/artifact_effect) + if(effect_type) + var/datum/artifact_effect/my_effect = new effect_type(src) + if(istype(holder, my_effect.req_type)) + my_effects += my_effect + + else + to_chat(usr, "This effect can not be applied to this atom type.") + qdel(my_effect) + +/datum/component/artifact_master/proc/remove_effect() + var/to_remove_effect = input(usr, "What effect do you want to remove?", "Remove Effect") as null|anything in my_effects + + if(to_remove_effect) + var/datum/artifact_effect/AE = to_remove_effect + my_effects.Remove(to_remove_effect) + qdel(AE) + +/datum/component/artifact_master/Destroy() + holder = null + for(var/datum/artifact_effect/AE in my_effects) + AE.master = null + qdel(AE) + + STOP_PROCESSING(SSobj,src) + + . = ..() + +/datum/component/artifact_master/proc/do_setup() + if(LAZYLEN(make_effects)) + for(var/path in make_effects) + var/datum/artifact_effect/new_effect = new path(src) + if(istype(holder, new_effect.req_type)) + my_effects += new_effect + + else + generate_effects() + + DoRegistry() + +/datum/component/artifact_master/proc/generate_effects() + while(effect_generation_chance > 0) + var/chosen_path = pick(subtypesof(/datum/artifact_effect)) + if(effect_generation_chance >= 100) // If we're above 100 percent, just cut a flat amount and add an effect. + var/datum/artifact_effect/AE = new chosen_path(src) + if(istype(holder, AE.req_type)) + my_effects += AE + effect_generation_chance -= 30 + else + AE.master = src + qdel(AE) + continue + + effect_generation_chance /= 2 + + if(prob(effect_generation_chance)) // Otherwise, add effects as normal, with decreasing probability. + my_effects += new chosen_path(src) + + effect_generation_chance = round(effect_generation_chance) + +/datum/component/artifact_master/proc/get_holder() // Returns the holder. + return holder + +/datum/component/artifact_master/proc/get_primary() + if(LAZYLEN(my_effects)) + return my_effects[1] + return FALSE + +/* + * Trigger code. + */ + +/datum/component/artifact_master/proc/on_exact() + var/severity = args[2] + var/triggered = FALSE + for(var/datum/artifact_effect/my_effect in my_effects) + switch(severity) + if(1.0) + if(my_effect.trigger == TRIGGER_FORCE || my_effect.trigger == TRIGGER_HEAT || my_effect.trigger == TRIGGER_ENERGY) + my_effect.ToggleActivate() + triggered = TRUE + if(2.0) + if(my_effect.trigger == TRIGGER_FORCE || my_effect.trigger == TRIGGER_HEAT) + my_effect.ToggleActivate() + triggered = TRUE + if(3.0) + if (my_effect.trigger == TRIGGER_FORCE) + my_effect.ToggleActivate() + triggered = TRUE + + if(triggered) + return COMPONENT_IGNORE_EXPLOSION + + return + +/datum/component/artifact_master/proc/on_bullet() + var/obj/item/projectile/P = args[2] + var/triggered = TRUE + for(var/datum/artifact_effect/my_effect in my_effects) + if(istype(P,/obj/item/projectile/bullet)) + if(my_effect.trigger == TRIGGER_FORCE) + my_effect.ToggleActivate() + triggered = TRUE + + else if(istype(P,/obj/item/projectile/beam) ||\ + istype(P,/obj/item/projectile/ion) ||\ + istype(P,/obj/item/projectile/energy)) + if(my_effect.trigger == TRIGGER_ENERGY) + my_effect.ToggleActivate() + triggered = TRUE + + if(triggered) + return COMPONENT_CANCEL_ATTACK_CHAIN + + return + +/datum/component/artifact_master/proc/on_bump() + var/atom/bumped = args[2] + var/warn = FALSE + for(var/datum/artifact_effect/my_effect in my_effects) + if(istype(bumped,/obj)) + if(bumped:throwforce >= 10) + if(my_effect.trigger == TRIGGER_FORCE) + my_effect.ToggleActivate() + + else if(ishuman(bumped) && GetAnomalySusceptibility(bumped) >= 0.5) + if (my_effect.trigger == TRIGGER_TOUCH && prob(50)) + my_effect.ToggleActivate() + warn = 1 + + if (my_effect.effect == EFFECT_TOUCH && prob(50)) + my_effect.DoEffectTouch(bumped) + warn = 1 + + if(warn && isliving(bumped)) + to_chat(bumped, "You accidentally touch \the [holder] as it hits you.") + +/datum/component/artifact_master/proc/on_bumped() + var/atom/movable/M = args[2] + var/warn = FALSE + for(var/datum/artifact_effect/my_effect in my_effects) + if(istype(M,/obj)) + if(M:throwforce >= 10) + if(my_effect.trigger == TRIGGER_FORCE) + my_effect.ToggleActivate() + + else if(ishuman(M) && !istype(M:gloves,/obj/item/clothing/gloves)) + if (my_effect.trigger == TRIGGER_TOUCH && prob(50)) + my_effect.ToggleActivate() + warn = 1 + + if (my_effect.effect == EFFECT_TOUCH && prob(50)) + my_effect.DoEffectTouch(M) + warn = 1 + + if(warn && isliving(M)) + to_chat(M, "You accidentally touch \the [holder].") + +/datum/component/artifact_master/proc/on_attack_hand() + var/mob/living/user = args[2] + if(!istype(user)) + return + + if (get_dist(user, holder) > 1) + to_chat(user, "You can't reach [holder] from here.") + return + if(ishuman(user) && user:gloves) + to_chat(user, "You touch [holder] with your gloved hands, [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].") + return + + var/triggered = FALSE + + for(var/datum/artifact_effect/my_effect in my_effects) + + if(my_effect.trigger == TRIGGER_TOUCH) + triggered = TRUE + my_effect.ToggleActivate() + + if (my_effect.effect == EFFECT_TOUCH) + triggered = TRUE + my_effect.DoEffectTouch(user) + + if(triggered) + to_chat(user, "You touch [holder].") + + else + to_chat(user, "You touch [holder], [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].") + + +/datum/component/artifact_master/proc/on_attackby() + var/obj/item/weapon/W = args[2] + for(var/datum/artifact_effect/my_effect in my_effects) + + if (istype(W, /obj/item/weapon/reagent_containers)) + if(W.reagents.has_reagent("hydrogen", 1) || W.reagents.has_reagent("water", 1)) + if(my_effect.trigger == TRIGGER_WATER) + my_effect.ToggleActivate() + else if(W.reagents.has_reagent("sacid", 1) || W.reagents.has_reagent("pacid", 1) || W.reagents.has_reagent("diethylamine", 1)) + if(my_effect.trigger == TRIGGER_ACID) + my_effect.ToggleActivate() + else if(W.reagents.has_reagent("phoron", 1) || W.reagents.has_reagent("thermite", 1)) + if(my_effect.trigger == TRIGGER_VOLATILE) + my_effect.ToggleActivate() + else if(W.reagents.has_reagent("toxin", 1) || W.reagents.has_reagent("cyanide", 1) || W.reagents.has_reagent("amatoxin", 1) || W.reagents.has_reagent("neurotoxin", 1)) + if(my_effect.trigger == TRIGGER_TOXIN) + my_effect.ToggleActivate() + else if(istype(W,/obj/item/weapon/melee/baton) && W:status ||\ + istype(W,/obj/item/weapon/melee/energy) ||\ + istype(W,/obj/item/weapon/melee/cultblade) ||\ + istype(W,/obj/item/weapon/card/emag) ||\ + istype(W,/obj/item/device/multitool)) + if (my_effect.trigger == TRIGGER_ENERGY) + my_effect.ToggleActivate() + + else if (istype(W,/obj/item/weapon/flame) && W:lit ||\ + istype(W,/obj/item/weapon/weldingtool) && W:welding) + if(my_effect.trigger == TRIGGER_HEAT) + my_effect.ToggleActivate() + else + if (my_effect.trigger == TRIGGER_FORCE && W.force >= 10) + my_effect.ToggleActivate() + +/datum/component/artifact_master/proc/on_reagent() + var/datum/reagent/Touching = args[2] + + var/list/water = list("hydrogen", "water") + var/list/acid = list("sacid", "pacid", "diethylamine") + var/list/volatile = list("phoron","thermite") + var/list/toxic = list("toxin","cyanide","amatoxin","neurotoxin") + + for(var/datum/artifact_effect/my_effect in my_effects) + if(Touching.id in water) + if(my_effect.trigger == TRIGGER_WATER) + my_effect.ToggleActivate() + else if(Touching.id in acid) + if(my_effect.trigger == TRIGGER_ACID) + my_effect.ToggleActivate() + else if(Touching.id in volatile) + if(my_effect.trigger == TRIGGER_VOLATILE) + my_effect.ToggleActivate() + else if(Touching.id in toxic) + if(my_effect.trigger == TRIGGER_TOXIN) + my_effect.ToggleActivate() + +/datum/component/artifact_master/proc/on_moved() + for(var/datum/artifact_effect/my_effect in my_effects) + if(my_effect) + my_effect.UpdateMove() + +/datum/component/artifact_master/process() + var/turf/L = holder.loc + if(!istype(L) && !isliving(L)) // We're inside a non-mob container or on null turf, either way stop processing effects + return + + if(istype(holder, /atom/movable)) + var/atom/movable/HA = holder + if(HA.pulledby) + on_bumped(holder, HA.pulledby) + + for(var/datum/artifact_effect/my_effect in my_effects) + if(my_effect) + my_effect.UpdateMove() + + //if any of our effects rely on environmental factors, work that out + var/trigger_cold = 0 + var/trigger_hot = 0 + var/trigger_phoron = 0 + var/trigger_oxy = 0 + var/trigger_co2 = 0 + var/trigger_nitro = 0 + + var/turf/T = get_turf(holder) + var/datum/gas_mixture/env = T.return_air() + if(env) + if(env.temperature < 225) + trigger_cold = 1 + else if(env.temperature > 375) + trigger_hot = 1 + + if(env.gas["phoron"] >= 10) + trigger_phoron = 1 + if(env.gas["oxygen"] >= 10) + trigger_oxy = 1 + if(env.gas["carbon_dioxide"] >= 10) + trigger_co2 = 1 + if(env.gas["nitrogen"] >= 10) + trigger_nitro = 1 + + for(var/datum/artifact_effect/my_effect in my_effects) + my_effect.artifact_id = artifact_id + + my_effect.process() + + //COLD ACTIVATION + if(my_effect.trigger == TRIGGER_COLD && (trigger_cold ^ my_effect.activated)) + my_effect.ToggleActivate() + + //HEAT ACTIVATION + if(my_effect.trigger == TRIGGER_HEAT && (trigger_hot ^ my_effect.activated)) + my_effect.ToggleActivate() + + //PHORON GAS ACTIVATION + if(my_effect.trigger == TRIGGER_PHORON && (trigger_phoron ^ my_effect.activated)) + my_effect.ToggleActivate() + + //OXYGEN GAS ACTIVATION + if(my_effect.trigger == TRIGGER_OXY && (trigger_oxy ^ my_effect.activated)) + my_effect.ToggleActivate() + + //CO2 GAS ACTIVATION + if(my_effect.trigger == TRIGGER_CO2 && (trigger_co2 ^ my_effect.activated)) + my_effect.ToggleActivate() + + //NITROGEN GAS ACTIVATION + if(my_effect.trigger == TRIGGER_NITRO && (trigger_nitro ^ my_effect.activated)) + my_effect.ToggleActivate() + diff --git a/code/modules/xenoarcheaology/effects/animate_anomaly.dm b/code/modules/xenoarcheaology/effects/animate_anomaly.dm index c0c17e4aaf..a7ea238a5d 100644 --- a/code/modules/xenoarcheaology/effects/animate_anomaly.dm +++ b/code/modules/xenoarcheaology/effects/animate_anomaly.dm @@ -4,6 +4,9 @@ effect_type = EFFECT_PSIONIC var/mob/living/target = null + effect_state = "pulsing" + effect_color = "#00c3ff" + /datum/artifact_effect/animate_anomaly/ToggleActivate(var/reveal_toggle = 1) ..() find_target() @@ -13,21 +16,22 @@ effectrange = max(3, effectrange) /datum/artifact_effect/animate_anomaly/proc/find_target() - if(!target || target.z != holder.z || get_dist(target, holder) > effectrange) + if(!target || target.z != master.holder.z || get_dist(target, master.holder) > effectrange) var/mob/living/ClosestMob = null - for(var/mob/living/L in range(effectrange, holder)) + for(var/mob/living/L in range(effectrange, get_turf(master.holder))) if(!L.mind) continue if(!ClosestMob) ClosestMob = L continue if(!L.stat) - if(get_dist(holder, L) < get_dist(holder, ClosestMob)) + if(get_dist(master.holder, L) < get_dist(master.holder, ClosestMob)) ClosestMob = L target = ClosestMob /datum/artifact_effect/animate_anomaly/DoEffectTouch(var/mob/living/user) + var/atom/holder = master.holder var/obj/O = holder var/turf/T = get_step_away(O, user) @@ -36,25 +40,18 @@ O.visible_message("\The [holder] lurches away from [user]") /datum/artifact_effect/animate_anomaly/DoEffectAura() - var/obj/O = holder - if(!target || target.z != O.z || get_dist(target, O) > effectrange) - target = null - find_target() - var/turf/T = get_step_to(O, target) + var/obj/O = master.holder + find_target() - if(target && istype(T) && istype(O.loc, /turf)) - if(get_dist(O, T) > 1) - O.Move(T) - O.visible_message("\The [holder] lurches toward [target]") + if(!target || !istype(O)) + return + + O.dir = get_dir(O, target) + + if(istype(O.loc, /turf)) + if(get_dist(O.loc, target.loc) > 1) + O.Move(get_step_to(O, target)) + O.visible_message("\The [O] lurches toward [target]") /datum/artifact_effect/animate_anomaly/DoEffectPulse() - var/obj/O = holder - if(!target || target.z != O.z || get_dist(target, O) > effectrange) - target = null - find_target() - var/turf/T = get_step_to(O, target) - - if(target && istype(T) && istype(O.loc, /turf)) - if(get_dist(O, T) > 1) - O.Move(T) - O.visible_message("\The [holder] lurches toward [target]") + DoEffectAura() diff --git a/code/modules/xenoarcheaology/effects/badfeeling.dm b/code/modules/xenoarcheaology/effects/badfeeling.dm index a0aa7dc775..c793085262 100644 --- a/code/modules/xenoarcheaology/effects/badfeeling.dm +++ b/code/modules/xenoarcheaology/effects/badfeeling.dm @@ -25,6 +25,9 @@ "OH GOD!", "HELP ME!") + effect_state = "summoning" + effect_color = "#643232" + /datum/artifact_effect/badfeeling/DoEffectTouch(var/mob/user) if(user) if (istype(user, /mob/living/carbon/human)) @@ -39,6 +42,7 @@ H.dizziness += rand(3,5) /datum/artifact_effect/badfeeling/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/human/H in range(src.effectrange,T)) @@ -53,6 +57,7 @@ return 1 /datum/artifact_effect/badfeeling/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/human/H in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/berserk.dm b/code/modules/xenoarcheaology/effects/berserk.dm index a221c9104c..227f3e63ba 100644 --- a/code/modules/xenoarcheaology/effects/berserk.dm +++ b/code/modules/xenoarcheaology/effects/berserk.dm @@ -2,6 +2,9 @@ name = "berserk" effect_type = EFFECT_PSIONIC + effect_state = "summoning" + effect_color = "#5f0000" + /datum/artifact_effect/berserk/proc/apply_berserk(var/mob/living/L) if(!istype(L)) return FALSE @@ -28,6 +31,7 @@ return TRUE /datum/artifact_effect/berserk/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for(var/mob/living/L in range(src.effectrange,T)) @@ -36,6 +40,7 @@ return TRUE /datum/artifact_effect/berserk/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for(var/mob/living/L in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/cannibal.dm b/code/modules/xenoarcheaology/effects/cannibal.dm index 04a0b5a9e8..3165546d56 100644 --- a/code/modules/xenoarcheaology/effects/cannibal.dm +++ b/code/modules/xenoarcheaology/effects/cannibal.dm @@ -25,6 +25,9 @@ "Butcher them!", "Feast!") + effect_state = "summoning" + effect_color = "#c50303" + /datum/artifact_effect/cannibalfeeling/DoEffectTouch(var/mob/user) if(user) if (istype(user, /mob/living/carbon/human)) @@ -41,6 +44,7 @@ H.nutrition = H.nutrition / 1.5 /datum/artifact_effect/cannibalfeeling/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/human/H in range(src.effectrange,T)) @@ -57,6 +61,7 @@ return 1 /datum/artifact_effect/cannibalfeeling/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/human/H in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/cellcharge.dm b/code/modules/xenoarcheaology/effects/cellcharge.dm index b5c8e6224b..dfb6db6674 100644 --- a/code/modules/xenoarcheaology/effects/cellcharge.dm +++ b/code/modules/xenoarcheaology/effects/cellcharge.dm @@ -4,6 +4,8 @@ effect_type = EFFECT_ELECTRO var/last_message + effect_color = "#ffee06" + /datum/artifact_effect/cellcharge/DoEffectTouch(var/mob/user) if(user) if(isrobot(user)) @@ -14,6 +16,7 @@ return 1 /datum/artifact_effect/cellcharge/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/obj/machinery/power/apc/C in GLOB.apcs) @@ -42,6 +45,7 @@ return 1 /datum/artifact_effect/cellcharge/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/obj/machinery/power/apc/C in GLOB.apcs) diff --git a/code/modules/xenoarcheaology/effects/celldrain.dm b/code/modules/xenoarcheaology/effects/celldrain.dm index ee279032ec..452e5fd3a3 100644 --- a/code/modules/xenoarcheaology/effects/celldrain.dm +++ b/code/modules/xenoarcheaology/effects/celldrain.dm @@ -4,6 +4,9 @@ effect_type = EFFECT_ELECTRO var/last_message + effect_state = "pulsing" + effect_color = "#fbff02" + /datum/artifact_effect/celldrain/DoEffectTouch(var/mob/user) if(user) if(istype(user, /mob/living/silicon/robot)) @@ -16,6 +19,7 @@ return 1 /datum/artifact_effect/celldrain/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/obj/machinery/power/apc/C in GLOB.apcs) @@ -44,6 +48,7 @@ return 1 /datum/artifact_effect/celldrain/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/obj/machinery/power/apc/C in GLOB.apcs) diff --git a/code/modules/xenoarcheaology/effects/cold.dm b/code/modules/xenoarcheaology/effects/cold.dm index 9855ac280b..f91c8d8ffd 100644 --- a/code/modules/xenoarcheaology/effects/cold.dm +++ b/code/modules/xenoarcheaology/effects/cold.dm @@ -3,6 +3,8 @@ name = "cold" var/target_temp + effect_color = "#b3f6ff" + /datum/artifact_effect/cold/New() ..() target_temp = rand(0, 250) @@ -10,6 +12,7 @@ effect_type = pick(EFFECT_ORGANIC, EFFECT_BLUESPACE, EFFECT_SYNTH) /datum/artifact_effect/cold/DoEffectTouch(var/mob/user) + var/atom/holder = master.holder if(holder) to_chat(user, "A chill passes up your spine!") var/datum/gas_mixture/env = holder.loc.return_air() @@ -17,6 +20,7 @@ env.temperature = max(env.temperature - rand(5,50), 0) /datum/artifact_effect/cold/DoEffectAura() + var/atom/holder = master.holder if(holder) var/datum/gas_mixture/env = holder.loc.return_air() if(env && env.temperature > target_temp) diff --git a/code/modules/xenoarcheaology/effects/dnaswitch.dm b/code/modules/xenoarcheaology/effects/dnaswitch.dm index c4c36cb5b1..1903dcb78a 100644 --- a/code/modules/xenoarcheaology/effects/dnaswitch.dm +++ b/code/modules/xenoarcheaology/effects/dnaswitch.dm @@ -4,6 +4,9 @@ effect_type = EFFECT_ORGANIC var/severity + effect_state = "smoke" + effect_color = "#77ff83" + /datum/artifact_effect/dnaswitch/New() ..() if(effect == EFFECT_AURA) @@ -28,6 +31,7 @@ return 1 /datum/artifact_effect/dnaswitch/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for(var/mob/living/carbon/human/H in range(src.effectrange,T)) @@ -47,6 +51,7 @@ scramble(0, H, weakness * severity) /datum/artifact_effect/dnaswitch/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for(var/mob/living/carbon/human/H in range(200, T)) diff --git a/code/modules/xenoarcheaology/effects/electric_field.dm b/code/modules/xenoarcheaology/effects/electric_field.dm index 3b27e8fe42..41695f016b 100644 --- a/code/modules/xenoarcheaology/effects/electric_field.dm +++ b/code/modules/xenoarcheaology/effects/electric_field.dm @@ -3,7 +3,10 @@ name = "electric field" effect_type = EFFECT_ENERGY + effect_color = "#ffff00" + /datum/artifact_effect/electric_field/DoEffectTouch(var/mob/user) + var/atom/holder = master.holder var/list/nearby_mobs = list() for(var/mob/living/L in oview(effectrange, get_turf(holder))) if(L == user) // You're "grounded" when you contact the artifact. @@ -27,6 +30,7 @@ L.electrocute_act(rand(25, 40), holder, 0.75, BP_TORSO) /datum/artifact_effect/electric_field/DoEffectAura() + var/atom/holder = master.holder var/list/nearby_mobs = list() for(var/mob/living/L in oview(effectrange, get_turf(holder))) if(!L.stat) @@ -48,6 +52,7 @@ L.electrocute_act(rand(1, 10), holder, 0.75, BP_TORSO) /datum/artifact_effect/electric_field/DoEffectPulse() + var/atom/holder = master.holder var/list/nearby_mobs = list() for(var/mob/living/L in oview(effectrange, get_turf(holder))) if(!L.stat) diff --git a/code/modules/xenoarcheaology/effects/emp.dm b/code/modules/xenoarcheaology/effects/emp.dm index fd30420b57..0aee7933f6 100644 --- a/code/modules/xenoarcheaology/effects/emp.dm +++ b/code/modules/xenoarcheaology/effects/emp.dm @@ -2,11 +2,14 @@ name = "emp" effect_type = EFFECT_ELECTRO + effect_state = "empdisable" + /datum/artifact_effect/emp/New() ..() effect = EFFECT_PULSE /datum/artifact_effect/emp/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) empulse(T, effectrange/4, effectrange/3, effectrange/2, effectrange) diff --git a/code/modules/xenoarcheaology/effects/feysight.dm b/code/modules/xenoarcheaology/effects/feysight.dm index 379dc0cc54..33892b7e64 100644 --- a/code/modules/xenoarcheaology/effects/feysight.dm +++ b/code/modules/xenoarcheaology/effects/feysight.dm @@ -2,6 +2,9 @@ name = "feysight" effect_type = EFFECT_PSIONIC + effect_state = "pulsing" + effect_color = "#00c763" + /datum/artifact_effect/feysight/proc/apply_modifier(var/mob/living/L) if(!istype(L)) return FALSE @@ -28,6 +31,7 @@ return TRUE /datum/artifact_effect/feysight/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for(var/mob/living/L in range(src.effectrange,T)) @@ -36,6 +40,7 @@ return TRUE /datum/artifact_effect/feysight/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for(var/mob/living/L in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/forcefield.dm b/code/modules/xenoarcheaology/effects/forcefield.dm index f4f1a3ab07..16c05f0810 100644 --- a/code/modules/xenoarcheaology/effects/forcefield.dm +++ b/code/modules/xenoarcheaology/effects/forcefield.dm @@ -3,11 +3,15 @@ var/list/created_field = list() effect_type = EFFECT_PARTICLE + effect_state = "shield-old" + effect_color = "#00b7ff" + /datum/artifact_effect/forcefield/New() ..() trigger = TRIGGER_TOUCH /datum/artifact_effect/forcefield/ToggleActivate() + var/atom/holder = master.holder ..() if(created_field.len) for(var/obj/effect/energy_field/F in created_field) @@ -35,6 +39,7 @@ E.adjust_strength(0.25, 0) /datum/artifact_effect/forcefield/UpdateMove() + var/atom/holder = master.holder if(created_field.len && holder) var/turf/T = get_turf(holder) while(created_field.len < 16) diff --git a/code/modules/xenoarcheaology/effects/gaia.dm b/code/modules/xenoarcheaology/effects/gaia.dm index 1a89149818..6ef8f2ccda 100644 --- a/code/modules/xenoarcheaology/effects/gaia.dm +++ b/code/modules/xenoarcheaology/effects/gaia.dm @@ -5,6 +5,8 @@ var/list/my_glitterflies = list() + effect_color = "#8cd448" + /datum/artifact_effect/gaia/proc/age_plantlife(var/obj/machinery/portable_atmospherics/hydroponics/Tray = null) if(istype(Tray) && Tray.seed) Tray.health += rand(1,3) * HYDRO_SPEED_MULTIPLIER @@ -30,6 +32,7 @@ P.update_icon() /datum/artifact_effect/gaia/DoEffectTouch(var/mob/user) + var/atom/holder = master.holder to_chat(user, "You feel the presence of something long forgotten.") for(var/obj/machinery/portable_atmospherics/hydroponics/Tray in view(world.view,get_turf(holder))) age_plantlife(Tray) @@ -44,6 +47,7 @@ age_plantlife(P) /datum/artifact_effect/gaia/DoEffectAura() + var/atom/holder = master.holder for(var/obj/machinery/portable_atmospherics/hydroponics/Tray in view(effectrange,holder)) age_plantlife(Tray) if(prob(2)) @@ -57,6 +61,7 @@ age_plantlife(P) /datum/artifact_effect/gaia/DoEffectPulse() + var/atom/holder = master.holder for(var/obj/machinery/portable_atmospherics/hydroponics/Tray in view(effectrange,holder)) age_plantlife(Tray) if(prob(10)) @@ -70,6 +75,7 @@ age_plantlife(P) /datum/artifact_effect/gaia/process() + var/atom/holder = master.holder ..() listclearnulls(my_glitterflies) diff --git a/code/modules/xenoarcheaology/effects/gasco2.dm b/code/modules/xenoarcheaology/effects/gasco2.dm index 264dca7352..76336f3266 100644 --- a/code/modules/xenoarcheaology/effects/gasco2.dm +++ b/code/modules/xenoarcheaology/effects/gasco2.dm @@ -1,18 +1,22 @@ /datum/artifact_effect/gasco2 name = "CO2 creation" + effect_color = "#a5a5a5" + /datum/artifact_effect/gasco2/New() ..() effect = pick(EFFECT_TOUCH, EFFECT_AURA) effect_type = pick(EFFECT_BLUESPACE, EFFECT_SYNTH) /datum/artifact_effect/gasco2/DoEffectTouch(var/mob/user) + var/atom/holder = master.holder if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) holder_loc.assume_gas("carbon_dioxide", rand(2, 15)) /datum/artifact_effect/gasco2/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) diff --git a/code/modules/xenoarcheaology/effects/gasnitro.dm b/code/modules/xenoarcheaology/effects/gasnitro.dm index 42b440fc1c..fd936c833b 100644 --- a/code/modules/xenoarcheaology/effects/gasnitro.dm +++ b/code/modules/xenoarcheaology/effects/gasnitro.dm @@ -1,18 +1,22 @@ /datum/artifact_effect/gasnitro name = "N2 creation" + effect_color = "#c2d3d8" + /datum/artifact_effect/gasnitro/New() ..() effect = pick(EFFECT_TOUCH, EFFECT_AURA) effect_type = pick(EFFECT_BLUESPACE, EFFECT_SYNTH) /datum/artifact_effect/gasnitro/DoEffectTouch(var/mob/user) + var/atom/holder = master.holder if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) holder_loc.assume_gas("nitrogen", rand(2, 15)) /datum/artifact_effect/gasnitro/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) diff --git a/code/modules/xenoarcheaology/effects/gasoxy.dm b/code/modules/xenoarcheaology/effects/gasoxy.dm index bb159509dc..14bb83c328 100644 --- a/code/modules/xenoarcheaology/effects/gasoxy.dm +++ b/code/modules/xenoarcheaology/effects/gasoxy.dm @@ -7,12 +7,14 @@ effect_type = pick(EFFECT_BLUESPACE, EFFECT_SYNTH) /datum/artifact_effect/gasoxy/DoEffectTouch(var/mob/user) + var/atom/holder = master.holder if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) holder_loc.assume_gas("oxygen", rand(2, 15)) /datum/artifact_effect/gasoxy/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) diff --git a/code/modules/xenoarcheaology/effects/gasphoron.dm b/code/modules/xenoarcheaology/effects/gasphoron.dm index b84296fbb8..9d26cd78cd 100644 --- a/code/modules/xenoarcheaology/effects/gasphoron.dm +++ b/code/modules/xenoarcheaology/effects/gasphoron.dm @@ -1,18 +1,22 @@ /datum/artifact_effect/gasphoron name = "phoron creation" + effect_color = "#c408ba" + /datum/artifact_effect/gasphoron/New() ..() effect = pick(EFFECT_TOUCH, EFFECT_AURA) effect_type = pick(EFFECT_BLUESPACE, EFFECT_SYNTH) /datum/artifact_effect/gasphoron/DoEffectTouch(var/mob/user) + var/atom/holder = master.holder if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) holder_loc.assume_gas("phoron", rand(2, 15)) /datum/artifact_effect/gasphoron/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) diff --git a/code/modules/xenoarcheaology/effects/gassleeping.dm b/code/modules/xenoarcheaology/effects/gassleeping.dm index 3c12f8f91c..c18a15aa89 100644 --- a/code/modules/xenoarcheaology/effects/gassleeping.dm +++ b/code/modules/xenoarcheaology/effects/gassleeping.dm @@ -7,12 +7,14 @@ effect_type = pick(EFFECT_BLUESPACE, EFFECT_SYNTH) /datum/artifact_effect/gassleeping/DoEffectTouch(var/mob/user) + var/atom/holder = master.holder if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) holder_loc.assume_gas("nitrous_oxide", rand(2, 15)) /datum/artifact_effect/gassleeping/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) diff --git a/code/modules/xenoarcheaology/effects/goodfeeling.dm b/code/modules/xenoarcheaology/effects/goodfeeling.dm index c5d05adc5e..4ae5a8f4cd 100644 --- a/code/modules/xenoarcheaology/effects/goodfeeling.dm +++ b/code/modules/xenoarcheaology/effects/goodfeeling.dm @@ -23,6 +23,9 @@ "You're so happy suddenly, you almost want to dance and sing.", "You feel like the world is out to help you.") + effect_state = "summoning" + effect_color = "#009118" + /datum/artifact_effect/goodfeeling/DoEffectTouch(var/mob/user) if(user) if (istype(user, /mob/living/carbon/human)) @@ -37,6 +40,7 @@ H.dizziness += rand(3,5) /datum/artifact_effect/goodfeeling/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/human/H in range(src.effectrange,T)) @@ -51,6 +55,7 @@ return 1 /datum/artifact_effect/goodfeeling/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/human/H in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/gravitational_waves.dm b/code/modules/xenoarcheaology/effects/gravitational_waves.dm index 6798eef64c..9b9b03d812 100644 --- a/code/modules/xenoarcheaology/effects/gravitational_waves.dm +++ b/code/modules/xenoarcheaology/effects/gravitational_waves.dm @@ -5,10 +5,14 @@ var/last_wave_pull = 0 + effect_state = "gravisphere" + effect_color = "#d8c3ff" + /datum/artifact_effect/gravity_wave/DoEffectTouch(var/mob/user) gravwave(user, effectrange, STAGE_TWO) /datum/artifact_effect/gravity_wave/DoEffectAura() + var/atom/holder = master.holder var/seconds_since_last_pull = max(0, round((last_wave_pull - world.time) / 10)) if(prob(10 + seconds_since_last_pull)) @@ -17,6 +21,7 @@ gravwave(get_turf(holder), effectrange, STAGE_TWO) /datum/artifact_effect/gravity_wave/DoEffectPulse() + var/atom/holder = master.holder holder.visible_message("\The [holder] distorts as local gravity intensifies, and shifts toward it.") gravwave(get_turf(holder), effectrange, STAGE_TWO) diff --git a/code/modules/xenoarcheaology/effects/heal.dm b/code/modules/xenoarcheaology/effects/heal.dm index 39bb09d04e..9c6bc1e341 100644 --- a/code/modules/xenoarcheaology/effects/heal.dm +++ b/code/modules/xenoarcheaology/effects/heal.dm @@ -1,6 +1,7 @@ /datum/artifact_effect/heal name = "heal" effect_type = EFFECT_ORGANIC + effect_color = "#4649ff" /datum/artifact_effect/heal/DoEffectTouch(var/mob/toucher) //todo: check over this properly @@ -33,6 +34,7 @@ return 1 /datum/artifact_effect/heal/DoEffectAura() + var/atom/holder = master.holder //todo: check over this properly if(holder) var/turf/T = get_turf(holder) @@ -49,6 +51,7 @@ C.updatehealth() /datum/artifact_effect/heal/DoEffectPulse() + var/atom/holder = master.holder //todo: check over this properly if(holder) var/turf/T = get_turf(holder) diff --git a/code/modules/xenoarcheaology/effects/heat.dm b/code/modules/xenoarcheaology/effects/heat.dm index 720d146443..a9ed5a31e1 100644 --- a/code/modules/xenoarcheaology/effects/heat.dm +++ b/code/modules/xenoarcheaology/effects/heat.dm @@ -2,6 +2,7 @@ /datum/artifact_effect/heat name = "heat" var/target_temp + effect_color = "#ff6600" /datum/artifact_effect/heat/New() ..() @@ -10,6 +11,7 @@ target_temp = rand(300, 600) /datum/artifact_effect/heat/DoEffectTouch(var/mob/user) + var/atom/holder = master.holder if(holder) to_chat(user, " You feel a wave of heat travel up your spine!") var/datum/gas_mixture/env = holder.loc.return_air() @@ -17,6 +19,7 @@ env.temperature += rand(5,50) /datum/artifact_effect/heat/DoEffectAura() + var/atom/holder = master.holder if(holder) var/datum/gas_mixture/env = holder.loc.return_air() if(env && env.temperature < target_temp) diff --git a/code/modules/xenoarcheaology/effects/hurt.dm b/code/modules/xenoarcheaology/effects/hurt.dm index 14aff4e624..d9cc1f043f 100644 --- a/code/modules/xenoarcheaology/effects/hurt.dm +++ b/code/modules/xenoarcheaology/effects/hurt.dm @@ -2,6 +2,8 @@ name = "hurt" effect_type = EFFECT_ORGANIC + effect_color = "#6d1212" + /datum/artifact_effect/hurt/DoEffectTouch(var/mob/toucher) if(toucher) var/weakness = GetAnomalySusceptibility(toucher) @@ -20,6 +22,7 @@ C.weakened += 6 * weakness /datum/artifact_effect/hurt/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/C in range(src.effectrange,T)) @@ -35,6 +38,7 @@ C.updatehealth() /datum/artifact_effect/hurt/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/C in range(effectrange, T)) diff --git a/code/modules/xenoarcheaology/effects/poltergeist.dm b/code/modules/xenoarcheaology/effects/poltergeist.dm index 189c0ea4cd..d40540618e 100644 --- a/code/modules/xenoarcheaology/effects/poltergeist.dm +++ b/code/modules/xenoarcheaology/effects/poltergeist.dm @@ -3,6 +3,9 @@ name = "poltergeist" effect_type = EFFECT_ENERGY + effect_state = "shield2" + effect_color = "#a824c9" + /datum/artifact_effect/poltergeist/proc/throw_at_mob(var/mob/living/target, var/damage = 20) var/list/valid_targets = list() @@ -19,6 +22,7 @@ throw_at_mob(user, rand(10, 30)) /datum/artifact_effect/poltergeist/DoEffectAura() + var/atom/holder = master.holder var/mob/living/target = null for(var/mob/living/L in oview(get_turf(holder), effectrange)) if(L.stat || !L.mind) @@ -33,6 +37,7 @@ throw_at_mob(target, rand(15, 30)) /datum/artifact_effect/poltergeist/DoEffectPulse() + var/atom/holder = master.holder var/mob/living/target = null for(var/mob/living/L in oview(get_turf(holder), effectrange)) if(L.stat || !L.mind) diff --git a/code/modules/xenoarcheaology/effects/radiate.dm b/code/modules/xenoarcheaology/effects/radiate.dm index e38540eb04..fca7eee741 100644 --- a/code/modules/xenoarcheaology/effects/radiate.dm +++ b/code/modules/xenoarcheaology/effects/radiate.dm @@ -2,6 +2,8 @@ name = "radiation" var/radiation_amount + effect_color = "#007006" + /datum/artifact_effect/radiate/New() ..() radiation_amount = rand(1, 10) @@ -14,11 +16,13 @@ return 1 /datum/artifact_effect/radiate/DoEffectAura() + var/atom/holder = master.holder if(holder) SSradiation.flat_radiate(holder, radiation_amount, src.effectrange) return 1 /datum/artifact_effect/radiate/DoEffectPulse() + var/atom/holder = master.holder if(holder) SSradiation.radiate(holder, ((radiation_amount * 3) * (sqrt(src.effectrange)))) //Need to get feedback on this //VOREStation Edit - Was too crazy-strong. return 1 diff --git a/code/modules/xenoarcheaology/effects/resurrect.dm b/code/modules/xenoarcheaology/effects/resurrect.dm index e54ca276ea..746df240d7 100644 --- a/code/modules/xenoarcheaology/effects/resurrect.dm +++ b/code/modules/xenoarcheaology/effects/resurrect.dm @@ -4,7 +4,11 @@ var/stored_life = 0 + effect_state = "pulsing" + effect_color = "#ff0000" + /datum/artifact_effect/resurrect/proc/steal_life(var/mob/living/target = null) + var/atom/holder = master.holder if(!istype(target)) return 0 @@ -16,6 +20,7 @@ return 0 /datum/artifact_effect/resurrect/proc/give_life(var/mob/living/target = null) + var/atom/holder = master.holder if(!istype(target)) return @@ -34,6 +39,7 @@ stored_life = 0 /datum/artifact_effect/resurrect/proc/attempt_revive(var/mob/living/L = null) + var/atom/holder = master.holder spawn() if(istype(L, /mob/living/simple_mob)) var/mob/living/simple_mob/SM = L @@ -70,6 +76,7 @@ holder.visible_message("\The [H]'s eyes open in a flash of light!") /datum/artifact_effect/resurrect/DoEffectTouch(var/mob/user) + var/atom/holder = master.holder for(var/mob/living/L in oview(effectrange, get_turf(holder))) stored_life += 4 * steal_life(L) @@ -80,6 +87,7 @@ break /datum/artifact_effect/resurrect/DoEffectAura() + var/atom/holder = master.holder for(var/mob/living/L in oview(effectrange, get_turf(holder))) stored_life += steal_life(L) @@ -90,6 +98,7 @@ break /datum/artifact_effect/resurrect/DoEffectPulse() + var/atom/holder = master.holder for(var/mob/living/L in oview(effectrange, get_turf(holder))) stored_life += 2 * steal_life(L) diff --git a/code/modules/xenoarcheaology/effects/roboheal.dm b/code/modules/xenoarcheaology/effects/roboheal.dm index 0052a53979..c91317d72e 100644 --- a/code/modules/xenoarcheaology/effects/roboheal.dm +++ b/code/modules/xenoarcheaology/effects/roboheal.dm @@ -2,6 +2,8 @@ name = "robotic healing" var/last_message + effect_color = "#3879ad" + /datum/artifact_effect/roboheal/New() ..() effect_type = pick(EFFECT_ELECTRO, EFFECT_PARTICLE) @@ -16,6 +18,7 @@ return 1 /datum/artifact_effect/roboheal/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) @@ -28,6 +31,7 @@ return 1 /datum/artifact_effect/roboheal/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/robohurt.dm b/code/modules/xenoarcheaology/effects/robohurt.dm index 8ed47a9e28..40680b4988 100644 --- a/code/modules/xenoarcheaology/effects/robohurt.dm +++ b/code/modules/xenoarcheaology/effects/robohurt.dm @@ -2,6 +2,8 @@ name = "robotic harm" var/last_message + effect_color = "#5432cf" + /datum/artifact_effect/robohurt/New() ..() effect_type = pick(EFFECT_ELECTRO, EFFECT_PARTICLE) @@ -16,6 +18,7 @@ return 1 /datum/artifact_effect/robohurt/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) @@ -28,6 +31,7 @@ return 1 /datum/artifact_effect/robohurt/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/sleepy.dm b/code/modules/xenoarcheaology/effects/sleepy.dm index 6a0439460a..5a1b1ef62c 100644 --- a/code/modules/xenoarcheaology/effects/sleepy.dm +++ b/code/modules/xenoarcheaology/effects/sleepy.dm @@ -1,6 +1,7 @@ //todo /datum/artifact_effect/sleepy name = "sleepy" + effect_color = "#a36fa1" /datum/artifact_effect/sleepy/New() ..() @@ -20,6 +21,7 @@ return 1 /datum/artifact_effect/sleepy/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/human/H in range(src.effectrange,T)) @@ -34,6 +36,7 @@ return 1 /datum/artifact_effect/sleepy/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for(var/mob/living/carbon/human/H in range(src.effectrange, T)) diff --git a/code/modules/xenoarcheaology/effects/stun.dm b/code/modules/xenoarcheaology/effects/stun.dm index ab00465477..63c5f61cda 100644 --- a/code/modules/xenoarcheaology/effects/stun.dm +++ b/code/modules/xenoarcheaology/effects/stun.dm @@ -1,5 +1,6 @@ /datum/artifact_effect/stun name = "stun" + effect_color = "#00eeff" /datum/artifact_effect/stun/New() ..() @@ -16,6 +17,7 @@ C.Stun(rand(1,10) * susceptibility) /datum/artifact_effect/stun/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/C in range(src.effectrange,T)) @@ -30,6 +32,7 @@ to_chat(C, "You feel numb.") /datum/artifact_effect/stun/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/C in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/teleport.dm b/code/modules/xenoarcheaology/effects/teleport.dm index 36b90afd31..947b1f37c3 100644 --- a/code/modules/xenoarcheaology/effects/teleport.dm +++ b/code/modules/xenoarcheaology/effects/teleport.dm @@ -1,8 +1,11 @@ /datum/artifact_effect/teleport name = "teleport" effect_type = EFFECT_BLUESPACE + effect_state = "pulsing" + effect_color = "#88ffdb" /datum/artifact_effect/teleport/DoEffectTouch(var/mob/user) + var/atom/holder = master.holder var/weakness = GetAnomalySusceptibility(user) if(prob(100 * weakness)) to_chat(user, "You are suddenly zapped away elsewhere!") @@ -20,6 +23,7 @@ sparks.start() /datum/artifact_effect/teleport/DoEffectAura() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/M in range(src.effectrange,T)) @@ -39,6 +43,7 @@ sparks.start() /datum/artifact_effect/teleport/DoEffectPulse() + var/atom/holder = master.holder if(holder) var/turf/T = get_turf(holder) for (var/mob/living/M in range(src.effectrange, T)) diff --git a/code/modules/xenoarcheaology/effects/vampire.dm b/code/modules/xenoarcheaology/effects/vampire.dm index cf0ae9a246..245aaea919 100644 --- a/code/modules/xenoarcheaology/effects/vampire.dm +++ b/code/modules/xenoarcheaology/effects/vampire.dm @@ -9,7 +9,11 @@ var/charges = 0 var/list/nearby_mobs = list() + effect_state = "gravisphere" + effect_color = "#ff0000" + /datum/artifact_effect/vampire/proc/bloodcall(var/mob/living/carbon/human/M) + var/atom/holder = master.holder last_bloodcall = world.time if(istype(M)) playsound(holder, pick('sound/hallucinations/wail.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/far_noise.ogg'), 50, 1, -3) @@ -23,30 +27,36 @@ B.target_turf = pick(range(1, get_turf(holder))) B.blood_DNA = list() B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - M.vessel.remove_reagent("blood",rand(25,50)) + M.vessel.remove_reagent("blood",rand(10,30)) /datum/artifact_effect/vampire/DoEffectTouch(var/mob/user) bloodcall(user) DoEffectAura() /datum/artifact_effect/vampire/DoEffectAura() +<<<<<<< HEAD nearby_mobs.Cut() var/turf/T = get_turf(holder) +======= + var/atom/holder = master.holder + if(nearby_mobs.len) + nearby_mobs.Cut() + var/turf/T = get_turf(master.holder) +>>>>>>> 71e8b0399de... Universal Anomalies (#7914) for(var/mob/living/L in oview(effectrange, T)) if(!L.stat && L.mind) nearby_mobs |= L - if(world.time - last_bloodcall > bloodcall_interval && nearby_mobs.len) + if(world.time - bloodcall_interval >= last_bloodcall && LAZYLEN(nearby_mobs)) var/mob/living/carbon/human/M = pick(nearby_mobs) - if(M in view(effectrange,holder) && M.health > 20) - if(prob(50)) - bloodcall(M) - holder.Beam(M, icon_state = "drainbeam", time = 1 SECOND) + if(get_dist(M, T) <= effectrange && M.health > 20) + bloodcall(M) + holder.Beam(M, icon_state = "drainbeam", time = 1 SECOND) - if(world.time - last_eat > eat_interval) - var/obj/effect/decal/cleanable/blood/B = locate() in range(2,holder) + if(world.time - last_eat >= eat_interval) + var/obj/effect/decal/cleanable/blood/B = locate() in range(2,master.holder) if(B) last_eat = world.time B.loc = null diff --git a/code/modules/xenoarcheaology/finds/find_spawning.dm b/code/modules/xenoarcheaology/finds/find_spawning.dm index 2b6e125855..354c160a8a 100644 --- a/code/modules/xenoarcheaology/finds/find_spawning.dm +++ b/code/modules/xenoarcheaology/finds/find_spawning.dm @@ -15,18 +15,20 @@ var/additional_desc = "" var/obj/item/weapon/new_item var/source_material = "" - var/apply_material_decorations = 1 - var/apply_image_decorations = 0 + var/apply_material_decorations = TRUE + var/apply_image_decorations = FALSE var/material_descriptor = "" - var/apply_prefix = 1 + var/apply_prefix = TRUE + + var/become_anomalous = FALSE if(prob(40)) material_descriptor = pick("rusted ","dusty ","archaic ","fragile ", "damaged", "pristine") source_material = pick("cordite","quadrinium","steel","titanium","aluminium","ferritic-alloy","plasteel","duranium") - var/talkative = 0 + var/talkative = FALSE if(prob(5)) - talkative = 1 + talkative = TRUE //for all items here: //icon_state @@ -41,7 +43,7 @@ new_item = new /obj/item/weapon/reagent_containers/glass/beaker(src.loc) new_item.icon = 'icons/obj/xenoarchaeology.dmi' new_item.icon_state = "bowl" - apply_image_decorations = 1 + apply_image_decorations = TRUE if(prob(40)) new_item.color = rgb(rand(0,255),rand(0,255),rand(0,255)) if(prob(20)) @@ -55,7 +57,7 @@ new_item = new /obj/item/weapon/reagent_containers/glass/beaker(src.loc) new_item.icon = 'icons/obj/xenoarchaeology.dmi' new_item.icon_state = "urn[rand(1,2)]" - apply_image_decorations = 1 + apply_image_decorations = TRUE if(prob(20)) additional_desc = "It [pick("whispers faintly","makes a quiet roaring sound","whistles softly","thrums quietly","throbs")] if you put it to your ear." if(ARCHAEO_CUTLERY) @@ -88,7 +90,9 @@ item_type = "instrument" icon_state = "instrument" if(prob(30)) - apply_image_decorations = 1 + become_anomalous = TRUE + if(prob(30)) + apply_image_decorations = TRUE additional_desc = "[pick("You're not sure how anyone could have played this",\ "You wonder how many mouths the creator had",\ "You wonder what it sounds like",\ @@ -109,16 +113,16 @@ chance += 10 item_type = new_item.name - apply_prefix = 0 - apply_material_decorations = 0 - apply_image_decorations = 1 + apply_prefix = FALSE + apply_material_decorations = FALSE + apply_image_decorations = TRUE if(ARCHAEO_HANDCUFFS) item_type = "handcuffs" new_item = new /obj/item/weapon/handcuffs(src.loc) additional_desc = "[pick("They appear to be for securing two things together","Looks kinky","Doesn't seem like a children's toy")]." if(ARCHAEO_BEARTRAP) item_type = "[pick("wicked","evil","byzantine","dangerous")] looking [pick("device","contraption","thing","trap")]" - apply_prefix = 0 + apply_prefix = FALSE new_item = new /obj/item/weapon/beartrap(src.loc) if(prob(40)) new_item.color = rgb(rand(0,255),rand(0,255),rand(0,255)) @@ -130,7 +134,7 @@ new_item = new /obj/item/weapon/flame/lighter(src.loc) additional_desc = "There is a tiny device attached." if(prob(30)) - apply_image_decorations = 1 + apply_image_decorations = TRUE if(ARCHAEO_BOX) item_type = "box" new_item = new /obj/item/weapon/storage/box(src.loc) @@ -142,7 +146,7 @@ new_box.max_storage_space = rand(storage_amount, storage_amount * 10) if(prob(30)) LAZYSET(new_item.origin_tech, TECH_ARCANE, 1) - apply_image_decorations = 1 + apply_image_decorations = TRUE if(ARCHAEO_GASTANK) item_type = "[pick("cylinder","tank","chamber")]" if(prob(25)) @@ -163,12 +167,12 @@ new_item = new /obj/item/weapon/tool/screwdriver(src.loc) if(prob(40)) new_item.color = rgb(rand(0,255),rand(0,255),rand(0,255)) - apply_image_decorations = 1 + apply_image_decorations = TRUE additional_desc = "[pick("It doesn't look safe.",\ "You wonder what it was used for",\ "There appear to be [pick("dark red","dark purple","dark green","dark blue")] stains on it")]." if(ARCHAEO_METAL) - apply_material_decorations = 0 + apply_material_decorations = FALSE var/list/possible_spawns = list() possible_spawns += /obj/item/stack/material/steel possible_spawns += /obj/item/stack/material/plasteel @@ -193,9 +197,11 @@ icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "pen1" LAZYSET(new_item.origin_tech, TECH_ARCANE, 1) - apply_image_decorations = 1 + apply_image_decorations = TRUE if(ARCHAEO_CRYSTAL) - apply_prefix = 0 + if(prob(40)) + become_anomalous = TRUE + apply_prefix = FALSE if(prob(25)) icon = 'icons/obj/xenoarchaeology.dmi' item_type = "smooth green crystal" @@ -210,9 +216,9 @@ icon_state = "changerock" additional_desc = pick("It shines faintly as it catches the light.","It appears to have a faint inner glow.","It seems to draw you inward as you look it at.","Something twinkles faintly as you look at it.","It's mesmerizing to behold.") - apply_material_decorations = 0 + apply_material_decorations = FALSE if(prob(10)) - apply_image_decorations = 1 + apply_image_decorations = TRUE if(prob(25)) new_item = new /obj/item/device/soulstone(src.loc) new_item.icon = 'icons/obj/xenoarchaeology.dmi' @@ -220,18 +226,18 @@ LAZYSET(new_item.origin_tech, TECH_ARCANE, 2) if(ARCHAEO_CULTBLADE) //cultblade - apply_prefix = 0 + apply_prefix = FALSE new_item = new /obj/item/weapon/melee/cultblade(src.loc) - apply_material_decorations = 0 - apply_image_decorations = 0 + apply_material_decorations = FALSE + apply_image_decorations = FALSE if(ARCHAEO_TELEBEACON) new_item = new /obj/item/device/radio/beacon(src.loc) - talkative = 0 + talkative = FALSE new_item.icon = 'icons/obj/xenoarchaeology.dmi' new_item.icon_state = "unknown[rand(1,4)]" new_item.desc = "" if(ARCHAEO_CLAYMORE) - apply_prefix = 0 + apply_prefix = FALSE new_item = new /obj/item/weapon/material/sword(src.loc) new_item.force = 10 new_item.name = pick("great-sword","claymore","longsword","broadsword","shortsword","gladius") @@ -241,7 +247,7 @@ new_item.icon_state = "blade1" if(ARCHAEO_CULTROBES) //arcane clothing - apply_prefix = 0 + apply_prefix = FALSE var/list/possible_spawns = list(/obj/item/clothing/head/culthood, /obj/item/clothing/head/culthood/magus, /obj/item/clothing/head/culthood/alt, @@ -252,25 +258,28 @@ LAZYSET(new_item.origin_tech, TECH_ARCANE, 1) if(ARCHAEO_SOULSTONE) //soulstone - apply_prefix = 0 + become_anomalous = TRUE + apply_prefix = FALSE new_item = new /obj/item/device/soulstone(src.loc) item_type = new_item.name - apply_material_decorations = 0 + apply_material_decorations = FALSE LAZYSET(new_item.origin_tech, TECH_ARCANE, 2) if(ARCHAEO_SHARD) if(prob(50)) new_item = new /obj/item/weapon/material/shard(src.loc) else new_item = new /obj/item/weapon/material/shard/phoron(src.loc) - apply_prefix = 0 - apply_image_decorations = 0 - apply_material_decorations = 0 + apply_prefix = FALSE + apply_image_decorations = FALSE + apply_material_decorations = FALSE if(ARCHAEO_RODS) - apply_prefix = 0 + apply_prefix = FALSE new_item = new /obj/item/stack/rods(src.loc) - apply_image_decorations = 0 - apply_material_decorations = 0 + apply_image_decorations = FALSE + apply_material_decorations = FALSE if(ARCHAEO_STOCKPARTS) + if(prob(30)) + become_anomalous = TRUE var/list/possible_spawns = typesof(/obj/item/weapon/stock_parts) possible_spawns -= /obj/item/weapon/stock_parts possible_spawns -= /obj/item/weapon/stock_parts/subspace @@ -278,9 +287,9 @@ var/new_type = pick(possible_spawns) new_item = new new_type(src.loc) item_type = new_item.name - apply_material_decorations = 0 + apply_material_decorations = FALSE if(ARCHAEO_KATANA) - apply_prefix = 0 + apply_prefix = FALSE new_item = new /obj/item/weapon/material/sword/katana(src.loc) new_item.force = 10 new_item.name = "katana" @@ -349,9 +358,11 @@ item_type = "gun" if(ARCHAEO_UNKNOWN) + if(prob(20)) + become_anomalous = TRUE //completely unknown alien device if(prob(50)) - apply_image_decorations = 0 + apply_image_decorations = FALSE if(ARCHAEO_FOSSIL) //fossil bone/skull //new_item = new /obj/item/weapon/fossil/base(src.loc) @@ -362,30 +373,30 @@ var/spawn_type = pickweight(candidates) new_item = new spawn_type(src.loc) - apply_prefix = 0 + apply_prefix = FALSE additional_desc = "A fossilised part of an alien, long dead." - apply_image_decorations = 0 - apply_material_decorations = 0 + apply_image_decorations = FALSE + apply_material_decorations = FALSE if(ARCHAEO_SHELL) //fossil shell new_item = new /obj/item/weapon/fossil/shell(src.loc) - apply_prefix = 0 + apply_prefix = FALSE additional_desc = "A fossilised, pre-Stygian alien crustacean." - apply_image_decorations = 0 - apply_material_decorations = 0 + apply_image_decorations = FALSE + apply_material_decorations = FALSE if(prob(10)) - apply_image_decorations = 1 + apply_image_decorations = TRUE if(ARCHAEO_PLANT) //fossil plant new_item = new /obj/item/weapon/fossil/plant(src.loc) item_type = new_item.name additional_desc = "A fossilised shred of alien plant matter." - apply_image_decorations = 0 - apply_material_decorations = 0 - apply_prefix = 0 + apply_image_decorations = FALSE + apply_material_decorations = FALSE + apply_prefix = FALSE if(ARCHAEO_REMAINS_HUMANOID) //humanoid remains - apply_prefix = 0 + apply_prefix = FALSE item_type = "humanoid [pick("remains","skeleton")]" icon = 'icons/effects/blood.dmi' icon_state = "remains" @@ -396,11 +407,11 @@ "The bones are scored by numerous burns and partially melted.",\ "The are battered and broken, in some cases less than splinters are left.",\ "The mouth is wide open in a death rictus, the victim would appear to have died screaming.") - apply_image_decorations = 0 - apply_material_decorations = 0 + apply_image_decorations = FALSE + apply_material_decorations = FALSE if(ARCHAEO_REMAINS_ROBOT) //robot remains - apply_prefix = 0 + apply_prefix = FALSE item_type = "[pick("mechanical","robotic","cyborg")] [pick("remains","chassis","debris")]" icon = 'icons/mob/robots.dmi' icon_state = "remainsrobot" @@ -411,11 +422,11 @@ "The chassis is scored by numerous burns and partially melted.",\ "The chassis is battered and broken, in some cases only chunks of metal are left.",\ "A pile of wires and crap metal that looks vaguely robotic.") - apply_image_decorations = 0 - apply_material_decorations = 0 + apply_image_decorations = FALSE + apply_material_decorations = FALSE if(ARCHAEO_REMAINS_XENO) //xenos remains - apply_prefix = 0 + apply_prefix = FALSE item_type = "alien [pick("remains","skeleton")]" icon = 'icons/effects/blood.dmi' icon_state = "remainsxeno" @@ -427,8 +438,8 @@ "The are battered and broken, in some cases less than splinters are left.",\ "This creature would have been twisted and monstrous when it was alive.",\ "It doesn't look human.") - apply_image_decorations = 0 - apply_material_decorations = 0 + apply_image_decorations = FALSE + apply_material_decorations = FALSE if(ARCHAEO_GASMASK) //gas mask if(prob(25)) @@ -551,7 +562,7 @@ var/obj/item/weapon/reagent_containers/syringe/S = new_item S.volume = 30 - //If S hasn't initialized yet, S.reagents will be null. + //If S hasn't initialized yet, S.reagents will be null. //However, in that case Initialize will set the maximum volume to the volume for us, so we don't need to do anything. S.reagents?.maximum_volume = 30 @@ -680,6 +691,9 @@ new_item.origin_tech[TECH_ARCANE] += 1 new_item.origin_tech[TECH_PRECURSOR] += 1 + if(become_anomalous) + new_item.become_anomalous() + var/turf/simulated/mineral/T = get_turf(new_item) if(istype(T)) T.last_find = new_item @@ -691,3 +705,6 @@ LAZYINITLIST(origin_tech) origin_tech[TECH_ARCANE] += 1 origin_tech[TECH_PRECURSOR] += 1 + + if(become_anomalous) + become_anomalous() diff --git a/code/modules/xenoarcheaology/tools/artifact_analyser.dm b/code/modules/xenoarcheaology/tools/artifact_analyser.dm index 44afa6ea2c..32259e774a 100644 --- a/code/modules/xenoarcheaology/tools/artifact_analyser.dm +++ b/code/modules/xenoarcheaology/tools/artifact_analyser.dm @@ -138,13 +138,37 @@ var/obj/machinery/artifact/A = scanned_obj var/out = "Anomalous alien device - composed of an unknown alloy.

" - if(A.my_effect) - out += A.my_effect.getDescription() + var/datum/component/artifact_master/AMast = A.artifact_master + var/datum/artifact_effect/AEff = AMast.get_primary() - if(A.secondary_effect && A.secondary_effect.activated) + out += AEff.getDescription() + + if(AMast.my_effects.len > 1) out += "

Internal scans indicate ongoing secondary activity operating independently from primary systems.

" - out += A.secondary_effect.getDescription() + for(var/datum/artifact_effect/my_effect in A.artifact_master.my_effects - AEff) + + if(my_effect) + out += my_effect.getDescription() return out else + + var/datum/component/artifact_master/ScannedMaster = scanned_obj.GetComponent(/datum/component/artifact_master) + + if(istype(ScannedMaster)) + var/out = "Anomalous reality warp - Object has been altered to disobey known laws of physics.

" + + var/datum/artifact_effect/AEff = ScannedMaster.get_primary() + + out += AEff.getDescription() + + if(ScannedMaster.my_effects.len > 1) + out += "

Resonant scans indicate asynchronous reality modulation:

" + for(var/datum/artifact_effect/my_effect in ScannedMaster.my_effects - AEff) + + if(my_effect) + out += my_effect.getDescription() + + return out + return "[scanned_obj.name] - mundane application." diff --git a/code/modules/xenoarcheaology/tools/artifact_harvester.dm b/code/modules/xenoarcheaology/tools/artifact_harvester.dm index 05aa87442d..7f91368b1b 100644 --- a/code/modules/xenoarcheaology/tools/artifact_harvester.dm +++ b/code/modules/xenoarcheaology/tools/artifact_harvester.dm @@ -258,3 +258,137 @@ inserted_battery.battery_effect.ToggleActivate() src.visible_message("[name] states, \"Battery dump completed.\"") icon_state = "incubator" +<<<<<<< HEAD +======= + +/obj/machinery/artifact_harvester/Topic(href, href_list) + + if (href_list["harvest"]) + if(!inserted_battery) + src.visible_message("[src] states, \"Cannot harvest. No battery inserted.\"") + + else if(inserted_battery.stored_charge >= inserted_battery.capacity) + src.visible_message("[src] states, \"Cannot harvest. battery is full.\"") + + else + + //locate artifact on analysis pad + cur_artifact = null + var/articount = 0 + var/obj/machinery/artifact/analysed + for(var/obj/machinery/artifact/A in get_turf(owned_scanner)) + analysed = A + articount++ + + if(articount <= 0) + var/message = "[src] states, \"Cannot harvest. No noteworthy energy signature isolated.\"" + src.visible_message(message) + + else if(analysed && analysed.being_used) + src.visible_message("[src] states, \"Cannot harvest. Source already being harvested.\"") + + else + if(articount > 1) + state("Cannot harvest. Too many artifacts on the pad.") + else if(analysed) + cur_artifact = analysed + + //if both effects are active, we can't harvest either + var/list/active_effects = cur_artifact.artifact_master.get_active_effects() + + if(active_effects.len > 1) + src.visible_message("[src] states, \"Cannot harvest. Source is emitting conflicting energy signatures.\"") + else if(!active_effects.len) + src.visible_message("[src] states, \"Cannot harvest. No energy emitting from source.\"") + + else + //see if we can clear out an old effect + //delete it when the ids match to account for duplicate ids having different effects + if(inserted_battery.battery_effect && inserted_battery.stored_charge <= 0) + qdel(inserted_battery.battery_effect) + inserted_battery.battery_effect = null + + // + var/datum/artifact_effect/source_effect + var/datum/artifact_effect/active_effect = active_effects[1] + + //if we already have charge in the battery, we can only recharge it from the source artifact + if(inserted_battery.stored_charge > 0) + var/battery_matches_primary_id = 0 + if(inserted_battery.battery_effect && inserted_battery.battery_effect.artifact_id == cur_artifact.artifact_master.artifact_id) + battery_matches_primary_id = 1 + if(battery_matches_primary_id && active_effect.activated) + //we're good to recharge the primary effect! + source_effect = active_effect + + if(!source_effect) + src.visible_message("[src] states, \"Cannot harvest. Battery is charged with a different energy signature.\"") + else + //we're good to charge either + if(active_effect.activated) + //charge the primary effect + source_effect = active_effect + + if(source_effect) + harvesting = 1 + update_use_power(USE_POWER_ACTIVE) + cur_artifact.anchored = 1 + cur_artifact.being_used = 1 + icon_state = "incubator_on" + var/message = "[src] states, \"Beginning energy harvesting.\"" + src.visible_message(message) + last_process = world.time + + //duplicate the artifact's effect datum + if(!inserted_battery.battery_effect) + var/effecttype = source_effect.type + var/datum/artifact_effect/E = new effecttype(inserted_battery) + + //duplicate it's unique settings + for(var/varname in list("chargelevelmax","artifact_id","effect","effectrange","trigger")) + E.vars[varname] = source_effect.vars[varname] + + //copy the new datum into the battery + inserted_battery.battery_effect = E + inserted_battery.stored_charge = 0 + + if (href_list["stopharvest"]) + if(harvesting) + if(harvesting < 0 && inserted_battery.battery_effect && inserted_battery.battery_effect.activated) + inserted_battery.battery_effect.ToggleActivate() + harvesting = 0 + cur_artifact.anchored = 0 + cur_artifact.being_used = 0 + cur_artifact = null + src.visible_message("[name] states, \"Energy harvesting interrupted.\"") + icon_state = "incubator" + + if (href_list["ejectbattery"]) + src.inserted_battery.loc = src.loc + src.inserted_battery = null + + if (href_list["drainbattery"]) + if(inserted_battery) + if(inserted_battery.battery_effect && inserted_battery.stored_charge > 0) + if(alert("This action will dump all charge, safety gear is recommended before proceeding","Warning","Continue","Cancel")) + if(!inserted_battery.battery_effect.activated) + inserted_battery.battery_effect.ToggleActivate(1) + last_process = world.time + harvesting = -1 + update_use_power(USE_POWER_ACTIVE) + icon_state = "incubator_on" + var/message = "[src] states, \"Warning, battery charge dump commencing.\"" + src.visible_message(message) + else + var/message = "[src] states, \"Cannot dump energy. Battery is drained of charge already.\"" + src.visible_message(message) + else + var/message = "[src] states, \"Cannot dump energy. No battery inserted.\"" + src.visible_message(message) + + if(href_list["close"]) + usr << browse(null, "window=artharvester") + usr.unset_machine(src) + + updateDialog() +>>>>>>> 71e8b0399de... Universal Anomalies (#7914) diff --git a/vorestation.dme b/vorestation.dme index 077fdf2271..c52d102a53 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3954,6 +3954,7 @@ #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" From fea27b4bc82e9b77eb9c9cb964c6ad8ea190052f Mon Sep 17 00:00:00 2001 From: Mechoid Date: Sun, 17 Oct 2021 14:15:00 -0700 Subject: [PATCH 03/26] Fix 2 Anomaly Bugsons --- code/modules/xenoarcheaology/effect_master.dm | 421 ++++++++++++++++++ .../xenoarcheaology/effects/vampire.dm | 4 +- 2 files changed, 423 insertions(+), 2 deletions(-) create mode 100644 code/modules/xenoarcheaology/effect_master.dm diff --git a/code/modules/xenoarcheaology/effect_master.dm b/code/modules/xenoarcheaology/effect_master.dm new file mode 100644 index 0000000000..f654724b32 --- /dev/null +++ b/code/modules/xenoarcheaology/effect_master.dm @@ -0,0 +1,421 @@ + +/* + * Here there be the base component for artifacts. + */ + +/atom/proc/is_anomalous() + return (GetComponent(/datum/component/artifact_master)) + +/atom/proc/become_anomalous() + if(!is_anomalous()) + AddComponent(/datum/component/artifact_master) + if(istype(src, /obj/item)) + var/obj/item/I = src + LAZYINITLIST(I.origin_tech) + if(prob(50)) + I.origin_tech[TECH_PRECURSOR] += 1 + else + I.origin_tech[TECH_ARCANE] += 1 + var/rand_tech = pick(\ + TECH_MATERIAL,\ + TECH_ENGINEERING,\ + TECH_PHORON,\ + TECH_POWER,\ + TECH_BLUESPACE,\ + TECH_BIO,\ + TECH_COMBAT,\ + TECH_MAGNET,\ + TECH_DATA,\ + TECH_ILLEGAL\ + ) + LAZYSET(I.origin_tech, rand_tech, rand(4,7)) + +/datum/component/artifact_master + var/atom/holder + var/list/my_effects + + dupe_type = /datum/component/artifact_master + + var/effect_generation_chance = 100 + + var/list/make_effects + + var/artifact_id + +/datum/component/artifact_master/New() + . = ..() + holder = parent + + if(!holder) + qdel(src) + return + + my_effects = list() + + START_PROCESSING(SSobj, src) + + do_setup() + return + +/* + * Component System Registry. + * Here be dragons. + */ + +/datum/component/artifact_master/proc/DoRegistry() +//Melee Hit + RegisterSignal(holder, COMSIG_PARENT_ATTACKBY, /datum/component/artifact_master/proc/on_attackby, override = FALSE) +//Explosions + RegisterSignal(holder, COMSIG_ATOM_EX_ACT, /datum/component/artifact_master/proc/on_exact, override = FALSE) +//Bullets + RegisterSignal(holder, COMSIG_ATOM_BULLET_ACT, /datum/component/artifact_master/proc/on_bullet, override = FALSE) + +//Attackhand + RegisterSignal(holder, COMSIG_ATOM_ATTACK_HAND, /datum/component/artifact_master/proc/on_attack_hand, override = FALSE) + +//Bumped / Bumping + RegisterSignal(holder, COMSIG_MOVABLE_BUMP, /datum/component/artifact_master/proc/on_bump, override = FALSE) + RegisterSignal(holder, COMSIG_ATOM_BUMPED, /datum/component/artifact_master/proc/on_bumped, override = FALSE) + +//Moved + RegisterSignal(holder, COMSIG_MOVABLE_MOVED, /datum/component/artifact_master/proc/on_moved, override = FALSE) + +//Splashed with a reagent. + RegisterSignal(holder, COMSIG_REAGENTS_TOUCH, /datum/component/artifact_master/proc/on_reagent, override = FALSE) + +/* + * + */ + +/datum/component/artifact_master/proc/get_active_effects() + var/list/active_effects = list() + for(var/datum/artifact_effect/my_effect in my_effects) + if(my_effect.activated) + active_effects |= my_effect + + return active_effects + +/datum/component/artifact_master/proc/add_effect() + var/effect_type = input(usr, "What type do you want?", "Effect Type") as null|anything in subtypesof(/datum/artifact_effect) + if(effect_type) + var/datum/artifact_effect/my_effect = new effect_type(src) + if(istype(holder, my_effect.req_type)) + my_effects += my_effect + + else + to_chat(usr, "This effect can not be applied to this atom type.") + qdel(my_effect) + +/datum/component/artifact_master/proc/remove_effect() + var/to_remove_effect = input(usr, "What effect do you want to remove?", "Remove Effect") as null|anything in my_effects + + if(to_remove_effect) + var/datum/artifact_effect/AE = to_remove_effect + my_effects.Remove(to_remove_effect) + qdel(AE) + +/datum/component/artifact_master/Destroy() + holder = null + for(var/datum/artifact_effect/AE in my_effects) + AE.master = null + qdel(AE) + + STOP_PROCESSING(SSobj,src) + + . = ..() + +/datum/component/artifact_master/proc/do_setup() + if(LAZYLEN(make_effects)) + for(var/path in make_effects) + var/datum/artifact_effect/new_effect = new path(src) + if(istype(holder, new_effect.req_type)) + my_effects += new_effect + + else + generate_effects() + + DoRegistry() + +/datum/component/artifact_master/proc/generate_effects() + while(effect_generation_chance > 0) + var/chosen_path = pick(subtypesof(/datum/artifact_effect)) + if(effect_generation_chance >= 100) // If we're above 100 percent, just cut a flat amount and add an effect. + var/datum/artifact_effect/AE = new chosen_path(src) + if(istype(holder, AE.req_type)) + my_effects += AE + effect_generation_chance -= 30 + else + AE.master = src + qdel(AE) + continue + + effect_generation_chance /= 2 + + if(prob(effect_generation_chance)) // Otherwise, add effects as normal, with decreasing probability. + my_effects += new chosen_path(src) + + effect_generation_chance = round(effect_generation_chance) + +/datum/component/artifact_master/proc/get_holder() // Returns the holder. + return holder + +/datum/component/artifact_master/proc/get_primary() + if(LAZYLEN(my_effects)) + return my_effects[1] + return FALSE + +/* + * Trigger code. + */ + +/datum/component/artifact_master/proc/on_exact() + var/severity = args[2] + var/triggered = FALSE + for(var/datum/artifact_effect/my_effect in my_effects) + switch(severity) + if(1.0) + if(my_effect.trigger == TRIGGER_FORCE || my_effect.trigger == TRIGGER_HEAT || my_effect.trigger == TRIGGER_ENERGY) + my_effect.ToggleActivate() + triggered = TRUE + if(2.0) + if(my_effect.trigger == TRIGGER_FORCE || my_effect.trigger == TRIGGER_HEAT) + my_effect.ToggleActivate() + triggered = TRUE + if(3.0) + if (my_effect.trigger == TRIGGER_FORCE) + my_effect.ToggleActivate() + triggered = TRUE + + if(triggered) + return COMPONENT_IGNORE_EXPLOSION + + return + +/datum/component/artifact_master/proc/on_bullet() + var/obj/item/projectile/P = args[2] + var/triggered = TRUE + for(var/datum/artifact_effect/my_effect in my_effects) + if(istype(P,/obj/item/projectile/bullet)) + if(my_effect.trigger == TRIGGER_FORCE) + my_effect.ToggleActivate() + triggered = TRUE + + else if(istype(P,/obj/item/projectile/beam) ||\ + istype(P,/obj/item/projectile/ion) ||\ + istype(P,/obj/item/projectile/energy)) + if(my_effect.trigger == TRIGGER_ENERGY) + my_effect.ToggleActivate() + triggered = TRUE + + if(triggered) + return COMPONENT_CANCEL_ATTACK_CHAIN + + return + +/datum/component/artifact_master/proc/on_bump() + var/atom/bumped = args[2] + var/warn = FALSE + for(var/datum/artifact_effect/my_effect in my_effects) + if(istype(bumped,/obj)) + if(bumped:throwforce >= 10) + if(my_effect.trigger == TRIGGER_FORCE) + my_effect.ToggleActivate() + + else if(ishuman(bumped) && GetAnomalySusceptibility(bumped) >= 0.5) + if (my_effect.trigger == TRIGGER_TOUCH && prob(50)) + my_effect.ToggleActivate() + warn = 1 + + if (my_effect.effect == EFFECT_TOUCH && prob(50)) + my_effect.DoEffectTouch(bumped) + warn = 1 + + if(warn && isliving(bumped)) + to_chat(bumped, "You accidentally touch \the [holder] as it hits you.") + +/datum/component/artifact_master/proc/on_bumped() + var/atom/movable/M = args[2] + var/warn = FALSE + for(var/datum/artifact_effect/my_effect in my_effects) + if(istype(M,/obj)) + if(M:throwforce >= 10) + if(my_effect.trigger == TRIGGER_FORCE) + my_effect.ToggleActivate() + + else if(ishuman(M) && !istype(M:gloves,/obj/item/clothing/gloves)) + if (my_effect.trigger == TRIGGER_TOUCH && prob(50)) + my_effect.ToggleActivate() + warn = 1 + + if (my_effect.effect == EFFECT_TOUCH && prob(50)) + my_effect.DoEffectTouch(M) + warn = 1 + + if(warn && isliving(M)) + to_chat(M, "You accidentally touch \the [holder].") + +/datum/component/artifact_master/proc/on_attack_hand() + var/mob/living/user = args[2] + if(!istype(user)) + return + + if (get_dist(user, holder) > 1) + to_chat(user, "You can't reach [holder] from here.") + return + if(ishuman(user) && user:gloves) + to_chat(user, "You touch [holder] with your gloved hands, [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].") + return + + var/triggered = FALSE + + for(var/datum/artifact_effect/my_effect in my_effects) + + if(my_effect.trigger == TRIGGER_TOUCH) + triggered = TRUE + my_effect.ToggleActivate() + + if (my_effect.effect == EFFECT_TOUCH) + triggered = TRUE + my_effect.DoEffectTouch(user) + + if(triggered) + to_chat(user, "You touch [holder].") + + else + to_chat(user, "You touch [holder], [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].") + + +/datum/component/artifact_master/proc/on_attackby() + var/obj/item/weapon/W = args[2] + for(var/datum/artifact_effect/my_effect in my_effects) + + if (istype(W, /obj/item/weapon/reagent_containers)) + if(W.reagents.has_reagent("hydrogen", 1) || W.reagents.has_reagent("water", 1)) + if(my_effect.trigger == TRIGGER_WATER) + my_effect.ToggleActivate() + else if(W.reagents.has_reagent("sacid", 1) || W.reagents.has_reagent("pacid", 1) || W.reagents.has_reagent("diethylamine", 1)) + if(my_effect.trigger == TRIGGER_ACID) + my_effect.ToggleActivate() + else if(W.reagents.has_reagent("phoron", 1) || W.reagents.has_reagent("thermite", 1)) + if(my_effect.trigger == TRIGGER_VOLATILE) + my_effect.ToggleActivate() + else if(W.reagents.has_reagent("toxin", 1) || W.reagents.has_reagent("cyanide", 1) || W.reagents.has_reagent("amatoxin", 1) || W.reagents.has_reagent("neurotoxin", 1)) + if(my_effect.trigger == TRIGGER_TOXIN) + my_effect.ToggleActivate() + else if(istype(W,/obj/item/weapon/melee/baton) && W:status ||\ + istype(W,/obj/item/weapon/melee/energy) ||\ + istype(W,/obj/item/weapon/melee/cultblade) ||\ + istype(W,/obj/item/weapon/card/emag) ||\ + istype(W,/obj/item/device/multitool)) + if (my_effect.trigger == TRIGGER_ENERGY) + my_effect.ToggleActivate() + + else if (istype(W,/obj/item/weapon/flame) && W:lit ||\ + istype(W,/obj/item/weapon/weldingtool) && W:welding) + if(my_effect.trigger == TRIGGER_HEAT) + my_effect.ToggleActivate() + else + if (my_effect.trigger == TRIGGER_FORCE && W.force >= 10) + my_effect.ToggleActivate() + +/datum/component/artifact_master/proc/on_reagent() + var/datum/reagent/Touching = args[2] + + var/list/water = list("hydrogen", "water") + var/list/acid = list("sacid", "pacid", "diethylamine") + var/list/volatile = list("phoron","thermite") + var/list/toxic = list("toxin","cyanide","amatoxin","neurotoxin") + + for(var/datum/artifact_effect/my_effect in my_effects) + if(Touching.id in water) + if(my_effect.trigger == TRIGGER_WATER) + my_effect.ToggleActivate() + else if(Touching.id in acid) + if(my_effect.trigger == TRIGGER_ACID) + my_effect.ToggleActivate() + else if(Touching.id in volatile) + if(my_effect.trigger == TRIGGER_VOLATILE) + my_effect.ToggleActivate() + else if(Touching.id in toxic) + if(my_effect.trigger == TRIGGER_TOXIN) + my_effect.ToggleActivate() + +/datum/component/artifact_master/proc/on_moved() + for(var/datum/artifact_effect/my_effect in my_effects) + if(my_effect) + my_effect.UpdateMove() + +/datum/component/artifact_master/process() + if(!holder) // Some instances can be created and rapidly lose their holder, if they are destroyed rapidly on creation. IE, during excavation. + STOP_PROCESSING(SSobj, src) + if(!QDELETED(src)) + qdel(src) + return + + var/turf/L = holder.loc + if(!istype(L) && !isliving(L)) // We're inside a non-mob container or on null turf, either way stop processing effects + return + + if(istype(holder, /atom/movable)) + var/atom/movable/HA = holder + if(HA.pulledby) + on_bumped(holder, HA.pulledby) + + for(var/datum/artifact_effect/my_effect in my_effects) + if(my_effect) + my_effect.UpdateMove() + + //if any of our effects rely on environmental factors, work that out + var/trigger_cold = 0 + var/trigger_hot = 0 + var/trigger_phoron = 0 + var/trigger_oxy = 0 + var/trigger_co2 = 0 + var/trigger_nitro = 0 + + var/turf/T = get_turf(holder) + var/datum/gas_mixture/env = T.return_air() + if(env) + if(env.temperature < 225) + trigger_cold = 1 + else if(env.temperature > 375) + trigger_hot = 1 + + if(env.gas["phoron"] >= 10) + trigger_phoron = 1 + if(env.gas["oxygen"] >= 10) + trigger_oxy = 1 + if(env.gas["carbon_dioxide"] >= 10) + trigger_co2 = 1 + if(env.gas["nitrogen"] >= 10) + trigger_nitro = 1 + + for(var/datum/artifact_effect/my_effect in my_effects) + my_effect.artifact_id = artifact_id + + my_effect.process() + + //COLD ACTIVATION + if(my_effect.trigger == TRIGGER_COLD && (trigger_cold ^ my_effect.activated)) + my_effect.ToggleActivate() + + //HEAT ACTIVATION + if(my_effect.trigger == TRIGGER_HEAT && (trigger_hot ^ my_effect.activated)) + my_effect.ToggleActivate() + + //PHORON GAS ACTIVATION + if(my_effect.trigger == TRIGGER_PHORON && (trigger_phoron ^ my_effect.activated)) + my_effect.ToggleActivate() + + //OXYGEN GAS ACTIVATION + if(my_effect.trigger == TRIGGER_OXY && (trigger_oxy ^ my_effect.activated)) + my_effect.ToggleActivate() + + //CO2 GAS ACTIVATION + if(my_effect.trigger == TRIGGER_CO2 && (trigger_co2 ^ my_effect.activated)) + my_effect.ToggleActivate() + + //NITROGEN GAS ACTIVATION + if(my_effect.trigger == TRIGGER_NITRO && (trigger_nitro ^ my_effect.activated)) + my_effect.ToggleActivate() + diff --git a/code/modules/xenoarcheaology/effects/vampire.dm b/code/modules/xenoarcheaology/effects/vampire.dm index cf0ae9a246..e5f55c1ad9 100644 --- a/code/modules/xenoarcheaology/effects/vampire.dm +++ b/code/modules/xenoarcheaology/effects/vampire.dm @@ -61,13 +61,13 @@ if(charges >= 10) charges -= 10 var/manifestation = pick(/obj/item/device/soulstone, /mob/living/simple_mob/faithless/cult/strong, /mob/living/simple_mob/creature/cult/strong, /mob/living/simple_mob/animal/space/bats/cult/strong) - new manifestation(get_turf(pick(view(1,T)))) + new manifestation(pick(RANGE_TURFS(1,T))) if(charges >= 3) if(prob(5)) charges -= 1 var/spawn_type = pick(/mob/living/simple_mob/animal/space/bats, /mob/living/simple_mob/creature, /mob/living/simple_mob/faithless) - new spawn_type(get_turf(pick(view(1,T)))) + new spawn_type(pick(RANGE_TURFS(1,T))) playsound(holder, pick('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg'), 50, 1, -3) if(charges >= 1 && nearby_mobs.len && prob(15 * nearby_mobs.len)) From 5e076b567d84b38680cc1b15ce0fee1c1d782736 Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Mon, 18 Oct 2021 11:47:21 +1100 Subject: [PATCH 04/26] Anomaly Battery Fix --- code/modules/xenoarcheaology/effect.dm | 52 +++++++++++++++++++ .../effects/animate_anomaly.dm | 26 ++++++++++ .../xenoarcheaology/effects/badfeeling.dm | 8 +++ .../xenoarcheaology/effects/berserk.dm | 8 +++ .../xenoarcheaology/effects/cannibal.dm | 8 +++ .../xenoarcheaology/effects/cellcharge.dm | 8 +++ .../xenoarcheaology/effects/celldrain.dm | 8 +++ code/modules/xenoarcheaology/effects/cold.dm | 8 +++ .../xenoarcheaology/effects/dnaswitch.dm | 8 +++ .../xenoarcheaology/effects/electric_field.dm | 12 +++++ code/modules/xenoarcheaology/effects/emp.dm | 4 ++ .../xenoarcheaology/effects/feysight.dm | 8 +++ .../xenoarcheaology/effects/forcefield.dm | 8 +++ code/modules/xenoarcheaology/effects/gaia.dm | 16 ++++++ .../modules/xenoarcheaology/effects/gasco2.dm | 8 +++ .../xenoarcheaology/effects/gasnitro.dm | 8 +++ .../modules/xenoarcheaology/effects/gasoxy.dm | 8 +++ .../xenoarcheaology/effects/gasphoron.dm | 8 +++ .../xenoarcheaology/effects/gassleeping.dm | 8 +++ .../xenoarcheaology/effects/goodfeeling.dm | 8 +++ .../effects/gravitational_waves.dm | 8 +++ code/modules/xenoarcheaology/effects/heal.dm | 8 +++ code/modules/xenoarcheaology/effects/heat.dm | 8 +++ code/modules/xenoarcheaology/effects/hurt.dm | 8 +++ .../xenoarcheaology/effects/poltergeist.dm | 8 +++ .../xenoarcheaology/effects/radiate.dm | 8 +++ .../xenoarcheaology/effects/resurrect.dm | 24 +++++++++ .../xenoarcheaology/effects/roboheal.dm | 8 +++ .../xenoarcheaology/effects/robohurt.dm | 8 +++ .../modules/xenoarcheaology/effects/sleepy.dm | 8 +++ code/modules/xenoarcheaology/effects/stun.dm | 8 +++ .../xenoarcheaology/effects/teleport.dm | 12 +++++ .../xenoarcheaology/effects/vampire.dm | 14 +++++ 33 files changed, 360 insertions(+) diff --git a/code/modules/xenoarcheaology/effect.dm b/code/modules/xenoarcheaology/effect.dm index 8b9dd625c1..7f56119dbc 100644 --- a/code/modules/xenoarcheaology/effect.dm +++ b/code/modules/xenoarcheaology/effect.dm @@ -10,7 +10,33 @@ var/artifact_id = "" var/effect_type = 0 +<<<<<<< HEAD /datum/artifact_effect/New(var/atom/location) +======= + var/req_type = /atom/movable + + var/image/active_effect + var/effect_icon = 'icons/effects/effects.dmi' + var/effect_state = "sparkles" + var/effect_color = "#ffffff" + +// The last time the effect was toggled. + var/last_activation = 0 + +/datum/artifact_effect/Destroy() + if(master) + master = null + + ..() + +/datum/artifact_effect/proc/get_master_holder() // Return the effectmaster's holder, if it is set to an effectmaster. Otherwise, master is the target object. + if(istype(master)) + return master.holder + else + return master + +/datum/artifact_effect/New(var/datum/component/artifact_master/newmaster) +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery ..() holder = location effect = rand(0, MAX_EFFECT) @@ -36,21 +62,47 @@ /datum/artifact_effect/proc/ToggleActivate(var/reveal_toggle = 1) //so that other stuff happens first +<<<<<<< HEAD spawn(0) +======= + set waitfor = FALSE + + var/atom/target = get_master_holder() + + if(world.time - last_activation > 1 SECOND) + last_activation = world.time +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(activated) activated = 0 else activated = 1 +<<<<<<< HEAD if(reveal_toggle && holder) if(istype(holder, /obj/machinery/artifact)) var/obj/machinery/artifact/A = holder A.icon_state = "ano[A.icon_num][activated]" +======= + if(reveal_toggle && target) + if(!isliving(target)) + target.update_icon() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery var/display_msg if(activated) display_msg = pick("momentarily glows brightly!","distorts slightly for a moment!","flickers slightly!","vibrates!","shimmers slightly for a moment!") else display_msg = pick("grows dull!","fades in intensity!","suddenly becomes very still!","suddenly becomes very quiet!") +<<<<<<< HEAD var/atom/toplevelholder = holder +======= + + if(active_effect) + if(activated) + target.underlays.Add(active_effect) + else + target.underlays.Remove(active_effect) + + var/atom/toplevelholder = target +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery while(!istype(toplevelholder.loc, /turf)) toplevelholder = toplevelholder.loc toplevelholder.visible_message("[bicon(toplevelholder)] [toplevelholder] [display_msg]") diff --git a/code/modules/xenoarcheaology/effects/animate_anomaly.dm b/code/modules/xenoarcheaology/effects/animate_anomaly.dm index c0c17e4aaf..8d1b835198 100644 --- a/code/modules/xenoarcheaology/effects/animate_anomaly.dm +++ b/code/modules/xenoarcheaology/effects/animate_anomaly.dm @@ -13,21 +13,37 @@ effectrange = max(3, effectrange) /datum/artifact_effect/animate_anomaly/proc/find_target() +<<<<<<< HEAD if(!target || target.z != holder.z || get_dist(target, holder) > effectrange) var/mob/living/ClosestMob = null for(var/mob/living/L in range(effectrange, holder)) +======= + var/atom/masterholder = get_master_holder() + + if(!target || target.z != masterholder.z || get_dist(target, masterholder) > effectrange) + var/mob/living/ClosestMob = null + for(var/mob/living/L in range(effectrange, get_turf(masterholder))) +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(!L.mind) continue if(!ClosestMob) ClosestMob = L continue if(!L.stat) +<<<<<<< HEAD if(get_dist(holder, L) < get_dist(holder, ClosestMob)) +======= + if(get_dist(masterholder, L) < get_dist(masterholder, ClosestMob)) +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery ClosestMob = L target = ClosestMob /datum/artifact_effect/animate_anomaly/DoEffectTouch(var/mob/living/user) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery var/obj/O = holder var/turf/T = get_step_away(O, user) @@ -36,11 +52,21 @@ O.visible_message("\The [holder] lurches away from [user]") /datum/artifact_effect/animate_anomaly/DoEffectAura() +<<<<<<< HEAD var/obj/O = holder if(!target || target.z != O.z || get_dist(target, O) > effectrange) target = null find_target() var/turf/T = get_step_to(O, target) +======= + var/obj/O = get_master_holder() + find_target() + + if(!target || !istype(O)) + return + + O.dir = get_dir(O, target) +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(target && istype(T) && istype(O.loc, /turf)) if(get_dist(O, T) > 1) diff --git a/code/modules/xenoarcheaology/effects/badfeeling.dm b/code/modules/xenoarcheaology/effects/badfeeling.dm index a0aa7dc775..8c2c525b0e 100644 --- a/code/modules/xenoarcheaology/effects/badfeeling.dm +++ b/code/modules/xenoarcheaology/effects/badfeeling.dm @@ -39,6 +39,10 @@ H.dizziness += rand(3,5) /datum/artifact_effect/badfeeling/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/human/H in range(src.effectrange,T)) @@ -53,6 +57,10 @@ return 1 /datum/artifact_effect/badfeeling/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/human/H in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/berserk.dm b/code/modules/xenoarcheaology/effects/berserk.dm index a221c9104c..62dd336c8a 100644 --- a/code/modules/xenoarcheaology/effects/berserk.dm +++ b/code/modules/xenoarcheaology/effects/berserk.dm @@ -28,6 +28,10 @@ return TRUE /datum/artifact_effect/berserk/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for(var/mob/living/L in range(src.effectrange,T)) @@ -36,6 +40,10 @@ return TRUE /datum/artifact_effect/berserk/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for(var/mob/living/L in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/cannibal.dm b/code/modules/xenoarcheaology/effects/cannibal.dm index 04a0b5a9e8..bc29d4c8b8 100644 --- a/code/modules/xenoarcheaology/effects/cannibal.dm +++ b/code/modules/xenoarcheaology/effects/cannibal.dm @@ -41,6 +41,10 @@ H.nutrition = H.nutrition / 1.5 /datum/artifact_effect/cannibalfeeling/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/human/H in range(src.effectrange,T)) @@ -57,6 +61,10 @@ return 1 /datum/artifact_effect/cannibalfeeling/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/human/H in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/cellcharge.dm b/code/modules/xenoarcheaology/effects/cellcharge.dm index b5c8e6224b..c632bdf4ae 100644 --- a/code/modules/xenoarcheaology/effects/cellcharge.dm +++ b/code/modules/xenoarcheaology/effects/cellcharge.dm @@ -14,6 +14,10 @@ return 1 /datum/artifact_effect/cellcharge/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/obj/machinery/power/apc/C in GLOB.apcs) @@ -42,6 +46,10 @@ return 1 /datum/artifact_effect/cellcharge/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/obj/machinery/power/apc/C in GLOB.apcs) diff --git a/code/modules/xenoarcheaology/effects/celldrain.dm b/code/modules/xenoarcheaology/effects/celldrain.dm index ee279032ec..addc2b17a9 100644 --- a/code/modules/xenoarcheaology/effects/celldrain.dm +++ b/code/modules/xenoarcheaology/effects/celldrain.dm @@ -16,6 +16,10 @@ return 1 /datum/artifact_effect/celldrain/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/obj/machinery/power/apc/C in GLOB.apcs) @@ -44,6 +48,10 @@ return 1 /datum/artifact_effect/celldrain/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/obj/machinery/power/apc/C in GLOB.apcs) diff --git a/code/modules/xenoarcheaology/effects/cold.dm b/code/modules/xenoarcheaology/effects/cold.dm index 9855ac280b..bc7b808e6e 100644 --- a/code/modules/xenoarcheaology/effects/cold.dm +++ b/code/modules/xenoarcheaology/effects/cold.dm @@ -10,6 +10,10 @@ effect_type = pick(EFFECT_ORGANIC, EFFECT_BLUESPACE, EFFECT_SYNTH) /datum/artifact_effect/cold/DoEffectTouch(var/mob/user) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) to_chat(user, "A chill passes up your spine!") var/datum/gas_mixture/env = holder.loc.return_air() @@ -17,6 +21,10 @@ env.temperature = max(env.temperature - rand(5,50), 0) /datum/artifact_effect/cold/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/datum/gas_mixture/env = holder.loc.return_air() if(env && env.temperature > target_temp) diff --git a/code/modules/xenoarcheaology/effects/dnaswitch.dm b/code/modules/xenoarcheaology/effects/dnaswitch.dm index c4c36cb5b1..8b1ffa49f8 100644 --- a/code/modules/xenoarcheaology/effects/dnaswitch.dm +++ b/code/modules/xenoarcheaology/effects/dnaswitch.dm @@ -28,6 +28,10 @@ return 1 /datum/artifact_effect/dnaswitch/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for(var/mob/living/carbon/human/H in range(src.effectrange,T)) @@ -47,6 +51,10 @@ scramble(0, H, weakness * severity) /datum/artifact_effect/dnaswitch/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for(var/mob/living/carbon/human/H in range(200, T)) diff --git a/code/modules/xenoarcheaology/effects/electric_field.dm b/code/modules/xenoarcheaology/effects/electric_field.dm index 3b27e8fe42..cd8814f293 100644 --- a/code/modules/xenoarcheaology/effects/electric_field.dm +++ b/code/modules/xenoarcheaology/effects/electric_field.dm @@ -4,6 +4,10 @@ effect_type = EFFECT_ENERGY /datum/artifact_effect/electric_field/DoEffectTouch(var/mob/user) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery var/list/nearby_mobs = list() for(var/mob/living/L in oview(effectrange, get_turf(holder))) if(L == user) // You're "grounded" when you contact the artifact. @@ -27,6 +31,10 @@ L.electrocute_act(rand(25, 40), holder, 0.75, BP_TORSO) /datum/artifact_effect/electric_field/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery var/list/nearby_mobs = list() for(var/mob/living/L in oview(effectrange, get_turf(holder))) if(!L.stat) @@ -48,6 +56,10 @@ L.electrocute_act(rand(1, 10), holder, 0.75, BP_TORSO) /datum/artifact_effect/electric_field/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery var/list/nearby_mobs = list() for(var/mob/living/L in oview(effectrange, get_turf(holder))) if(!L.stat) diff --git a/code/modules/xenoarcheaology/effects/emp.dm b/code/modules/xenoarcheaology/effects/emp.dm index fd30420b57..3a58a2387f 100644 --- a/code/modules/xenoarcheaology/effects/emp.dm +++ b/code/modules/xenoarcheaology/effects/emp.dm @@ -7,6 +7,10 @@ effect = EFFECT_PULSE /datum/artifact_effect/emp/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) empulse(T, effectrange/4, effectrange/3, effectrange/2, effectrange) diff --git a/code/modules/xenoarcheaology/effects/feysight.dm b/code/modules/xenoarcheaology/effects/feysight.dm index 379dc0cc54..772961b976 100644 --- a/code/modules/xenoarcheaology/effects/feysight.dm +++ b/code/modules/xenoarcheaology/effects/feysight.dm @@ -28,6 +28,10 @@ return TRUE /datum/artifact_effect/feysight/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for(var/mob/living/L in range(src.effectrange,T)) @@ -36,6 +40,10 @@ return TRUE /datum/artifact_effect/feysight/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for(var/mob/living/L in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/forcefield.dm b/code/modules/xenoarcheaology/effects/forcefield.dm index f4f1a3ab07..684c205a72 100644 --- a/code/modules/xenoarcheaology/effects/forcefield.dm +++ b/code/modules/xenoarcheaology/effects/forcefield.dm @@ -8,6 +8,10 @@ trigger = TRIGGER_TOUCH /datum/artifact_effect/forcefield/ToggleActivate() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery ..() if(created_field.len) for(var/obj/effect/energy_field/F in created_field) @@ -35,6 +39,10 @@ E.adjust_strength(0.25, 0) /datum/artifact_effect/forcefield/UpdateMove() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(created_field.len && holder) var/turf/T = get_turf(holder) while(created_field.len < 16) diff --git a/code/modules/xenoarcheaology/effects/gaia.dm b/code/modules/xenoarcheaology/effects/gaia.dm index 1a89149818..a7b853d4d3 100644 --- a/code/modules/xenoarcheaology/effects/gaia.dm +++ b/code/modules/xenoarcheaology/effects/gaia.dm @@ -30,6 +30,10 @@ P.update_icon() /datum/artifact_effect/gaia/DoEffectTouch(var/mob/user) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery to_chat(user, "You feel the presence of something long forgotten.") for(var/obj/machinery/portable_atmospherics/hydroponics/Tray in view(world.view,get_turf(holder))) age_plantlife(Tray) @@ -44,6 +48,10 @@ age_plantlife(P) /datum/artifact_effect/gaia/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery for(var/obj/machinery/portable_atmospherics/hydroponics/Tray in view(effectrange,holder)) age_plantlife(Tray) if(prob(2)) @@ -57,6 +65,10 @@ age_plantlife(P) /datum/artifact_effect/gaia/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery for(var/obj/machinery/portable_atmospherics/hydroponics/Tray in view(effectrange,holder)) age_plantlife(Tray) if(prob(10)) @@ -70,6 +82,10 @@ age_plantlife(P) /datum/artifact_effect/gaia/process() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery ..() listclearnulls(my_glitterflies) diff --git a/code/modules/xenoarcheaology/effects/gasco2.dm b/code/modules/xenoarcheaology/effects/gasco2.dm index 264dca7352..c58e893486 100644 --- a/code/modules/xenoarcheaology/effects/gasco2.dm +++ b/code/modules/xenoarcheaology/effects/gasco2.dm @@ -7,12 +7,20 @@ effect_type = pick(EFFECT_BLUESPACE, EFFECT_SYNTH) /datum/artifact_effect/gasco2/DoEffectTouch(var/mob/user) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) holder_loc.assume_gas("carbon_dioxide", rand(2, 15)) /datum/artifact_effect/gasco2/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) diff --git a/code/modules/xenoarcheaology/effects/gasnitro.dm b/code/modules/xenoarcheaology/effects/gasnitro.dm index 42b440fc1c..e369105686 100644 --- a/code/modules/xenoarcheaology/effects/gasnitro.dm +++ b/code/modules/xenoarcheaology/effects/gasnitro.dm @@ -7,12 +7,20 @@ effect_type = pick(EFFECT_BLUESPACE, EFFECT_SYNTH) /datum/artifact_effect/gasnitro/DoEffectTouch(var/mob/user) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) holder_loc.assume_gas("nitrogen", rand(2, 15)) /datum/artifact_effect/gasnitro/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) diff --git a/code/modules/xenoarcheaology/effects/gasoxy.dm b/code/modules/xenoarcheaology/effects/gasoxy.dm index bb159509dc..414ca48f13 100644 --- a/code/modules/xenoarcheaology/effects/gasoxy.dm +++ b/code/modules/xenoarcheaology/effects/gasoxy.dm @@ -7,12 +7,20 @@ effect_type = pick(EFFECT_BLUESPACE, EFFECT_SYNTH) /datum/artifact_effect/gasoxy/DoEffectTouch(var/mob/user) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) holder_loc.assume_gas("oxygen", rand(2, 15)) /datum/artifact_effect/gasoxy/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) diff --git a/code/modules/xenoarcheaology/effects/gasphoron.dm b/code/modules/xenoarcheaology/effects/gasphoron.dm index b84296fbb8..5c31ac2e42 100644 --- a/code/modules/xenoarcheaology/effects/gasphoron.dm +++ b/code/modules/xenoarcheaology/effects/gasphoron.dm @@ -7,12 +7,20 @@ effect_type = pick(EFFECT_BLUESPACE, EFFECT_SYNTH) /datum/artifact_effect/gasphoron/DoEffectTouch(var/mob/user) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) holder_loc.assume_gas("phoron", rand(2, 15)) /datum/artifact_effect/gasphoron/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) diff --git a/code/modules/xenoarcheaology/effects/gassleeping.dm b/code/modules/xenoarcheaology/effects/gassleeping.dm index 3c12f8f91c..067b18e3b4 100644 --- a/code/modules/xenoarcheaology/effects/gassleeping.dm +++ b/code/modules/xenoarcheaology/effects/gassleeping.dm @@ -7,12 +7,20 @@ effect_type = pick(EFFECT_BLUESPACE, EFFECT_SYNTH) /datum/artifact_effect/gassleeping/DoEffectTouch(var/mob/user) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) holder_loc.assume_gas("nitrous_oxide", rand(2, 15)) /datum/artifact_effect/gassleeping/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/holder_loc = holder.loc if(istype(holder_loc)) diff --git a/code/modules/xenoarcheaology/effects/goodfeeling.dm b/code/modules/xenoarcheaology/effects/goodfeeling.dm index c5d05adc5e..ec9356e727 100644 --- a/code/modules/xenoarcheaology/effects/goodfeeling.dm +++ b/code/modules/xenoarcheaology/effects/goodfeeling.dm @@ -37,6 +37,10 @@ H.dizziness += rand(3,5) /datum/artifact_effect/goodfeeling/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/human/H in range(src.effectrange,T)) @@ -51,6 +55,10 @@ return 1 /datum/artifact_effect/goodfeeling/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/human/H in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/gravitational_waves.dm b/code/modules/xenoarcheaology/effects/gravitational_waves.dm index 6798eef64c..5e28323add 100644 --- a/code/modules/xenoarcheaology/effects/gravitational_waves.dm +++ b/code/modules/xenoarcheaology/effects/gravitational_waves.dm @@ -9,6 +9,10 @@ gravwave(user, effectrange, STAGE_TWO) /datum/artifact_effect/gravity_wave/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery var/seconds_since_last_pull = max(0, round((last_wave_pull - world.time) / 10)) if(prob(10 + seconds_since_last_pull)) @@ -17,6 +21,10 @@ gravwave(get_turf(holder), effectrange, STAGE_TWO) /datum/artifact_effect/gravity_wave/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery holder.visible_message("\The [holder] distorts as local gravity intensifies, and shifts toward it.") gravwave(get_turf(holder), effectrange, STAGE_TWO) diff --git a/code/modules/xenoarcheaology/effects/heal.dm b/code/modules/xenoarcheaology/effects/heal.dm index 39bb09d04e..afb5dfdb31 100644 --- a/code/modules/xenoarcheaology/effects/heal.dm +++ b/code/modules/xenoarcheaology/effects/heal.dm @@ -33,6 +33,10 @@ return 1 /datum/artifact_effect/heal/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery //todo: check over this properly if(holder) var/turf/T = get_turf(holder) @@ -49,6 +53,10 @@ C.updatehealth() /datum/artifact_effect/heal/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery //todo: check over this properly if(holder) var/turf/T = get_turf(holder) diff --git a/code/modules/xenoarcheaology/effects/heat.dm b/code/modules/xenoarcheaology/effects/heat.dm index 720d146443..b82d203295 100644 --- a/code/modules/xenoarcheaology/effects/heat.dm +++ b/code/modules/xenoarcheaology/effects/heat.dm @@ -10,6 +10,10 @@ target_temp = rand(300, 600) /datum/artifact_effect/heat/DoEffectTouch(var/mob/user) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) to_chat(user, " You feel a wave of heat travel up your spine!") var/datum/gas_mixture/env = holder.loc.return_air() @@ -17,6 +21,10 @@ env.temperature += rand(5,50) /datum/artifact_effect/heat/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/datum/gas_mixture/env = holder.loc.return_air() if(env && env.temperature < target_temp) diff --git a/code/modules/xenoarcheaology/effects/hurt.dm b/code/modules/xenoarcheaology/effects/hurt.dm index 14aff4e624..eb116ad5ba 100644 --- a/code/modules/xenoarcheaology/effects/hurt.dm +++ b/code/modules/xenoarcheaology/effects/hurt.dm @@ -20,6 +20,10 @@ C.weakened += 6 * weakness /datum/artifact_effect/hurt/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/C in range(src.effectrange,T)) @@ -35,6 +39,10 @@ C.updatehealth() /datum/artifact_effect/hurt/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/C in range(effectrange, T)) diff --git a/code/modules/xenoarcheaology/effects/poltergeist.dm b/code/modules/xenoarcheaology/effects/poltergeist.dm index 189c0ea4cd..58f79a05f9 100644 --- a/code/modules/xenoarcheaology/effects/poltergeist.dm +++ b/code/modules/xenoarcheaology/effects/poltergeist.dm @@ -19,6 +19,10 @@ throw_at_mob(user, rand(10, 30)) /datum/artifact_effect/poltergeist/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery var/mob/living/target = null for(var/mob/living/L in oview(get_turf(holder), effectrange)) if(L.stat || !L.mind) @@ -33,6 +37,10 @@ throw_at_mob(target, rand(15, 30)) /datum/artifact_effect/poltergeist/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery var/mob/living/target = null for(var/mob/living/L in oview(get_turf(holder), effectrange)) if(L.stat || !L.mind) diff --git a/code/modules/xenoarcheaology/effects/radiate.dm b/code/modules/xenoarcheaology/effects/radiate.dm index e38540eb04..9fcf83820f 100644 --- a/code/modules/xenoarcheaology/effects/radiate.dm +++ b/code/modules/xenoarcheaology/effects/radiate.dm @@ -14,11 +14,19 @@ return 1 /datum/artifact_effect/radiate/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) SSradiation.flat_radiate(holder, radiation_amount, src.effectrange) return 1 /datum/artifact_effect/radiate/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) SSradiation.radiate(holder, ((radiation_amount * 3) * (sqrt(src.effectrange)))) //Need to get feedback on this //VOREStation Edit - Was too crazy-strong. return 1 diff --git a/code/modules/xenoarcheaology/effects/resurrect.dm b/code/modules/xenoarcheaology/effects/resurrect.dm index e54ca276ea..d2d4547d5b 100644 --- a/code/modules/xenoarcheaology/effects/resurrect.dm +++ b/code/modules/xenoarcheaology/effects/resurrect.dm @@ -5,6 +5,10 @@ var/stored_life = 0 /datum/artifact_effect/resurrect/proc/steal_life(var/mob/living/target = null) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(!istype(target)) return 0 @@ -16,6 +20,10 @@ return 0 /datum/artifact_effect/resurrect/proc/give_life(var/mob/living/target = null) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(!istype(target)) return @@ -34,6 +42,10 @@ stored_life = 0 /datum/artifact_effect/resurrect/proc/attempt_revive(var/mob/living/L = null) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery spawn() if(istype(L, /mob/living/simple_mob)) var/mob/living/simple_mob/SM = L @@ -70,6 +82,10 @@ holder.visible_message("\The [H]'s eyes open in a flash of light!") /datum/artifact_effect/resurrect/DoEffectTouch(var/mob/user) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery for(var/mob/living/L in oview(effectrange, get_turf(holder))) stored_life += 4 * steal_life(L) @@ -80,6 +96,10 @@ break /datum/artifact_effect/resurrect/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery for(var/mob/living/L in oview(effectrange, get_turf(holder))) stored_life += steal_life(L) @@ -90,6 +110,10 @@ break /datum/artifact_effect/resurrect/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery for(var/mob/living/L in oview(effectrange, get_turf(holder))) stored_life += 2 * steal_life(L) diff --git a/code/modules/xenoarcheaology/effects/roboheal.dm b/code/modules/xenoarcheaology/effects/roboheal.dm index 0052a53979..440731d458 100644 --- a/code/modules/xenoarcheaology/effects/roboheal.dm +++ b/code/modules/xenoarcheaology/effects/roboheal.dm @@ -16,6 +16,10 @@ return 1 /datum/artifact_effect/roboheal/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) @@ -28,6 +32,10 @@ return 1 /datum/artifact_effect/roboheal/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/robohurt.dm b/code/modules/xenoarcheaology/effects/robohurt.dm index 8ed47a9e28..3802261a43 100644 --- a/code/modules/xenoarcheaology/effects/robohurt.dm +++ b/code/modules/xenoarcheaology/effects/robohurt.dm @@ -16,6 +16,10 @@ return 1 /datum/artifact_effect/robohurt/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) @@ -28,6 +32,10 @@ return 1 /datum/artifact_effect/robohurt/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/silicon/robot/M in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/sleepy.dm b/code/modules/xenoarcheaology/effects/sleepy.dm index 6a0439460a..7d7e548e92 100644 --- a/code/modules/xenoarcheaology/effects/sleepy.dm +++ b/code/modules/xenoarcheaology/effects/sleepy.dm @@ -20,6 +20,10 @@ return 1 /datum/artifact_effect/sleepy/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/human/H in range(src.effectrange,T)) @@ -34,6 +38,10 @@ return 1 /datum/artifact_effect/sleepy/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for(var/mob/living/carbon/human/H in range(src.effectrange, T)) diff --git a/code/modules/xenoarcheaology/effects/stun.dm b/code/modules/xenoarcheaology/effects/stun.dm index ab00465477..1177b6ee7a 100644 --- a/code/modules/xenoarcheaology/effects/stun.dm +++ b/code/modules/xenoarcheaology/effects/stun.dm @@ -16,6 +16,10 @@ C.Stun(rand(1,10) * susceptibility) /datum/artifact_effect/stun/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/C in range(src.effectrange,T)) @@ -30,6 +34,10 @@ to_chat(C, "You feel numb.") /datum/artifact_effect/stun/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/carbon/C in range(src.effectrange,T)) diff --git a/code/modules/xenoarcheaology/effects/teleport.dm b/code/modules/xenoarcheaology/effects/teleport.dm index 36b90afd31..b60be8a963 100644 --- a/code/modules/xenoarcheaology/effects/teleport.dm +++ b/code/modules/xenoarcheaology/effects/teleport.dm @@ -3,6 +3,10 @@ effect_type = EFFECT_BLUESPACE /datum/artifact_effect/teleport/DoEffectTouch(var/mob/user) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery var/weakness = GetAnomalySusceptibility(user) if(prob(100 * weakness)) to_chat(user, "You are suddenly zapped away elsewhere!") @@ -20,6 +24,10 @@ sparks.start() /datum/artifact_effect/teleport/DoEffectAura() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/M in range(src.effectrange,T)) @@ -39,6 +47,10 @@ sparks.start() /datum/artifact_effect/teleport/DoEffectPulse() +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery if(holder) var/turf/T = get_turf(holder) for (var/mob/living/M in range(src.effectrange, T)) diff --git a/code/modules/xenoarcheaology/effects/vampire.dm b/code/modules/xenoarcheaology/effects/vampire.dm index cf0ae9a246..07ff931251 100644 --- a/code/modules/xenoarcheaology/effects/vampire.dm +++ b/code/modules/xenoarcheaology/effects/vampire.dm @@ -10,6 +10,10 @@ var/list/nearby_mobs = list() /datum/artifact_effect/vampire/proc/bloodcall(var/mob/living/carbon/human/M) +<<<<<<< HEAD +======= + var/atom/holder = get_master_holder() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery last_bloodcall = world.time if(istype(M)) playsound(holder, pick('sound/hallucinations/wail.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/far_noise.ogg'), 50, 1, -3) @@ -30,8 +34,14 @@ DoEffectAura() /datum/artifact_effect/vampire/DoEffectAura() +<<<<<<< HEAD nearby_mobs.Cut() +======= + var/atom/holder = get_master_holder() + if(nearby_mobs.len) + nearby_mobs.Cut() +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery var/turf/T = get_turf(holder) for(var/mob/living/L in oview(effectrange, T)) @@ -45,7 +55,11 @@ bloodcall(M) holder.Beam(M, icon_state = "drainbeam", time = 1 SECOND) +<<<<<<< HEAD if(world.time - last_eat > eat_interval) +======= + if(world.time - last_eat >= eat_interval) +>>>>>>> a186da160f9... Merge pull request #8339 from Mechoid/AnomBattery var/obj/effect/decal/cleanable/blood/B = locate() in range(2,holder) if(B) last_eat = world.time From 9744067634b900021ad4324e35690dd342d3742b Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Wed, 27 Oct 2021 13:51:21 -0400 Subject: [PATCH 05/26] Fix merge --- code/__defines/dcs/signals.dm | 3 - code/_onclick/item_attack.dm | 7 +- code/game/atoms.dm | 5 - code/game/atoms_movable.dm | 3 - code/modules/reagents/reagents/core.dm | 5 - .../xenoarcheaology/artifacts/artifact.dm | 227 ------------------ .../tools/artifact_harvester.dm | 3 - 7 files changed, 2 insertions(+), 251 deletions(-) diff --git a/code/__defines/dcs/signals.dm b/code/__defines/dcs/signals.dm index d8284b8936..ae3773be74 100644 --- a/code/__defines/dcs/signals.dm +++ b/code/__defines/dcs/signals.dm @@ -738,7 +738,6 @@ #define COMSIG_REAGENTS_CRAFTING_PING "reagents_crafting_ping" -<<<<<<< HEAD // Lighting: ///from base of [atom/proc/set_light]: (l_range, l_power, l_color, l_on) #define COMSIG_ATOM_SET_LIGHT "atom_set_light" @@ -780,7 +779,5 @@ #define COMSIG_CONFLICT_ELEMENT_CHECK "conflict_element_check" /// A conflict was found #define ELEMENT_CONFLICT_FOUND (1<<0) -======= //From reagents touch_x. #define COMSIG_REAGENTS_TOUCH "reagent_touch" ->>>>>>> 71e8b0399de... Universal Anomalies (#7914) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 5de3846dc2..c55ec430e3 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -63,13 +63,10 @@ avoid code duplication. This includes items that may sometimes act as a standard return FALSE if(can_operate(src, user) && I.do_surgery(src,user)) -<<<<<<< HEAD - return 1 - if(attempt_vr(src,"vore_attackby",args)) return //VOREStation Add - The vore, of course. -======= return TRUE ->>>>>>> 71e8b0399de... Universal Anomalies (#7914) + if(attempt_vr(src,"vore_attackby",args)) return //VOREStation Add - The vore, of course. + return I.attack(src, user, user.zone_sel.selecting, attack_modifier) // Used to get how fast a mob should attack, and influences click delay. diff --git a/code/game/atoms.dm b/code/game/atoms.dm index d3e551fa8f..3df1820fa9 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -251,7 +251,6 @@ . = new_dir != dir dir = new_dir -<<<<<<< HEAD // Called to set the atom's density and used to add behavior to density changes. /atom/proc/set_density(var/new_density) if(density == new_density) @@ -266,12 +265,8 @@ invisibility = new_invisibility return TRUE -/atom/proc/ex_act() - return -======= /atom/proc/ex_act(var/strength = 3) return (SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, strength, src) & COMPONENT_IGNORE_EXPLOSION) ->>>>>>> 71e8b0399de... Universal Anomalies (#7914) /atom/proc/emag_act(var/remaining_charges, var/mob/user, var/emag_source) return -1 diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 137355564a..ef50823c48 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -233,14 +233,11 @@ if(riding_datum) riding_datum.handle_vehicle_layer() riding_datum.handle_vehicle_offsets() -<<<<<<< HEAD for (var/datum/light_source/light as anything in light_sources) // Cycle through the light sources on this atom and tell them to update. light.source_atom.update_light() -======= SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, old_loc, direction) ->>>>>>> 71e8b0399de... Universal Anomalies (#7914) return TRUE /atom/movable/set_dir(newdir) diff --git a/code/modules/reagents/reagents/core.dm b/code/modules/reagents/reagents/core.dm index b454824275..0cff5905d8 100644 --- a/code/modules/reagents/reagents/core.dm +++ b/code/modules/reagents/reagents/core.dm @@ -195,14 +195,9 @@ T.wet_floor(1) /datum/reagent/water/touch_obj(var/obj/O, var/amount) -<<<<<<< HEAD - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube)) - var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O -======= ..() if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/cube)) var/obj/item/weapon/reagent_containers/food/snacks/cube/cube = O ->>>>>>> 71e8b0399de... Universal Anomalies (#7914) if(!cube.wrapped) cube.Expand() else diff --git a/code/modules/xenoarcheaology/artifacts/artifact.dm b/code/modules/xenoarcheaology/artifacts/artifact.dm index 05dbf1c7a8..7a2d73474a 100644 --- a/code/modules/xenoarcheaology/artifacts/artifact.dm +++ b/code/modules/xenoarcheaology/artifacts/artifact.dm @@ -4,19 +4,7 @@ icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "ano00" var/icon_num = 0 -<<<<<<< HEAD density = TRUE - var/datum/artifact_effect/my_effect - var/datum/artifact_effect/secondary_effect - var/being_used = 0 - - var/predefined_effects = FALSE - - var/predefined_primary - var/predefined_secondary -======= - density = 1 ->>>>>>> 71e8b0399de... Universal Anomalies (#7914) var/predefined_icon_num @@ -32,22 +20,10 @@ artifact_master = GetComponent(artifact_master) -<<<<<<< HEAD - else - var/effecttype = pick(subtypesof(/datum/artifact_effect)) - my_effect = new effecttype(src) - - if(prob(75)) - effecttype = pick(subtypesof(/datum/artifact_effect)) - secondary_effect = new effecttype(src) - if(prob(75)) - secondary_effect.ToggleActivate(0) -======= if(!istype(artifact_master)) return var/datum/artifact_effect/my_effect = artifact_master.get_primary() ->>>>>>> 71e8b0399de... Universal Anomalies (#7914) if(!isnull(predefined_icon_num)) icon_num = predefined_icon_num @@ -84,210 +60,7 @@ if(prob(60)) my_effect.trigger = pick(TRIGGER_TOUCH, TRIGGER_HEAT, TRIGGER_COLD, TRIGGER_PHORON, TRIGGER_OXY, TRIGGER_CO2, TRIGGER_NITRO) -<<<<<<< HEAD - if(predefined_triggers) - if(predefined_trig_primary && my_effect) - my_effect.trigger = predefined_trig_primary - - if(predefined_trig_secondary && secondary_effect) - secondary_effect.trigger = predefined_trig_secondary - -/obj/machinery/artifact/proc/choose_effect() - var/effect_type = tgui_input_list(usr, "What type do you want?", "Effect Type", subtypesof(/datum/artifact_effect)) - if(effect_type) - my_effect = new effect_type(src) - if(tgui_alert(usr, "Do you want a secondary effect?", "Second Effect", list("No", "Yes")) == "Yes") - var/second_effect_type = tgui_input_list(usr, "What type do you want as well?", "Second Effect Type", subtypesof(/datum/artifact_effect) - effect_type) - secondary_effect = new second_effect_type(src) - else - secondary_effect = null - - -/obj/machinery/artifact/process() - var/turf/L = loc - if(!istype(L)) // We're inside a container or on null turf, either way stop processing effects - return - - if(my_effect) - my_effect.process() - if(secondary_effect) - secondary_effect.process() - - if(pulledby) - Bumped(pulledby) - - //if either of our effects rely on environmental factors, work that out - var/trigger_cold = 0 - var/trigger_hot = 0 - var/trigger_phoron = 0 - var/trigger_oxy = 0 - var/trigger_co2 = 0 - var/trigger_nitro = 0 - if( (my_effect.trigger >= TRIGGER_HEAT && my_effect.trigger <= TRIGGER_NITRO) || (my_effect.trigger >= TRIGGER_HEAT && my_effect.trigger <= TRIGGER_NITRO) ) - var/turf/T = get_turf(src) - var/datum/gas_mixture/env = T.return_air() - if(env) - if(env.temperature < 225) - trigger_cold = 1 - else if(env.temperature > 375) - trigger_hot = 1 - - if(env.gas["phoron"] >= 10) - trigger_phoron = 1 - if(env.gas["oxygen"] >= 10) - trigger_oxy = 1 - if(env.gas["carbon_dioxide"] >= 10) - trigger_co2 = 1 - if(env.gas["nitrogen"] >= 10) - trigger_nitro = 1 - - //COLD ACTIVATION - if(trigger_cold) - if(my_effect.trigger == TRIGGER_COLD && !my_effect.activated) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_COLD && !secondary_effect.activated) - secondary_effect.ToggleActivate(0) - else - if(my_effect.trigger == TRIGGER_COLD && my_effect.activated) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_COLD && !secondary_effect.activated) - secondary_effect.ToggleActivate(0) - - //HEAT ACTIVATION - if(trigger_hot) - if(my_effect.trigger == TRIGGER_HEAT && !my_effect.activated) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_HEAT && !secondary_effect.activated) - secondary_effect.ToggleActivate(0) - else - if(my_effect.trigger == TRIGGER_HEAT && my_effect.activated) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_HEAT && !secondary_effect.activated) - secondary_effect.ToggleActivate(0) - - //PHORON GAS ACTIVATION - if(trigger_phoron) - if(my_effect.trigger == TRIGGER_PHORON && !my_effect.activated) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_PHORON && !secondary_effect.activated) - secondary_effect.ToggleActivate(0) - else - if(my_effect.trigger == TRIGGER_PHORON && my_effect.activated) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_PHORON && !secondary_effect.activated) - secondary_effect.ToggleActivate(0) - - //OXYGEN GAS ACTIVATION - if(trigger_oxy) - if(my_effect.trigger == TRIGGER_OXY && !my_effect.activated) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_OXY && !secondary_effect.activated) - secondary_effect.ToggleActivate(0) - else - if(my_effect.trigger == TRIGGER_OXY && my_effect.activated) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_OXY && !secondary_effect.activated) - secondary_effect.ToggleActivate(0) - - //CO2 GAS ACTIVATION - if(trigger_co2) - if(my_effect.trigger == TRIGGER_CO2 && !my_effect.activated) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_CO2 && !secondary_effect.activated) - secondary_effect.ToggleActivate(0) - else - if(my_effect.trigger == TRIGGER_CO2 && my_effect.activated) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_CO2 && !secondary_effect.activated) - secondary_effect.ToggleActivate(0) - - //NITROGEN GAS ACTIVATION - if(trigger_nitro) - if(my_effect.trigger == TRIGGER_NITRO && !my_effect.activated) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_NITRO && !secondary_effect.activated) - secondary_effect.ToggleActivate(0) - else - if(my_effect.trigger == TRIGGER_NITRO && my_effect.activated) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_NITRO && !secondary_effect.activated) - secondary_effect.ToggleActivate(0) - -/obj/machinery/artifact/attack_hand(var/mob/user as mob) - if (get_dist(user, src) > 1) - to_chat(user, "You can't reach [src] from here.") - return - if(ishuman(user) && user:gloves) - to_chat(user, "You touch [src] with your gloved hands, [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].") - return - - src.add_fingerprint(user) - - if(my_effect.trigger == TRIGGER_TOUCH) - to_chat(user, "You touch [src].") - my_effect.ToggleActivate() - else - to_chat(user, "You touch [src], [pick("but nothing of note happens","but nothing happens","but nothing interesting happens","but you notice nothing different","but nothing seems to have happened")].") - - if(prob(25) && secondary_effect && secondary_effect.trigger == TRIGGER_TOUCH) - secondary_effect.ToggleActivate(0) - - if (my_effect.effect == EFFECT_TOUCH) - my_effect.DoEffectTouch(user) - - if(secondary_effect && secondary_effect.effect == EFFECT_TOUCH && secondary_effect.activated) - secondary_effect.DoEffectTouch(user) - -/obj/machinery/artifact/attackby(obj/item/weapon/W as obj, mob/living/user as mob) - - if (istype(W, /obj/item/weapon/reagent_containers/)) - if(W.reagents.has_reagent("hydrogen", 1) || W.reagents.has_reagent("water", 1)) - if(my_effect.trigger == TRIGGER_WATER) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_WATER && prob(25)) - secondary_effect.ToggleActivate(0) - else if(W.reagents.has_reagent("sacid", 1) || W.reagents.has_reagent("pacid", 1) || W.reagents.has_reagent("diethylamine", 1)) - if(my_effect.trigger == TRIGGER_ACID) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_ACID && prob(25)) - secondary_effect.ToggleActivate(0) - else if(W.reagents.has_reagent("phoron", 1) || W.reagents.has_reagent("thermite", 1)) - if(my_effect.trigger == TRIGGER_VOLATILE) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_VOLATILE && prob(25)) - secondary_effect.ToggleActivate(0) - else if(W.reagents.has_reagent("toxin", 1) || W.reagents.has_reagent("cyanide", 1) || W.reagents.has_reagent("amatoxin", 1) || W.reagents.has_reagent("neurotoxin", 1)) - if(my_effect.trigger == TRIGGER_TOXIN) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_TOXIN && prob(25)) - secondary_effect.ToggleActivate(0) - else if(istype(W,/obj/item/weapon/melee/baton) && W:status ||\ - istype(W,/obj/item/weapon/melee/energy) ||\ - istype(W,/obj/item/weapon/melee/cultblade) ||\ - istype(W,/obj/item/weapon/card/emag) ||\ - istype(W,/obj/item/device/multitool)) - if (my_effect.trigger == TRIGGER_ENERGY) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_ENERGY && prob(25)) - secondary_effect.ToggleActivate(0) - - else if (istype(W,/obj/item/weapon/flame) && W:lit ||\ - istype(W,/obj/item/weapon/weldingtool) && W:welding) - if(my_effect.trigger == TRIGGER_HEAT) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_HEAT && prob(25)) - secondary_effect.ToggleActivate(0) - else - ..() - if (my_effect.trigger == TRIGGER_FORCE && W.force >= 10) - my_effect.ToggleActivate() - if(secondary_effect && secondary_effect.trigger == TRIGGER_FORCE && prob(25)) - secondary_effect.ToggleActivate(0) - -/obj/machinery/artifact/Bumped(M as mob|obj) -======= /obj/machinery/artifact/update_icon() ->>>>>>> 71e8b0399de... Universal Anomalies (#7914) ..() if(LAZYLEN(artifact_master.get_active_effects())) diff --git a/code/modules/xenoarcheaology/tools/artifact_harvester.dm b/code/modules/xenoarcheaology/tools/artifact_harvester.dm index 7f91368b1b..948843c163 100644 --- a/code/modules/xenoarcheaology/tools/artifact_harvester.dm +++ b/code/modules/xenoarcheaology/tools/artifact_harvester.dm @@ -258,8 +258,6 @@ inserted_battery.battery_effect.ToggleActivate() src.visible_message("[name] states, \"Battery dump completed.\"") icon_state = "incubator" -<<<<<<< HEAD -======= /obj/machinery/artifact_harvester/Topic(href, href_list) @@ -391,4 +389,3 @@ usr.unset_machine(src) updateDialog() ->>>>>>> 71e8b0399de... Universal Anomalies (#7914) From 4319640891b2c53bc4467aadda05d84964f15e67 Mon Sep 17 00:00:00 2001 From: PrismaticGynoid Date: Wed, 6 Oct 2021 21:03:16 -0700 Subject: [PATCH 06/26] Map fixes and tweaks part 7 Fixes for: Basic NTnet cards being unable to reach telecomms from the station Shuttles not showing location details when landed Ship sensors printing blank papers Certain shuttles not clearing weather visuals on landing Ninja/merc elite shuttles being unable to dock Mislabeled west solar SMES Engine flow/pump sensors not connected to cooling system computer Fixes a few non-cold tiles in telecomms compartment Adds a few missing rails Also, tweaks surgery rooms a bit --- code/_helpers/turfs.dm | 1 + .../hardware/network_card.dm | 2 +- code/modules/overmap/ships/landable.dm | 6 +- code/modules/paperwork/paper.dm | 13 +- maps/cynosure/cynosure-1.dmm | 12 +- maps/cynosure/cynosure-2.dmm | 46 +- maps/cynosure/cynosure-3.dmm | 10 +- maps/cynosure/cynosure-4.dmm | 72 +- maps/cynosure/cynosure-6.dmm | 114 +- maps/cynosure/cynosure-7.dmm | 1382 ++++++++--------- maps/cynosure/overmap/sectors.dm | 50 + 11 files changed, 927 insertions(+), 781 deletions(-) create mode 100644 maps/cynosure/overmap/sectors.dm diff --git a/code/_helpers/turfs.dm b/code/_helpers/turfs.dm index cc90829619..cdca430fb6 100644 --- a/code/_helpers/turfs.dm +++ b/code/_helpers/turfs.dm @@ -121,6 +121,7 @@ var/old_icon1 = T.icon var/old_decals = T.decals ? T.decals.Copy() : null + B.Destroy() X = B.ChangeTurf(T.type) X.set_dir(old_dir1) X.icon_state = old_icon_state1 diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm index 7a3a4da632..65014be37f 100644 --- a/code/modules/modular_computers/hardware/network_card.dm +++ b/code/modules/modular_computers/hardware/network_card.dm @@ -103,7 +103,7 @@ var/global/ntnet_card_uid = 1 var/holderz = get_z(holder2) if(!holderz) //no reception in nullspace return 0 - var/list/zlevels_in_range = using_map.get_map_levels(holderz, FALSE) + var/list/zlevels_in_range = using_map.get_map_levels(holderz, FALSE)// VOREStation Edit - , om_range = DEFAULT_OVERMAP_RANGE) var/list/zlevels_in_long_range = using_map.get_map_levels(holderz, TRUE, om_range = DEFAULT_OVERMAP_RANGE) - zlevels_in_range var/best = 0 for(var/obj/machinery/ntnet_relay/R as anything in ntnet_global.relays) diff --git a/code/modules/overmap/ships/landable.dm b/code/modules/overmap/ships/landable.dm index 4c16b991bc..ed3e29cd8c 100644 --- a/code/modules/overmap/ships/landable.dm +++ b/code/modules/overmap/ships/landable.dm @@ -199,10 +199,10 @@ switch(status) if(SHIP_STATUS_LANDED) var/obj/effect/overmap/visitable/location = loc - if(istype(loc, /obj/effect/overmap/visitable/sector)) - return "Landed on \the [location.name]. Use secondary thrust to get clear before activating primary engines." - if(istype(loc, /obj/effect/overmap/visitable/ship)) + if(location.in_space) return "Docked with \the [location.name]. Use secondary thrust to get clear before activating primary engines." + else + return "Landed on \the [location.name]. Use secondary thrust to get clear before activating primary engines." return "Docked with an unknown object." if(SHIP_STATUS_TRANSIT) return "Maneuvering under secondary thrust." diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 95bcda3b36..a86707d841 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -106,11 +106,16 @@ //lipstick wiping is in code/game/objects/items/weapons/cosmetics.dm! -/obj/item/weapon/paper/Initialize(mapload) - . = ..() +/obj/item/weapon/paper/Initialize(mapload, var/text, var/title) + . = ..() - if(mapload) // Jank, but we do this to prevent maploaded papers from somehow stacking across rounds if re-added to the board by a player. - was_maploaded = TRUE + if(istext(text)) + name = title + if(istext(title)) + info = text + + if(mapload) // Jank, but we do this to prevent maploaded papers from somehow stacking across rounds if re-added to the board by a player. + was_maploaded = TRUE /obj/item/weapon/paper/New(var/newloc, var/text, var/title) ..() diff --git a/maps/cynosure/cynosure-1.dmm b/maps/cynosure/cynosure-1.dmm index 61b5d30ceb..48a0b40a9a 100644 --- a/maps/cynosure/cynosure-1.dmm +++ b/maps/cynosure/cynosure-1.dmm @@ -16534,6 +16534,9 @@ /area/surface/station/hallway/primary/bmt/west/elevator) "Kc" = ( /obj/structure/stairs/spawner/south, +/obj/structure/railing{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/surface/station/medical/hallway/bmt) "Kd" = ( @@ -19063,6 +19066,9 @@ /turf/simulated/floor/plating, /area/surface/station/maintenance/incineratormaint) "Ph" = ( +/obj/structure/railing{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/surface/station/medical/hallway/bmt) "Pi" = ( @@ -54513,7 +54519,7 @@ RQ RQ xW xW -RQ +xW RQ RQ RQ @@ -55025,7 +55031,7 @@ RQ RQ RQ RQ -xW +RQ xW xW xW @@ -56327,7 +56333,7 @@ RQ RQ RQ RQ -RQ +Kj Kj Kj Kj diff --git a/maps/cynosure/cynosure-2.dmm b/maps/cynosure/cynosure-2.dmm index 2f3ede3d5c..196b748533 100644 --- a/maps/cynosure/cynosure-2.dmm +++ b/maps/cynosure/cynosure-2.dmm @@ -2038,6 +2038,12 @@ }, /turf/simulated/floor/tiled/techfloor, /area/surface/station/ai/upload_foyer) +"aZV" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/surface/station/engineering/hallway) "aZZ" = ( /obj/machinery/portable_atmospherics/hydroponics, /obj/effect/floor_decal/borderfloorwhite/corner{ @@ -6763,7 +6769,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/window/reinforced, /turf/simulated/floor/tiled, /area/surface/station/engineering/hallway) "dfs" = ( @@ -8585,7 +8590,6 @@ /obj/machinery/camera/network/medbay{ c_tag = "MED - Operating Theatre 2" }, -/obj/machinery/optable, /turf/simulated/floor/tiled/white, /area/surface/station/medical/surgery2) "ecL" = ( @@ -14415,7 +14419,7 @@ /area/surface/station/crew_quarters/heads/hop) "gEG" = ( /obj/machinery/power/smes/buildable{ - RCon_tag = "Solar - Northeast"; + RCon_tag = "Solar - West"; input_attempt = 1; input_level = 300000; output_level = 200000 @@ -21700,6 +21704,10 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, /obj/machinery/power/sensor{ name = "Powernet Sensor - Master Grid"; name_tag = "Master" @@ -22501,6 +22509,9 @@ /area/surface/station/medical/emt_bay) "kxM" = ( /obj/structure/stairs/spawner/east, +/obj/structure/railing{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/surface/station/engineering/hallway) "kyJ" = ( @@ -25968,9 +25979,6 @@ dir = 6 }, /obj/effect/floor_decal/steeldecal/steel_decals_central7, -/obj/machinery/recharger/wallcharger{ - pixel_x = 32 - }, /obj/structure/table/steel_reinforced, /obj/item/ammo_magazine/s45/practice, /obj/item/ammo_magazine/s45/practice, @@ -25987,6 +25995,12 @@ /obj/item/ammo_magazine/m9mmt/practice, /obj/item/weapon/storage/box/blanks/large, /obj/item/weapon/storage/box/blanks/large, +/obj/machinery/magnetic_controller{ + autolink = 1; + density = 0; + dir = 4; + pixel_x = 30 + }, /turf/simulated/floor/tiled, /area/surface/station/security/range) "maD" = ( @@ -31474,6 +31488,10 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/surface/station/medical/reception) +"otX" = ( +/obj/machinery/optable, +/turf/simulated/floor/tiled/white, +/area/surface/station/medical/surgery2) "oub" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -37570,7 +37588,6 @@ /obj/machinery/camera/network/medbay{ c_tag = "MED - Operating Theatre 1" }, -/obj/machinery/optable, /turf/simulated/floor/tiled/white, /area/surface/station/medical/surgery) "qVW" = ( @@ -39208,6 +39225,10 @@ /obj/random/maintenance/clean, /turf/simulated/floor/plating, /area/surface/station/maintenance/surgery) +"rIW" = ( +/obj/machinery/optable, +/turf/simulated/floor/tiled/white, +/area/surface/station/medical/surgery) "rJl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -42580,6 +42601,10 @@ /obj/machinery/recharger/wallcharger{ pixel_x = 32 }, +/obj/machinery/recharger/wallcharger{ + pixel_x = 32; + pixel_y = -10 + }, /turf/simulated/floor/tiled, /area/surface/station/security/range) "toQ" = ( @@ -48000,7 +48025,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/window/reinforced, /turf/simulated/floor/tiled, /area/surface/station/engineering/hallway) "vNz" = ( @@ -86184,7 +86208,7 @@ dns red kBa kMw -psC +rIW lVJ ykd suW @@ -88754,7 +88778,7 @@ bBP vJx esD dRW -ycR +otX vVA uBt toG @@ -92148,7 +92172,7 @@ ekV eJU rxO dfk -lsu +aZV dlE sUN drL diff --git a/maps/cynosure/cynosure-3.dmm b/maps/cynosure/cynosure-3.dmm index 5dda79c3e9..31e9babc2a 100644 --- a/maps/cynosure/cynosure-3.dmm +++ b/maps/cynosure/cynosure-3.dmm @@ -8770,15 +8770,19 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/surface/station/ai_monitored/storage/eva) "fSH" = ( -/obj/machinery/computer/general_air_control/supermatter_core{ - dir = 8 - }, /obj/effect/floor_decal/borderfloor{ dir = 4 }, /obj/effect/floor_decal/corner/yellow/border{ dir = 4 }, +/obj/machinery/computer/general_air_control/supermatter_core{ + dir = 8; + input_tag = "cooling_in"; + name = "Engine Cooling Control"; + output_tag = "cooling_out"; + sensors = list("engine_sensor" = "Engine Core") + }, /turf/simulated/floor/tiled, /area/surface/station/engineering/reactor_monitoring) "fTe" = ( diff --git a/maps/cynosure/cynosure-4.dmm b/maps/cynosure/cynosure-4.dmm index 0f67278d5c..deece45f47 100644 --- a/maps/cynosure/cynosure-4.dmm +++ b/maps/cynosure/cynosure-4.dmm @@ -1473,7 +1473,11 @@ /obj/effect/floor_decal/techfloor/corner{ dir = 5 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor{ + nitrogen = 100; + oxygen = 0; + temperature = 73 + }, /area/tcommsat/cynosure/chamber) "pq" = ( /obj/structure/cable/yellow, @@ -1572,7 +1576,11 @@ /obj/effect/floor_decal/techfloor/corner{ dir = 6 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor{ + nitrogen = 100; + oxygen = 0; + temperature = 73 + }, /area/tcommsat/cynosure/chamber) "qc" = ( /obj/effect/floor_decal/borderfloor{ @@ -1899,7 +1907,11 @@ /obj/effect/floor_decal/techfloor/corner{ dir = 10 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor{ + nitrogen = 100; + oxygen = 0; + temperature = 73 + }, /area/tcommsat/cynosure/chamber) "ta" = ( /obj/structure/cable{ @@ -2461,13 +2473,21 @@ /obj/effect/floor_decal/techfloor{ dir = 6 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor{ + nitrogen = 100; + oxygen = 0; + temperature = 73 + }, /area/tcommsat/cynosure/chamber) "zJ" = ( /obj/effect/floor_decal/techfloor/corner{ dir = 6 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor{ + nitrogen = 100; + oxygen = 0; + temperature = 73 + }, /area/tcommsat/cynosure/chamber) "zO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/black, @@ -2586,7 +2606,11 @@ /obj/effect/floor_decal/techfloor/corner{ dir = 9 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor{ + nitrogen = 100; + oxygen = 0; + temperature = 73 + }, /area/tcommsat/cynosure/chamber) "BD" = ( /obj/effect/floor_decal/borderfloor{ @@ -2855,7 +2879,11 @@ /obj/effect/floor_decal/techfloor{ dir = 5 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor{ + nitrogen = 100; + oxygen = 0; + temperature = 73 + }, /area/tcommsat/cynosure/chamber) "Eq" = ( /obj/structure/cable{ @@ -3024,7 +3052,11 @@ /obj/effect/floor_decal/techfloor/corner{ dir = 9 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor{ + nitrogen = 100; + oxygen = 0; + temperature = 73 + }, /area/tcommsat/cynosure/chamber) "Gq" = ( /obj/structure/bed/chair/shuttle, @@ -3148,7 +3180,11 @@ /obj/effect/floor_decal/techfloor{ dir = 9 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor{ + nitrogen = 100; + oxygen = 0; + temperature = 73 + }, /area/tcommsat/cynosure/chamber) "Hk" = ( /obj/effect/floor_decal/techfloor, @@ -4212,7 +4248,11 @@ /obj/effect/floor_decal/techfloor/corner{ dir = 10 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor{ + nitrogen = 100; + oxygen = 0; + temperature = 73 + }, /area/tcommsat/cynosure/chamber) "QG" = ( /obj/structure/window/reinforced{ @@ -4733,7 +4773,11 @@ /obj/effect/floor_decal/techfloor/corner{ dir = 5 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor{ + nitrogen = 100; + oxygen = 0; + temperature = 73 + }, /area/tcommsat/cynosure/chamber) "UY" = ( /obj/structure/window/reinforced, @@ -5050,7 +5094,11 @@ /obj/effect/floor_decal/techfloor{ dir = 10 }, -/turf/simulated/floor/tiled/techfloor, +/turf/simulated/floor/tiled/techfloor{ + nitrogen = 100; + oxygen = 0; + temperature = 73 + }, /area/tcommsat/cynosure/chamber) "Yb" = ( /obj/effect/floor_decal/industrial/warning{ diff --git a/maps/cynosure/cynosure-6.dmm b/maps/cynosure/cynosure-6.dmm index c4373278ff..25dbbbb11b 100644 --- a/maps/cynosure/cynosure-6.dmm +++ b/maps/cynosure/cynosure-6.dmm @@ -94,7 +94,7 @@ }, /obj/machinery/access_button{ command = "cycle_interior"; - frequency = 1331; + frequency = 1380; master_tag = "ninja_shuttle"; name = "interior access button"; pixel_x = -25; @@ -530,7 +530,7 @@ /obj/machinery/atmospherics/pipe/manifold4w/visible, /obj/machinery/access_button{ command = "cycle_interior"; - frequency = 1331; + frequency = 1380; master_tag = "merc_shuttle"; name = "interior access button"; pixel_x = 25; @@ -797,7 +797,7 @@ "aTS" = ( /obj/machinery/access_button{ command = "cycle_exterior"; - frequency = 1331; + frequency = 1380; master_tag = "vox_west_control"; req_one_access = list(150) }, @@ -1266,7 +1266,7 @@ opacity = 0 }, /obj/machinery/door/airlock/voidcraft{ - frequency = 1331; + frequency = 1380; id_tag = "merc_shuttle_outer"; name = "Ship External Access"; req_access = list(150) @@ -1785,16 +1785,10 @@ /area/holodeck/source_courtroom) "ccc" = ( /obj/machinery/airlock_sensor{ - frequency = 1331; + frequency = 1380; id_tag = "ninja_shuttle_sensor"; pixel_y = 28 }, -/obj/effect/shuttle_landmark{ - base_area = /area/ninja_dojo/dojo; - base_turf = /turf/snow; - landmark_tag = "ninja_start"; - name = "Dojo Outpost" - }, /turf/simulated/shuttle/floor/voidcraft/dark, /area/ninja_dojo/start) "ccf" = ( @@ -2060,7 +2054,7 @@ /area/syndicate_station) "ctM" = ( /obj/machinery/door/airlock/hatch{ - frequency = 1331; + frequency = 1380; id_tag = "vox_southwest_lock"; req_access = list(150) }, @@ -2296,7 +2290,7 @@ /area/shuttle/supply) "cKC" = ( /obj/machinery/airlock_sensor{ - frequency = 1331; + frequency = 1380; id_tag = "vox_east_sensor"; pixel_x = -25 }, @@ -2793,8 +2787,8 @@ "dqX" = ( /obj/machinery/access_button{ command = "cycle_exterior"; - frequency = 1331; - master_tag = "vox_east_control"; + frequency = 1380; + master_tag = "skipjack_shuttle"; req_access = list(150) }, /turf/simulated/wall/skipjack, @@ -4014,7 +4008,7 @@ /area/ninja_dojo/start) "eOt" = ( /obj/machinery/door/airlock/voidcraft/vertical{ - frequency = 1331; + frequency = 1380; id_tag = "ninja_shuttle_outer"; name = "Ship External Hatch"; req_access = list(150) @@ -4330,8 +4324,8 @@ /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/access_button{ command = "cycle_interior"; - frequency = 1331; - master_tag = "vox_east_control"; + frequency = 1380; + master_tag = "skipjack_shuttle"; pixel_x = 22; req_access = list(150) }, @@ -4347,6 +4341,15 @@ name = "plating" }, /area/skipjack_station) +"fgd" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/shuttle/floor/darkred, +/area/shuttle/syndicate_elite/mothership) "fhd" = ( /obj/structure/table/rack, /obj/item/weapon/gun/projectile/automatic/wt550, @@ -4982,13 +4985,12 @@ /obj/structure/bed/chair{ dir = 4 }, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1331; +/obj/machinery/embedded_controller/radio/simple_docking_controller{ + frequency = 1380; id_tag = "merc_elite_shuttle"; - pixel_x = -24; - pixel_y = -2; - req_access = list(150); - tag_exterior_door = "merc_elite_shuttle_hatch" + pixel_x = -25; + req_one_access = list(150); + tag_door = "merc_elite_shuttle_hatch" }, /turf/simulated/shuttle/floor/darkred, /area/shuttle/syndicate_elite/mothership) @@ -6942,7 +6944,7 @@ /area/syndicate_station/start) "idR" = ( /obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1331; + frequency = 1380; id_tag = "vox_west_control"; pixel_x = 24; req_access = list(150); @@ -6953,7 +6955,7 @@ }, /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 8; - frequency = 1331; + frequency = 1380; id_tag = "vox_west_vent" }, /obj/machinery/light/small, @@ -8994,7 +8996,7 @@ "kqh" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 4; - frequency = 1331; + frequency = 1380; id_tag = "merc_shuttle_pump" }, /obj/machinery/light/small, @@ -9005,7 +9007,7 @@ /area/skipjack_station/start) "kqS" = ( /obj/machinery/airlock_sensor{ - frequency = 1331; + frequency = 1380; id_tag = "vox_west_sensor"; pixel_x = 25 }, @@ -10894,7 +10896,7 @@ /area/holodeck/source_picnicarea) "mrF" = ( /obj/machinery/door/airlock/hatch{ - frequency = 1331; + frequency = 1380; id_tag = "vox_southeast_lock"; req_access = list(150) }, @@ -11593,6 +11595,9 @@ /obj/structure/bed/chair{ dir = 4 }, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/shuttle/floor/darkred, /area/shuttle/syndicate_elite/mothership) "ngK" = ( @@ -11772,7 +11777,7 @@ /area/centcom/specops) "nsa" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1331; + frequency = 1380; id_tag = "vox_west_vent" }, /turf/simulated/shuttle/plating, @@ -12239,7 +12244,7 @@ dir = 4 }, /obj/machinery/door/airlock/voidcraft/vertical{ - frequency = 1331; + frequency = 1380; id_tag = "ninja_shuttle_inner"; name = "Ship Internal Hatch"; req_access = list(150) @@ -12612,7 +12617,7 @@ /area/syndicate_station/start) "otk" = ( /obj/machinery/door/airlock/hatch{ - frequency = 1331; + frequency = 1380; id_tag = "vox_northeast_lock"; req_access = list(150) }, @@ -13662,7 +13667,7 @@ "pFK" = ( /obj/machinery/access_button{ command = "cycle_interior"; - frequency = 1331; + frequency = 1380; master_tag = "merc_shuttle"; name = "interior access button"; pixel_x = -25; @@ -14790,7 +14795,7 @@ /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/access_button{ command = "cycle_interior"; - frequency = 1331; + frequency = 1380; master_tag = "vox_west_control"; pixel_x = -22; req_one_access = list(150) @@ -15537,7 +15542,7 @@ "rzx" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 8; - frequency = 1331; + frequency = 1380; id_tag = "merc_shuttle_pump" }, /obj/effect/shuttle_landmark{ @@ -15687,7 +15692,7 @@ /area/syndicate_station/start) "rGU" = ( /obj/machinery/door/airlock/voidcraft/vertical{ - frequency = 1331; + frequency = 1380; id_tag = "merc_shuttle_inner"; name = "Ship External Access"; req_access = list(150) @@ -15699,7 +15704,7 @@ /area/syndicate_station/start) "rHT" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1331; + frequency = 1380; id_tag = "vox_east_vent" }, /turf/simulated/shuttle/plating, @@ -15742,7 +15747,7 @@ "rKS" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 8; - frequency = 1331; + frequency = 1380; id_tag = "merc_shuttle_pump" }, /turf/simulated/shuttle/floor/voidcraft/dark, @@ -15848,10 +15853,10 @@ /area/centcom/main_hall) "rOP" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 8 + dir = 4 }, /obj/machinery/door/airlock/voidcraft/vertical{ - frequency = 1331; + frequency = 1380; id_tag = "merc_shuttle_inner"; name = "Ship External Access"; req_access = list(150) @@ -17095,18 +17100,18 @@ "teW" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 4; - frequency = 1331; + frequency = 1380; id_tag = "merc_shuttle_pump" }, /obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1331; + frequency = 1380; id_tag = "merc_shuttle"; pixel_x = 24; pixel_y = -2; req_access = list(150) }, /obj/machinery/airlock_sensor{ - frequency = 1331; + frequency = 1380; id_tag = "merc_shuttle_sensor"; pixel_x = 28; pixel_y = 8 @@ -17224,10 +17229,7 @@ }, /area/skipjack_station) "tnL" = ( -/turf/simulated/shuttle/wall/dark{ - hard_corner = 1; - join_group = "shuttle_ert" - }, +/turf/simulated/shuttle/wall/dark/hard_corner, /area/shuttle/response_ship/start) "tos" = ( /obj/machinery/light{ @@ -20355,7 +20357,7 @@ /area/syndicate_station/start) "wJs" = ( /obj/machinery/door/airlock/hatch{ - frequency = 1331; + frequency = 1380; id_tag = "vox_northwest_lock"; req_access = list(150) }, @@ -20403,12 +20405,12 @@ "wNk" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 4; - frequency = 1331; + frequency = 1380; id_tag = "vox_east_vent" }, /obj/machinery/light/small, /obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1331; + frequency = 1380; id_tag = "skipjack_shuttle"; pixel_x = -24; req_access = list(150); @@ -21809,14 +21811,14 @@ /area/shuttle/escape/centcom) "ymb" = ( /obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1331; + frequency = 1380; id_tag = "ninja_shuttle"; pixel_y = -25; req_access = list(150) }, /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 4; - frequency = 1331; + frequency = 1380; id_tag = "ninja_shuttle_pump" }, /obj/machinery/button/remote/blast_door{ @@ -21824,6 +21826,12 @@ name = "ship lockdown control"; pixel_x = -25 }, +/obj/effect/shuttle_landmark{ + base_area = /area/ninja_dojo/dojo; + base_turf = /turf/snow; + landmark_tag = "ninja_start"; + name = "Dojo Outpost" + }, /turf/simulated/shuttle/floor/voidcraft/dark, /area/ninja_dojo/start) "ymh" = ( @@ -85779,7 +85787,7 @@ dFI eUF eUF fSe -fSe +fgd hht iai iSX diff --git a/maps/cynosure/cynosure-7.dmm b/maps/cynosure/cynosure-7.dmm index a24f457529..2e25f956a1 100644 --- a/maps/cynosure/cynosure-7.dmm +++ b/maps/cynosure/cynosure-7.dmm @@ -1747,7 +1747,7 @@ oR oR oR oR -eL +oR oR oR oR @@ -1988,8 +1988,6 @@ oR oR oR oR -eL -eL oR oR oR @@ -1997,23 +1995,25 @@ oR oR oR oR -eL -eL -oR -oR -eL oR oR oR oR -eL oR oR -eL oR -eL -eL -eL +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR oR oR oR @@ -2236,40 +2236,40 @@ oR oR oR oR -eL oR oR oR oR -eL oR oR oR -eL -oR -eL oR oR oR -eL oR oR oR -eL oR oR oR -eL -eL -eL -oR -eL oR oR -eL -eL -eL -eL +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR oR oR oR @@ -2493,39 +2493,39 @@ oR oR oR oR -eL oR oR -eL oR -eL -eL +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR oR oR eL oR oR oR -eL -eL oR oR oR -eL -oR -oR -eL -eL -oR -Wi -Wi -Wi -Wi -oR -oR -oR -eL -oR oR oR oR @@ -2751,11 +2751,25 @@ oR oR oR oR -eL oR +oR +oR +oR +oR +oR +oR +oR +oR +eL eL oR oR +oR +oR +oR +oR +oR +eL eL oR oR @@ -2766,26 +2780,12 @@ oR oR eL oR -eL -oR -eL -oR oR eL oR eL -Wi -Wi -Wi -Wi -eL -oR eL eL -eL -oR -oR -oR oR oR oR @@ -3008,40 +3008,40 @@ oR oR oR oR +eL +oR +oR +oR oR eL oR -Wi -Wi -Wi +oR oR eL +oR eL oR oR +oR +eL +oR +oR +oR +eL +oR +oR +oR eL eL -Wi -Wi -Wi -eL -eL -oR -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi eL oR eL oR oR eL -oR +eL +eL +eL oR oR oR @@ -3266,42 +3266,42 @@ oR oR oR eL -eL -eL -Wi -Wi -Wi oR -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -oR -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi oR eL oR eL eL +oR +oR +eL +oR +oR +oR eL eL oR +oR +oR eL oR oR +eL +eL +oR +Wi +Wi +Wi +Wi +oR +oR +oR +eL +oR +oR +oR +oR +oR oR oR oR @@ -3523,39 +3523,39 @@ oR oR oR oR +eL +oR +eL oR oR +eL +oR +oR +eL +oR +oR +oR +oR +eL +oR +eL +oR +eL +oR +oR +eL +oR +eL Wi Wi Wi Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Hb -Hb -Wi eL oR eL eL eL -eL -eL -eL -eL oR -eL oR oR oR @@ -3776,43 +3776,43 @@ oR oR oR oR -eL -eL +oR +oR +oR +oR oR eL oR Wi Wi Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Hb -Hb -Wi -Wi -Wi -Wi -Wi -Wi -oR -oR -oR +oR +eL +eL oR oR +eL +eL +Wi +Wi +Wi +eL +eL +oR +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +eL +oR +eL oR oR +eL oR oR oR @@ -4032,47 +4032,47 @@ oR oR oR oR +oR +oR +oR +oR +oR +eL +eL +eL +Wi +Wi +Wi +oR +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +oR +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +oR +eL +oR +eL eL eL eL oR eL oR -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Hb -Hb -Hb -Hb -Wi -Wi -Wi -Wi -Wi -Hb -Hb -Hb -Wi -Wi -Wi -Wi -Wi -Wi -eL -eL -eL -oR -oR -oR -oR -oR -oR -oR oR oR oR @@ -4290,44 +4290,44 @@ oR oR oR oR +oR +oR +oR +oR +oR +oR +oR +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Hb +Hb +Wi eL oR -oR -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Hb -Hb -Hb -Wi -Wi -Hb -Wi -Wi -Wi -Hb -Hb -Hb -Hb -Wi -Wi -Wi -oR -Wi -Wi -Wi -oR +eL +eL +eL +eL +eL eL eL oR -oR -oR -oR -oR +eL oR oR oR @@ -4548,37 +4548,37 @@ oR oR oR oR -oR -eL -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Hb -Wi -Wi -Wi -Hb -Hb -Hb -Wi -Wi -Hb -Hb -Hb -Wi -Wi -Wi -Wi -eL eL eL oR eL -eL +oR +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Hb +Hb +Wi +Wi +Wi +Wi +Wi +Wi +oR oR oR oR @@ -4804,8 +4804,11 @@ oR oR oR oR +eL +eL +eL oR -oR +eL oR Wi Wi @@ -4814,10 +4817,12 @@ Wi Wi Wi Wi -Wi -Wi -Wi Hb +Hb +Hb +Hb +Wi +Wi Wi Wi Wi @@ -4825,7 +4830,7 @@ Hb Hb Hb Wi -Hb +Wi Wi Wi Wi @@ -4833,11 +4838,6 @@ Wi eL eL eL -eL -oR -oR -oR -oR oR oR oR @@ -5060,41 +5060,41 @@ oR oR oR oR -eL oR oR eL -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Hb -Wi -Wi -Hb -Wi -Hb -Hb -Wi -Hb -Hb -Hb -Wi -Wi -Wi -Wi -Wi -eL -eL -eL -eL -eL oR oR +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Hb +Hb +Hb +Wi +Wi +Hb +Wi +Wi +Wi +Hb +Hb +Hb +Hb +Wi +Wi +Wi oR +Wi +Wi +Wi +oR +eL +eL oR oR oR @@ -5317,40 +5317,40 @@ oR oR oR oR -eL -oR -eL oR oR oR -Wi -Wi -Wi -Wi -Hb -Wi -Wi -Wi -Hb -Wi -Hb -Hb -Hb -Hb -Hb -Wi -Hb -Wi -Wi -Wi -oR oR eL +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Hb +Wi +Wi +Wi +Hb +Hb +Hb +Wi +Wi +Hb +Hb +Hb +Wi +Wi +Wi +Wi +eL +eL +eL oR -oR -oR -oR -oR +eL +eL oR oR oR @@ -5574,38 +5574,38 @@ oR oR oR oR -eL oR +oR +oR +oR +oR +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Hb +Wi +Wi +Wi +Hb +Hb +Hb +Wi +Hb +Wi +Wi +Wi +Wi +eL eL eL eL -oR -Wi -Wi -Wi -Wi -Wi -Hb -Hb -Wi -Wi -Hb -Hb -Hb -Hb -Wi -Hb -Hb -Hb -Wi -Wi -Wi -Wi -oR -oR -oR -oR -oR oR oR oR @@ -5830,10 +5830,10 @@ pM oR oR oR -eL +oR oR eL -eL +oR oR eL Wi @@ -5842,30 +5842,30 @@ Wi Wi Wi Wi +Wi +Hb +Wi +Wi +Hb +Wi Hb Hb Wi Hb Hb Hb -Hb Wi Wi Wi -Hb Wi Wi -oR -oR -Wi -oR -oR -oR -oR -oR +eL +eL +eL +eL eL oR -eL +oR oR oR oR @@ -6092,15 +6092,19 @@ oR eL oR eL -eL +oR +oR oR Wi Wi Wi Wi +Hb +Wi +Wi Wi Hb -Hb +Wi Hb Hb Hb @@ -6108,21 +6112,17 @@ Hb Hb Wi Hb -Hb Wi Wi Wi -Wi -Wi -oR -oR oR oR eL -eL oR oR -eL +oR +oR +oR oR oR oR @@ -6344,16 +6344,14 @@ pM oR oR oR -eL +oR oR eL oR eL eL -Wi -Wi -Wi -Wi +eL +oR Wi Wi Wi @@ -6361,10 +6359,15 @@ Wi Wi Hb Hb +Wi +Wi +Hb +Hb Hb Hb Wi -Wi +Hb +Hb Hb Wi Wi @@ -6372,10 +6375,7 @@ Wi Wi oR oR -eL -eL -eL -eL +oR oR oR oR @@ -6602,42 +6602,42 @@ oR oR oR oR -oR eL oR eL eL oR -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Hb -Hb -uP -Hb -Hb -Wi -Hb -Hb -Wi -Wi -Wi -Wi eL +Wi +Wi +Wi +Wi +Wi +Wi +Hb +Hb +Wi +Hb +Hb +Hb +Hb +Wi +Wi +Wi +Hb +Wi +Wi +oR +oR +Wi +oR +oR +oR oR oR eL oR -oR -oR -oR -oR -oR -oR +eL oR oR oR @@ -6861,19 +6861,22 @@ oR oR oR oR +eL oR eL eL +oR Wi Wi Wi Wi Wi Hb -Wi -Wi Hb -Wi +Hb +Hb +Hb +Hb Hb Wi Hb @@ -6883,14 +6886,12 @@ Wi Wi Wi Wi -Wi -eL -oR oR oR oR oR eL +eL oR oR eL @@ -6912,7 +6913,6 @@ oR oR oR oR -oR FR oR oR @@ -7116,9 +7116,10 @@ oR oR oR oR -oR +eL oR eL +oR eL eL Wi @@ -7127,27 +7128,26 @@ Wi Wi Wi Wi +Wi +Wi +Wi +Hb Hb Hb Hb Wi -Hb -Hb Wi Hb -Hb Wi Wi Wi Wi oR +oR +eL eL -oR eL -oR eL -oR -oR oR oR oR @@ -7376,6 +7376,7 @@ oR oR oR eL +oR eL eL oR @@ -7383,26 +7384,23 @@ Wi Wi Wi Wi -eL Wi Wi Wi Hb -Wi +Hb +uP +Hb Hb Wi Hb +Hb Wi Wi Wi Wi -Wi -eL -eL eL oR -eL -eL oR eL oR @@ -7427,6 +7425,8 @@ oR oR oR oR +oR +oR FR oR oR @@ -7632,15 +7632,21 @@ oR oR oR oR -eL oR oR -Wi -Wi -Wi -Wi -Wi eL +eL +Wi +Wi +Wi +Wi +Wi +Hb +Wi +Wi +Hb +Wi +Hb Wi Hb Hb @@ -7650,21 +7656,15 @@ Wi Wi Wi Wi -Wi -Wi -Wi -Wi -eL -eL -eL -eL -eL eL oR oR oR oR +oR eL +oR +oR eL oR oR @@ -7890,34 +7890,34 @@ oR oR oR oR +eL +eL +eL +Wi +Wi +Wi +Wi +Wi +Wi +Hb +Hb +Hb +Wi +Hb +Hb +Wi +Hb +Hb +Wi +Wi +Wi +Wi oR eL -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -eL -eL -eL -eL -eL +oR eL oR +eL oR oR oR @@ -8147,40 +8147,40 @@ oR oR oR oR -oR -eL -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -Wi -oR eL eL eL oR +Wi +Wi +Wi +Wi +eL +Wi +Wi +Wi +Hb +Wi +Hb +Wi +Hb +Wi +Wi +Wi +Wi +Wi +eL +eL +eL oR +eL +eL oR eL oR oR oR oR -eL -oR -oR oR oR oR @@ -8405,11 +8405,17 @@ oR oR oR eL +oR +oR +Wi +Wi +Wi +Wi +Wi eL Wi -Wi -Wi -oR +Hb +Hb Wi Wi Wi @@ -8420,18 +8426,11 @@ Wi Wi Wi Wi -Wi -oR -Wi eL eL eL -oR -oR eL -oR -oR -oR +eL eL oR oR @@ -8455,6 +8454,7 @@ oR oR oR oR +oR FR oR oR @@ -8658,39 +8658,39 @@ oR oR oR oR -eL -oR -eL -eL -eL -Wi -Wi -Wi -Wi -Wi -Wi -Wi -oR -oR -Wi -Wi -Wi -Wi -Wi -Wi -eL -oR -eL -oR -eL -eL -eL -eL oR oR oR oR oR +eL +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +eL +eL +eL +eL +eL +eL +oR +oR oR oR oR @@ -8917,7 +8917,8 @@ oR oR oR oR -eL +oR +oR oR eL Wi @@ -8926,33 +8927,32 @@ Wi Wi Wi Wi -oR -eL -eL -oR +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi +Wi Wi Wi oR -Wi -Wi eL eL eL -eL -oR -eL -eL -oR -oR -eL -eL oR oR oR +eL oR oR oR oR +eL +oR +oR oR oR oR @@ -9171,46 +9171,46 @@ pM pM oR oR -eL +oR oR oR oR oR eL +eL +Wi +Wi +Wi +oR +Wi +Wi +Wi +Wi +Wi Wi Wi Wi Wi Wi Wi -oR -eL -eL -oR oR Wi eL -oR -eL -oR -eL -oR eL eL oR +oR eL oR +oR +oR eL oR oR oR oR -oR -oR -oR -oR -oR -oR +eL +eL oR oR oR @@ -9430,34 +9430,34 @@ oR oR oR oR -oR -oR -eL -eL eL oR eL -oR +eL +eL +Wi +Wi +Wi +Wi +Wi Wi Wi oR -eL oR -oR -eL -eL +Wi +Wi +Wi +Wi +Wi +Wi eL oR eL oR eL -oR eL eL eL -eL -oR -oR oR oR oR @@ -9687,37 +9687,37 @@ oR oR oR oR +oR +oR +eL +oR +eL +Wi +Wi +Wi +Wi +Wi +Wi +oR eL eL -eL -eL -eL +oR +Wi +Wi +oR +Wi +Wi eL eL eL eL oR eL -oR -eL -eL -oR -oR -oR eL oR oR eL -oR -oR -oR eL -eL -oR -oR -eL -oR -oR oR oR oR @@ -9943,36 +9943,36 @@ pM oR oR oR +eL +oR oR oR oR eL -eL -eL -eL -eL +Wi +Wi +Wi +Wi +Wi +Wi oR eL eL -eL oR oR +Wi +eL +oR +eL oR eL oR eL eL oR -oR -oR -oR -oR -oR -oR -oR -oR eL oR +eL oR oR oR @@ -10203,31 +10203,31 @@ oR oR oR oR -eL -eL -eL -eL -eL +oR eL eL eL oR -oR -oR -oR -oR -oR -oR -oR -eL eL oR -oR +Wi +Wi oR eL oR oR +eL +eL +eL oR +eL +oR +eL +oR +eL +eL +eL +eL oR oR oR @@ -10458,36 +10458,36 @@ oR oR oR oR -eL -oR oR eL eL -oR +eL +eL +eL +eL +eL eL eL oR eL oR -oR -oR -oR -oR -oR -oR -oR eL eL +oR +oR +oR eL oR oR eL oR oR +oR +eL eL oR oR -oR +eL oR oR oR @@ -10714,7 +10714,20 @@ oR oR oR oR +oR +oR +oR +oR eL +eL +eL +eL +eL +oR +eL +eL +eL +oR oR oR eL @@ -10724,26 +10737,13 @@ eL oR oR oR -eL +oR +oR oR oR oR oR eL -eL -oR -eL -oR -oR -oR -oR -oR -oR -oR -oR -oR -oR -oR oR oR oR @@ -10975,18 +10975,13 @@ oR oR oR oR -oR -oR eL -oR -oR -oR -oR -oR eL -oR -oR -oR +eL +eL +eL +eL +eL eL oR oR @@ -10996,9 +10991,14 @@ oR oR oR oR +eL +eL oR oR oR +eL +oR +oR oR oR oR @@ -11229,14 +11229,18 @@ oR oR oR oR -eL +oR eL oR oR +eL +eL oR eL eL oR +eL +oR oR oR oR @@ -11244,19 +11248,15 @@ oR oR oR oR -oR -oR -oR -oR -oR -oR +eL +eL +eL oR oR eL oR oR -oR -oR +eL oR oR oR @@ -11486,6 +11486,8 @@ oR oR oR oR +eL +oR oR eL oR @@ -11494,17 +11496,15 @@ eL oR oR oR -oR eL oR oR oR oR +eL +eL oR -oR -oR -oR -oR +eL oR oR oR @@ -11749,26 +11749,16 @@ oR oR oR oR -oR -oR -oR -oR -oR -oR -oR -oR -oR -oR -oR -oR -oR -oR +eL oR oR oR oR oR eL +oR +oR +oR eL oR oR @@ -11796,6 +11786,16 @@ oR oR oR oR +oR +oR +oR +oR +oR +oR +oR +oR +oR +oR FR oR oR @@ -12001,11 +12001,12 @@ oR oR oR oR +eL +eL oR oR oR -oR -oR +eL eL oR oR @@ -12023,8 +12024,7 @@ oR oR oR oR -oR -oR +eL oR oR oR @@ -12259,15 +12259,15 @@ oR oR oR oR +eL +oR +eL +eL oR oR oR oR -oR -oR -oR -oR -oR +eL oR oR oR @@ -12540,8 +12540,8 @@ oR oR oR oR -oR -oR +eL +eL oR oR oR @@ -12778,7 +12778,7 @@ oR oR oR oR -oR +eL oR oR oR diff --git a/maps/cynosure/overmap/sectors.dm b/maps/cynosure/overmap/sectors.dm new file mode 100644 index 0000000000..968a30544c --- /dev/null +++ b/maps/cynosure/overmap/sectors.dm @@ -0,0 +1,50 @@ +// Overmap object for Sif, hanging in the void of space +/obj/effect/overmap/visitable/planet/Sif + name = "Sif" + desc = "A cold, Earth-like planet. Cynosure Station is located here." + map_z = list( + Z_LEVEL_STATION_ONE, + Z_LEVEL_STATION_TWO, + Z_LEVEL_STATION_THREE, + Z_LEVEL_SURFACE_WILD + ) + base = 1 + in_space = 0 + start_x = 10 + start_y = 10 + skybox_offset_x = 128 + skybox_offset_y = 128 + surface_color = "#2D545B" + mountain_color = "#735555" + ice_color = "FFFFFF" + icecaps = "icecaps" + initial_generic_waypoints = list( + "nav_pad3_cynosure", //Northwest Pad 3, + "nav_pad4_cynosure" //Northwest Pad 4 + ) + + +/obj/effect/overmap/visitable/planet/Sif/Initialize() + atmosphere = new(CELL_VOLUME) + atmosphere.adjust_gas_temp("oxygen", MOLES_O2STANDARD, 273) + atmosphere.adjust_gas_temp("nitrogen", MOLES_N2STANDARD, 273) + + . = ..() + + docking_codes = null + +/obj/effect/overmap/visitable/planet/Sif/get_skybox_representation() + var/image/tmp = ..() + tmp.pixel_x = skybox_offset_x + tmp.pixel_y = skybox_offset_y + return tmp +/obj/effect/overmap/visitable/telecomm_sat + name = "Telecommunications Satellite" + icon_state = "object" + initial_generic_waypoints = list( + "nav_telecomm_dockarm" //Tcomm sat docking + ) + in_space = 1 + start_x = 10 + start_y = 10 + map_z = list(Z_LEVEL_TCOMM, Z_LEVEL_EMPTY_SPACE) From 34b26a9051d3a8381d5d3bf6078b45fd541ea0b0 Mon Sep 17 00:00:00 2001 From: PrismaticGynoid Date: Sun, 17 Oct 2021 15:20:15 -0700 Subject: [PATCH 07/26] Fix paper --- code/modules/paperwork/paper.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index a86707d841..9e78f7e942 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -109,9 +109,9 @@ /obj/item/weapon/paper/Initialize(mapload, var/text, var/title) . = ..() - if(istext(text)) - name = title if(istext(title)) + name = title + if(istext(text)) info = text if(mapload) // Jank, but we do this to prevent maploaded papers from somehow stacking across rounds if re-added to the board by a player. From 81e8f7b80bcad2661a7397e958889f4857dc675e Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Wed, 27 Oct 2021 21:23:43 -0400 Subject: [PATCH 08/26] Fix unreachable --- code/modules/overmap/ships/landable.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/overmap/ships/landable.dm b/code/modules/overmap/ships/landable.dm index ed3e29cd8c..a76a39b60e 100644 --- a/code/modules/overmap/ships/landable.dm +++ b/code/modules/overmap/ships/landable.dm @@ -203,7 +203,6 @@ return "Docked with \the [location.name]. Use secondary thrust to get clear before activating primary engines." else return "Landed on \the [location.name]. Use secondary thrust to get clear before activating primary engines." - return "Docked with an unknown object." if(SHIP_STATUS_TRANSIT) return "Maneuvering under secondary thrust." if(SHIP_STATUS_OVERMAP) From 04464c1664641c1a4f0ceaf9b114f2f25813ef2d Mon Sep 17 00:00:00 2001 From: MistakeNot4892 Date: Sun, 10 Oct 2021 19:46:32 +1100 Subject: [PATCH 09/26] Minor bodytemp warning refactor. --- code/_onclick/hud/alert.dm | 10 +++ code/modules/mob/living/carbon/human/life.dm | 77 +++++++++++------- .../carbon/human/species/species_getters.dm | 17 ++-- code/modules/mob/living/silicon/robot/life.dm | 8 +- code/modules/mob/living/simple_mob/life.dm | 4 +- icons/mob/screen_alert.dmi | Bin 111982 -> 112139 bytes 6 files changed, 72 insertions(+), 44 deletions(-) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index c4edacd933..6cb86b152f 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -191,6 +191,11 @@ The box in your backpack has an oxygen tank and gas mask in it." desc = "Your battery is about to die! Charge it ASAP!" icon_state = "c_starving" +/obj/screen/alert/warm + name = "Too Warm" + desc = "You're uncomfortably warm. Take off some clothes or tweak the thermostat a few degrees cooler." + icon_state = "mildhot" + /obj/screen/alert/hot name = "Too Hot" desc = "You're flaming hot! Get somewhere cooler and take off any insulating clothing like a fire suit." @@ -199,6 +204,11 @@ The box in your backpack has an oxygen tank and gas mask in it." /obj/screen/alert/hot/robot desc = "The air around you is too hot for a humanoid. Be careful to avoid exposing them to this enviroment." +/obj/screen/alert/chilly + name = "Too Chilly" + desc = "You're uncomfortably cold. Rug up or tweak the thermostat a few degrees higher." + icon_state = "mildcold" + /obj/screen/alert/cold name = "Too Cold" desc = "You're freezing cold! Get somewhere warmer and take off any insulating clothing like a space suit." diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 91a30f0b42..9d3b6753ac 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -21,6 +21,16 @@ #define COLD_GAS_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when the current breath's temperature passes the 200K point #define COLD_GAS_DAMAGE_LEVEL_3 3 //Amount of damage applied when the current breath's temperature passes the 120K point +#define COLD_ALERT_SEVERITY_LOW 1 // Constants passed to the cold and heat alerts. +#define COLD_ALERT_SEVERITY_MODERATE 2 +#define COLD_ALERT_SEVERITY_MAX 3 +#define ENVIRONMENT_COMFORT_MARKER_COLD 1 + +#define HOT_ALERT_SEVERITY_LOW 1 +#define HOT_ALERT_SEVERITY_MODERATE 2 +#define HOT_ALERT_SEVERITY_MAX 3 +#define ENVIRONMENT_COMFORT_MARKER_HOT 2 + #define RADIATION_SPEED_COEFFICIENT 0.1 #define HUMAN_COMBUSTION_TEMP 524 //524k is the sustained combustion temperature of human fat @@ -564,7 +574,7 @@ // Hot air hurts :( - if((breath.temperature < species.breath_cold_level_1 || breath.temperature > species.breath_heat_level_1) && !(COLD_RESISTANCE in mutations)) + if((breath.temperature <= species.cold_discomfort_level || breath.temperature >= species.heat_discomfort_level) && !(COLD_RESISTANCE in mutations)) if(breath.temperature <= species.breath_cold_level_1) if(prob(20)) @@ -573,27 +583,37 @@ if(prob(20)) to_chat(src, "You feel your face burning and a searing heat in your lungs!") - if(breath.temperature >= species.breath_heat_level_1) - if(breath.temperature < species.breath_heat_level_2) - apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, BP_HEAD, used_weapon = "Excessive Heat") - throw_alert("temp", /obj/screen/alert/hot, 1) - else if(breath.temperature < species.breath_heat_level_3) - apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, BP_HEAD, used_weapon = "Excessive Heat") - throw_alert("temp", /obj/screen/alert/hot, 2) - else + if(breath.temperature >= species.heat_discomfort_level) + + if(breath.temperature >= species.breath_heat_level_3) apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, BP_HEAD, used_weapon = "Excessive Heat") - throw_alert("temp", /obj/screen/alert/hot, 3) - - else if(breath.temperature <= species.breath_cold_level_1) - if(breath.temperature > species.breath_cold_level_2) - apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, BP_HEAD, used_weapon = "Excessive Cold") - throw_alert("temp", /obj/screen/alert/cold, 1) - else if(breath.temperature > species.breath_cold_level_3) - apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, BP_HEAD, used_weapon = "Excessive Cold") - throw_alert("temp", /obj/screen/alert/cold, 2) + throw_alert("temp", /obj/screen/alert/hot, HOT_ALERT_SEVERITY_MAX) + else if(breath.temperature >= species.breath_heat_level_2) + apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, BP_HEAD, used_weapon = "Excessive Heat") + throw_alert("temp", /obj/screen/alert/hot, HOT_ALERT_SEVERITY_MODERATE) + else if(breath.temperature >= species.breath_heat_level_1) + apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, BP_HEAD, used_weapon = "Excessive Heat") + throw_alert("temp", /obj/screen/alert/hot, HOT_ALERT_SEVERITY_LOW) + else if(species.get_environment_discomfort(src, ENVIRONMENT_COMFORT_MARKER_HOT)) + throw_alert("temp", /obj/screen/alert/warm, HOT_ALERT_SEVERITY_LOW) else + clear_alert("temp") + + else if(breath.temperature <= species.cold_discomfort_level) + + if(breath.temperature <= species.breath_cold_level_3) apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, BP_HEAD, used_weapon = "Excessive Cold") - throw_alert("temp", /obj/screen/alert/cold, 3) + throw_alert("temp", /obj/screen/alert/cold, COLD_ALERT_SEVERITY_MAX) + else if(breath.temperature <= species.breath_cold_level_2) + apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, BP_HEAD, used_weapon = "Excessive Cold") + throw_alert("temp", /obj/screen/alert/cold, COLD_ALERT_SEVERITY_LOW) + else if(breath.temperature <= species.breath_cold_level_1) + apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, BP_HEAD, used_weapon = "Excessive Cold") + throw_alert("temp", /obj/screen/alert/cold, COLD_ALERT_SEVERITY_MODERATE) + else if(species.get_environment_discomfort(src, ENVIRONMENT_COMFORT_MARKER_COLD)) + throw_alert("temp", /obj/screen/alert/chilly, COLD_ALERT_SEVERITY_LOW) + else + clear_alert("temp") //breathing in hot/cold air also heats/cools you a bit var/temp_adj = breath.temperature - bodytemperature @@ -605,15 +625,12 @@ var/relative_density = breath.total_moles / (MOLES_CELLSTANDARD * BREATH_PERCENTAGE) temp_adj *= relative_density - if (temp_adj > BODYTEMP_HEATING_MAX) temp_adj = BODYTEMP_HEATING_MAX - if (temp_adj < BODYTEMP_COOLING_MAX) temp_adj = BODYTEMP_COOLING_MAX - //to_world("Breath: [breath.temperature], [src]: [bodytemperature], Adjusting: [temp_adj]") - bodytemperature += temp_adj + if(temp_adj > BODYTEMP_HEATING_MAX) + temp_adj = BODYTEMP_HEATING_MAX + if(temp_adj < BODYTEMP_COOLING_MAX) + temp_adj = BODYTEMP_COOLING_MAX - else if(breath.temperature >= species.heat_discomfort_level) - species.get_environment_discomfort(src,"heat") - else if(breath.temperature <= species.cold_discomfort_level) - species.get_environment_discomfort(src,"cold") + bodytemperature += temp_adj else clear_alert("temp") @@ -690,13 +707,13 @@ if(bodytemperature >= species.heat_level_2) if(bodytemperature >= species.heat_level_3) burn_dam = HEAT_DAMAGE_LEVEL_3 - throw_alert("temp", /obj/screen/alert/hot, 3) + throw_alert("temp", /obj/screen/alert/hot, HOT_ALERT_SEVERITY_MAX) else burn_dam = HEAT_DAMAGE_LEVEL_2 - throw_alert("temp", /obj/screen/alert/hot, 2) + throw_alert("temp", /obj/screen/alert/hot, HOT_ALERT_SEVERITY_MODERATE) else burn_dam = HEAT_DAMAGE_LEVEL_1 - throw_alert("temp", /obj/screen/alert/hot, 1) + throw_alert("temp", /obj/screen/alert/hot, HOT_ALERT_SEVERITY_LOW) take_overall_damage(burn=burn_dam, used_weapon = "High Body Temperature") diff --git a/code/modules/mob/living/carbon/human/species/species_getters.dm b/code/modules/mob/living/carbon/human/species/species_getters.dm index 23c2de457f..bcb9de1f29 100644 --- a/code/modules/mob/living/carbon/human/species/species_getters.dm +++ b/code/modules/mob/living/carbon/human/species/species_getters.dm @@ -79,9 +79,6 @@ /datum/species/proc/get_environment_discomfort(var/mob/living/carbon/human/H, var/msg_type) - if(!prob(10)) - return - /* // Commented out because clothes should not prevent you from feeling cold if your body temperature has already dropped. You can absolutely feel cold through clothing, and feel too warm without clothing. ??? var/covered = 0 // Basic coverage can help. for(var/obj/item/clothing/clothes in H) @@ -92,11 +89,15 @@ break */ - switch(msg_type) - if("cold") - to_chat(H, "[pick(cold_discomfort_strings)]") - if("heat") - to_chat(H, "[pick(heat_discomfort_strings)]") + var/discomfort_message + if(msg_type == ENVIRONMENT_COMFORT_MARKER_COLD && length(cold_discomfort_strings) /*&& !covered*/) + discomfort_message = pick(cold_discomfort_strings) + else if(msg_type == ENVIRONMENT_COMFORT_MARKER_HOT && length(heat_discomfort_strings) /*&& covered*/) + discomfort_message = pick(heat_discomfort_strings) + + if(discomfort_message && prob(5)) + to_chat(H, SPAN_DANGER(discomfort_message)) + return !!discomfort_message /datum/species/proc/get_random_name(var/gender) if(!name_language) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 83bf0a8b1e..3d6ebe9739 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -263,15 +263,15 @@ if(environment) switch(environment.temperature) //310.055 optimal body temp if(400 to INFINITY) - throw_alert("temp", /obj/screen/alert/hot/robot, 2) + throw_alert("temp", /obj/screen/alert/hot/robot, HOT_ALERT_SEVERITY_MODERATE) if(360 to 400) - throw_alert("temp", /obj/screen/alert/hot/robot, 1) + throw_alert("temp", /obj/screen/alert/hot/robot, HOT_ALERT_SEVERITY_LOW) if(260 to 360) clear_alert("temp") if(200 to 260) - throw_alert("temp", /obj/screen/alert/cold/robot, 1) + throw_alert("temp", /obj/screen/alert/cold/robot, COLD_ALERT_SEVERITY_LOW) else - throw_alert("temp", /obj/screen/alert/cold/robot, 2) + throw_alert("temp", /obj/screen/alert/cold/robot, COLD_ALERT_SEVERITY_MODERATE) //Oxygen and fire does nothing yet!! // if (src.oxygen) src.oxygen.icon_state = "oxy[src.oxygen_alert ? 1 : 0]" diff --git a/code/modules/mob/living/simple_mob/life.dm b/code/modules/mob/living/simple_mob/life.dm index 05d7d8a4a3..4ce0ca65d1 100644 --- a/code/modules/mob/living/simple_mob/life.dm +++ b/code/modules/mob/living/simple_mob/life.dm @@ -127,10 +127,10 @@ //Atmos effect if(bodytemperature < minbodytemp) adjustFireLoss(cold_damage_per_tick) - throw_alert("temp", /obj/screen/alert/cold, 3) + throw_alert("temp", /obj/screen/alert/cold, COLD_ALERT_SEVERITY_MAX) else if(bodytemperature > maxbodytemp) adjustFireLoss(heat_damage_per_tick) - throw_alert("temp", /obj/screen/alert/hot, 3) + throw_alert("temp", /obj/screen/alert/hot, HOT_ALERT_SEVERITY_MAX) else clear_alert("temp") diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index f762fe371c7163366ecae7f9e8c72517d6fd7e72..e2abc031b1356ed7eed07eddc29124b484b06298 100644 GIT binary patch delta 34668 zcmZs?WmsE5*ESlY5F84H;#Ra!D8=1ri@UqKyKJmbN-4BJf#OiyU0Mk4?(XicAvx*u zyzlwG>s;qgvi9tm%sp$*UUJXM$pKpQ5n9|UV9rlN$3xoE-Q3OA#lzOw2?X*Y`h8!x*J~tfH{RYc{974;cIGRUJ~~U9^S_tyN0IEagwD4VtEUg!>#vMw(jfL z>TiZyo0beb=5JgczE@BHgdd^qs5A`2v2qMWH^&&eaw$V8)|A&Wk%kAA>9~I;OlJj; zWFwakD*xP8E$?)oEST3gpVWIha|2&~Egm07GsdE>5M?2|-H}xO1!MVGvdlnjzAqAU z%~z3aj5H7EuC%jr4HnJN)!h324*T4rq0l$eKffkh%A_naC1ouKl-e)JZ0Vtu54X-Q zJ3yRB2Hspkz9itK$d9YKMT8IK^^rc8O%1HJNXt`eH;b{h$r+ZwU3!-}#kix9gE6o6 ziLE0r$D*%1*x0!KVEbmcVeSGym}c=8Bj>l-!F#h5=Y~Ir+b_rPuJ=HyX>Tu%K&m5M zOe#hvOfHt~B>R3fK#Q*`K}o*Q8TPyd*go}c#}c}Hv+w_1`DcesP1?G9eNhiraQtK& z?H{R}Z=faP#>OojFHst&qGVW`ymPb3VWZfBkCbv5uy%8-_#bW+E8q!)&e(T2%% z5^kv*{)jEtZaNzQy9L3X2YyYOeBj|oat|dfTdI*c#Qn0vtLOcm=xA*Oi=o=??s?hn zd|`cj3^EyjnaQI-!NS~}ujZKX{Fwk*Z;%c})9k5w{J69^SFw+REamqPA6Rm^NIebG z2FwfUj;?;nTU3H|>sOerzKsv&$td?*_P+INN^D#(YWbO_&F~N|>Xx`$`pE)9H~VgR zV)+OQ8N2#=Q{3Rk(qb3U7ID**s_4f+s{Jf}s|Vu00Q%^$*xHt&z?{Q*;d$3vMS5aI zr6Ci%FY*)EEL~r+8d(JLou-60YLkiNRD_yQSY)VZPzMq#h4eTSl&&E z3RtKKdwiG3Ao4cet`q8_m0~g1x{{QC7&5}~omtdvv;IX}j`q11KV~!5o@JWNSbb)y zL^;@g!DPVUVLZ@eWOM*;=uX%FCV-^1y!GQ3tx+wy(R_3g#T-o90zZx8-+W}#-Ow1> zlMR2DaqLoCyrA#0K_k}|ig<^3I)goG>WhvCvn5NrJBzW8JFv&j9kH|Zi)@yag6CmK zs0~P{NKPDpfn^JPbu=ZA(SIWU!)^ZSF*82qQ0^lz@(UvU#zO59nozxH=wD1x9Pecne0B;rqWvmxAsi zzB>UKX+y%Nmw_`t?9hOi%+8rI(jY@4?U?M@*kKOPU8m7FIQrum_lHoCk8{;hdPF7o z9dAs_!{6+ccc(6P)oE16fmgq8htfl`&l5?c2VH#|4G8l#-1S|X=p^s*@&X%%<^7qb zG)<~9ee(okXWP9q7VHHI!TJTYr^N*5BnEE^im(_K0rO?*0C_KeL5zO2>6FM?*34?6 z#LR4fm=7*nTV(yg-!`g`z+Gbx?cknRV2KD@&4i1!&y!)uC#ZjT-hcaPRP33m7Xu+12TfTJExA!n|F&usyUIt# z(!~2}>9tilDFG%^IS|JOUXG$Ki4jT0LEVLbMvTbS7)k`g+4z=ootx$f9sp%pCGR_pU){+k z4YD-<@&6qHu%Y0IT!|k<=&5hYO18{Cn2#6UjL}_2^~DR2$ke-DtT5)aSVni>R*ilF z80Q2)AhYL3d?64rz+N3ppW@}Ry#QVEiyV(y$a1uW=@mtg?;!N zqrA`foOqRzK8(dYkz)Ak%2SmY22`8)5OK1$n+v`B$m6oz#qqI!Uh3wqINH1YA_FQl>(n0_8c_Q+0Iw zQ#u*_rK5~BN23V8{e6W;wR&-@-+20?z_vAW0tB9OT|JL_L7CSfnd`7A<>$8yXJN>8ue?nKm8h>6rGg}T@6UmBK2EqUGgu#`!*{XyEHM87f@{x z@+(Xp79)7X_3EQEUV)laaQrr8F8}Z2y3*i_dwEUopzMQcc1fg;4c`?!Dqxf@bt|yW zD8-&d3*L08JBYi_zk+Sy@BPcs?6a&P5C$DB#Crf^bBRXTW48Uaa4d2g>)+3wi_D}0l%6CIX z*OeE^Gzdg%gzbBy+CmmherGvUb;GU*|w$v~zryr3;rhe(#EWdaRTP3BH z;=u~w+;PAPFnIv%ErRX!`tFWRIO^wI0HVY@BY1~^KtkdP#LQiH=WVQrI@(TzaSUg2!^1D9U@hW#@dytbs)Ia1j( zyM`|!tdliFQ#$zxEUbkl@72Ht&L>4cJzpUvrbh&H z-Qlb?{-?^EN#iO#Q+KAJb#Vpl6J?zWzkAtw-NLQYR`{2Y%<;P1dJad!#f`hzU$D(7 z=ePuF4z)$50b1li@?a9Da8~B$O$lVBeTcW*Cmy4XfB)0!K;mojUO_=YpVO9G zu7fI%eYMHet5_BXfzO5`=<5;-_Q8y4j%7M*zQUT2L`6rrJF!R{(gke8Ah)nTl_mZd z=uBgPz$UiUu7b%)m*L;*CHp&r=jg1+Si|cy!!w)=L7%AfKhJAn;ao{(MZTHl2M}9< zDFq~Le_0f*#FR%8L`g~M;o(sUz+t8Si08d%491$^OXvJ!n_$0h>&##irBd!OX>yz= zAA%7gi9Dz3MknoeLy*D$EOmEt=(V@YtT!OqZ~Z0^)4LxVv$?tQA#_W?-B$C@cP~D< zQmrpxE=7>wV0pR@iTb9IzJXOs%$ZVM%0rDh+sUw8qhW`Kf>USYF>wS6hm*Z58oj%^ zoNK6ajJ$f9i*QgX2Hb(TH6O5h%FPXv!GP6?8>}V=J<6`47@j}&w~|lXlI%T+0S;aq zJlFnnJEQGZ=hdtncokxj1qmL4sjd-A;EJ{+=UkTqrpmYJKT$?&%CeJ2gEsBxOjV|Z ziHA6TdmWZQFK^*e1r?E`-}V)1?sPS%Oh1eZc>EdNR=2dC9Ec=s)X(3jvl_PZeLVKQ zTBKG4m+IE&{e)Yi=#yPNRjb}s02QbDE{%VodpCSYHd)`k;nF?c;(_!Co`~_XnEQDN zVdk25sW2Ks==Euc^dtQ6F-qm=vwtS|j|Sd*ugv%sFAjYnZ`I{ZOEXg{VrP7Nqc@JC z)TVN8q&vdT>5jB8qetk+4s%OxpSAiw;e_XB^NhC_BkcXHNtAxAtAY2|40&vdKM6zp!COC;Bj8$6o@4G{?=|XmVD7PsNDNee zJa{3(mB^Gxvo@bUQ|AtMC)1H~81|j}X>*+f-V)qykFp`c!XLRx4J8DeMc)7E?8Yz@ zNmEL86j^rIKX;qk=nAD_22hKqk#2Ouq5i7=w*=LK=bn+w1J`2#S<&!^74J%))PCXf;><_&H8~D}m;=qOe*3QGCx@cVm8zgUauHRz<@2BkS ze&%CZz7QSnl#B*gJY~aCRG>itsL4JRF(NK1ke{#4zEX2Cya+kShRom&rqbLsAt+avjl%U^{Ya=Tj7(tZR`WaC5rxT9=8 z`*9K)AY2@&QW08H5UqafrImmYpy-d`YpCO3VyjlGFsvMe=V8JS%1*lHVUr)vOSuoU zeMHsg8rvUJU^;fGb@JQ}o)6^}*5NrB==OMp{}wapt*yhmcb^}ST>5*c2b(y0$_no{ z$mX4eBt`Dp)=->hOZ&ejedl%Lx{1v!lhO{j)~af+>hh4?RbyG1>=Rqz3leKBW)E5| zB;$nzY*1%>6BAdq#{%&!C;c5zm`xf1obq$bFzf0f(E>zOTN)n?0&&+Tjy3|YL(M67IPelEUW$cBtyh4qY)s5q(_Gu zi3Rb&d1e!ZKZFYPI7`2FK8(*G$HD)`6CA4ve+lxuqm0wT`z00xe=7`|8L$5C3GW?6D`tM(g;6q4|x!x=^Hnp`I@ANNIS*`s{>33QDubDY^ zwM3`3TbVB%8SR~?8lqG`Y}^A~U<*#T4`rcq*DrtEla4Lgu!@!llxyIhT4s;^$bKg5Jg8^X8Cz?lOHt7Q%Ku0ETR5=Y<@oV$jg6W`%|Jwy*pE24mphDc(m7Fbk^lfg_p2Y{JY48Flv`z z-d_${6kpniH7XY<<}R`JUpy-;ei6I;B?e58UF|q)RC*7ngZK--xaMir2aS)CW6FQr|>#_qY&(HX9gRG-1tlzN2Tl2_`c%Pd0bH`&wE|vj`b>b z3(bC&e4y@mos(x?n(IJ82yAS!A&O=Q4RyAxJVEvu;2Co>F=~m`w%HDVKvLTao(|VP zM0k3p>l8X&7jt^hn((N@K05lL^sCD}>=@ASys1OM8kWu@M6#L`O9#8W(rY-8%vWOX z*>vssc71hK?X>(!Dm1J7whMlS3YW)9*9lMEoCYX9qJ)MKa2Vq9@%q0JsQzkHLTL{^ zT7M(m6^X(J+#lu!oQeTmSjukD$SM$s2J}H%LPJziy&>_rGP%=2zo!8I-%}|z83t(w zq`w0MDv(GOrF@f%k1og#RB=fjCG49eg6efxxYtI%u?p{sM>LK@rLOsY;0o@c7(=TT z7J%$4xRUarmi7RLbn57pB=tl6c`tA2fN;3z0t~tS<>*a9VM2?zb(%m(AO|lVKNTLN z>q%J)Pl39E!`S`9M^JvQ&mF@Fx6M5*C<` z;!&U=feG)^WEALKc1ZwAr}jUQud2J5nNA zZ_A&<{|F96QVG)`5(+W-{A=02Qqa8(Pt#d6wvUi#5TD`13|XRG=x6kK1Dv{Gh(GG0 z|MmVbN#a4Ahq&Ah)`WIoVY09}+)$Ve4<`x>p) zXYbg5^VGm?_`P9#N%LvRG6(WRU7eu+N^di~GD4zD%8B_5#pZ+ziV?)w{ojk@m#y$Z z8PA3l%!Xy&>e0@=a?`AhSjh8RQQu|-?8T#|WwPy(`sGjCKxj&|4menXXze-(9F zS57}%@p_&8sAw-gf6qOQVrcts7WE&q?tRbSi49$LO1Uc;e$8FD@6I#H%b%AB#Q6Ci z>^~P8>H?gYi%UzNYicH50GWP~9LANeP86uIZ(Gi9=N>CotG<&18IZ7nfowridGxa< z2-*hbZEV@z>$^>?r^nbhRZwi5n9VFX4!jnW%=Y}Nw%{4c-Qts`Z60~?L49_(mEpEj8c*7SMBYgbp&(0xwnGWU2`U zug;+t41E^*uCjONx4#l#C2WxV7NG}7`S_VKR&Yx2s{3dQcH6PHVbZtlxCC6Nkxw>e z@ad|bRL@gQj*m_^L>Y~XUdKws+epNxONIP+o`31Bzg!KZJk_b0D3hbDJ*@0Wu!BOl zFa}DlBm}Ijw>ein&sX_Ag-S7{FRzlQWgxJvV_>;8f6<1v9P`{llqBE)8TWKmer%VX zZ>}rE(D~9-TSU~EFE5_a#q3Oojg3Dl{rL2qHS81A*O%mr`o&%qJH>Ah(}%U781%a*bi@UUUek_qx# z_ydbGa=!EMP#(r^y|xhISjHMr_MCXM5Vba#B^82CwA@#1zN31x)i;C7rAsJa1Vsm( zX}9i0!F>}d@k&Qq6z+ZwR<6K4pFeW~UZFL3aL?(qWn@r^`rmgOxL-F+Hm~40J$}G; z+6Ve@6lZ#w z$?@La{xkuzgOji2R;b(;7r$^j>Bngmp z4BpRI&htRBoI*>EIy}I<@>+ATo8BcqZA2PdnJsM$yPtkGRm!}kU%Jg??QCIwjf3j< zPUuAs^Z<9HVx}6(eZN$b8!ulT;+&q<0`<|8o-w zEmE&~&xunf|B$+1S*W4%uJ$rnS5!o++vfM7SIaQMS$Ef?ACS-ML&WyEEmCe)>yLSe z|GDhp1h|QyOV%gbNi=Gei~-2}31IS(Q!=)*KQcrspk7P(y8-bV1KFhE_8;5sRZTAz z76+=(7WpfmKKSXAt7^V5E<}%H4_-zy6mj%Pd^R=A|Nd#^c*w!Ytf4GEJ|F(FXv=ly zykJ6A|GmU-EC_{et(%`wUYB0sarmNdlf8$vjIQrVlbT?y9ufh#@_yd>-3ee^e}~P= zYIT0l2`3l2iLY_CLa1`6;>2WNp1i1N{=@vnyN5aqE6H<^C>$*Wcg-}C9I$+~B3G5w^ARXX;U8O!Q8v7x^ntH(Z)|G5P8gI-Z{%t`XwucjGF(5C0kp0HF z6)uYIR?t%)mN!}phdn*A0L&?ri&hI_lV5I!PLHf&S&M3dl~r9Mh36QD7&lmVmaxRa zI=AU0u^HHeq>IOkPLG zW{2dpXmRGNV)#z(23-e>K+Dm?b|&BHBkjIR@boVpI1Zi`h9mw>0U&VvE-*LS-p;G% z2JxY$uix9s2g^uoUn{{9yqm+kJDCimZ2IOfos)h)O&Q>Ak2IY~Sz3Ow%4qdaP=TbG z6;(+ddl}r(My&}|{2Y5zUEKAJJ?a?P_eyyCaD+cKxgd$hPGLKj$vtcz0=i#p=&DcA z5QG_3BvJm8sR4#W9U`yr&LeG<@X}D^N9lnb4%3UHXFmR6sCl1Of=QeYP08>8aJY&L zICc07*#-TlE-O5g7LVu@9X1A{MXZ#ued{0gboE)G5GjVUEQyA<0d?)^25o)Cw$b=rch- zO@QQ?tRzVyVFs#%qAU;HeaA~v+t=2wK&U=V$EW6cLRS}r%3q7&I;AkqpCBqc7$Znd zBI?s>Tw?J7SByLT4R!W62Ds2E#lywNu=`bi{#fm9+VEwi-z5~J#RY{vbcQ2T4#!^7 zobMa*NcYnsgj6Dp^)P&el6O>6$f`E?S%A$@88Oq3PE_i`v!?E!D#KCwDAAd({o>r0 zbfUwxVx6^B=md1+JLwy-@_*P)=A(E2;wiC&2IZHhD`i*QC&iQj_j9nP?d=i<3Z=nS zRFj_wTF(3#XcE463ut?oc!Svp_?UvA28@}tp_MW@e)M-8qNS#L^W>o_uTAF_fw_}c z6slmk4x*+PJ9EovDr(;bZFimj+`1ZsM9(Xcs}EpR4zWo#GpsLxi*s`L9p;#@_IQAY zc{N6?z)7(`u$_wFBlbx5jVPv@*LS?mD-L_M53$bhunh1gJ5kZhcq%#C_=4d)p|NQC zt+w4Ov${nVQLY!{Mx|O&#o#mvAWBZN>NXV85ak63;TRGeKt(?aE9Jk~F-bQHclJZ| z){$^!iNn&Neg5Pg16#v{=N} zxRh!kMp4Q*DlbRq%`osK*7o|JY06X~5hNO*5|&|J8pQYapW|a+b7dDM04bu+A`K;6 z=V|eNvtx@!*K=M-x1of5rk0^hO8=vna==6wtUAolL?;rur3Z{Oh3aXecaWPXMMbm3 zFHhA|=L>B-v&Q{cfww^E0eqmocVAM$^`eFRb+Xdu z!vRt;6JO`Bj&BQlX8CA#tAD-|vZ4jaY6sM5|6`j^72)TH@I5T$=mGauW_ibMwp7j+ z6_X#FO47^!@-7)ZyLyoN%lSmjFGLp}>ZRcyOeZ{~HVEGJo}9Cl0aO=!YJ91c7NxC} zSgq7jDDx#7--nn*Ewb0LM7hxtY55L5tu zr{Ag=8;{=Ld7XtV265@tzg>16tgzuX7_CniYTW*FoBz~Q>Ji#MW8kxIW4Z08YvjdW zZ@kKxGOTIkETo=WPz8mhB6w?Bj1RT`pz4*oUFv+7slzh%Q#$&HF`0x-h z7v$@kLQ%#M0vlC6D`<6V;ik2*-^Hd2ZR|*#Q&?L zz4t5Doc?MzOd4PI2WJhq*5(9u(=ukP6+yUCc`ZFuua{D6~B_d*E9OPM?tGv zx-8BmrQA=7@LZ`}aI-@n>KcBXYv;7var0w1ZhF^~`LY;g_paru`++IXo>VTr^ad97 zqHA=0_6p=5JqRgb5674Gr$ET;nJ^M~A% zO!gRS_&{2sv$iiEhrBSXTjkkBi97-1t_ic(5WOJR1>Z!QYWNK9$bR&VksW zDT76bEi$2MIWo`?BG)?rth*-aUMlN8Yew)POO?f90a`<|_0v2H=Qt%_b88fAN}pnW zcUo;ml;pvH30iI{=%lJ}TqM@+9c16;?(u5R83ug@Vl!_2I_`iql?l6Ubt=j2RRAW% zQYY56x0j*D^EX^Sa3Kibmfd13pnoKb@#h(%y)h&l;i%qfr0l92<@|{b174>_y^&uA zvexBcy77Z^jq7&0ddWg$H*evWT5rsDraq)K0B+-j4|t3s9Nx~*2nyTQE6DXp%xc`j zBevBv;w@tF;O;!#^oOK)>Bg}->ZO}_?1{s{3bQi@9yMITF?GP-16;l}*WJp+lg)4b zt^H1a@M47`n>%sB0DdXhZkd6!e-d8s%^PZj$ZZGfuU-Gf(H}!z{`35nQTScvuRtI& zB5?RuU?g~S=+rxt4*}SzaZ^4Qv*T{BBHzmT=*~ta(%t9Qc8TIpKh{IEQ0f7oOxeUYoDl=$AfC}Uz(v2{uzzr=~>`f6oR@WXx#ec zQS+{`XF)9G3c0mrs$-fjtsM{=hHM>>k7U(MJ%626b4-l~X+e(#1>#ebfNeV|jeo>5 z5}A28Cp5`)ww7}>^qq++|5E9*k>DhSdc1h?!tzCEKc<)=R=*Ri!$YhX+~-cymv1$b zwQL2$>SXW{{cr2V&0o{|-cIL7bj=7@$`=rhP`ic}!uJ$^yzdd^w*+LDq8i^H!sr7} zjhp#0N%2V3bW@yus@XTf8mxLm^OW>Oqa#=5yQzaNxDvHH|9y$Dw-_`AP>njQ@L~## zUG4m#c3T;c5w7tiXJXGtKR@h6v05I6$UmUwbvm25;<{Taa{uM))Kr$QSPxt=oF%%X zVsqYy;?S$gbh9l03k%h*`?Vgzm4QP`ig5E`F-);w`P|3Z!`-ibAy#^-cim7DDs9rs zQCW_$-OUQYHM?+oG@?{->U{6VR$yE@xT zr(MwV>pR7*M6@;gOX}Xv=8EM8Sbiiwx%)A6J*VRhT%L9{rvgkrWc1I^CNI54j*6a6 zVoHYjA^UyPJBQw7?pDe%Pfvu=>T;oi6tl}vq3?%PIIqnp5GFIRjM=5K05F{YBB=mB z-!sk(UxfJeKnq)9!XC`B=X)tLhSJLWV~$*Ra(Z_4bJ8h7clNl(NAx;cPat=0!EO2TM&8>eGa$*O|P z)9*VsL7C&1#k+yOec!)$iiuDYc|tg3;Aa9cv{s3;^6_dPWyFzq^x}z0b|*8&Zqz65 z=vi}fRv04Rz$0!cb`A0b&{qR1gAWF9wMZ<`MgLjcd@YV)_7$De9)wk}aXO!vIv8&D zmRDCEVrnHR%-|5=8v0${;+i|wOLowEwWmCb{)f!m1epsBawlBt?S;&lJtyUEkB3;q z*L3Bt$k(nv=!ZKU8&aQQp?X8G1&h=%j^dykZ(j|9M`_+w!1(i*7dN=yd)ZTgD7V zUxwy6mxv_taT6$!+AI-eO4vGEibS{NcurA|I?o=c8;EaXcU`Uj!0&)DVf4!9q%%x` zx&Lh`X3S{KivNu1=+RU|U7aUs%Zkc1EV(%q)|&%YSxdr+VT78*6^$Vduoz|#PT^K8 z|M(DPG8^C+a%i`ngGr7RK{y7N48j%5jQj$Ox`rgb00R^tqC^3k+&F~ULm2Y7VWjw68c`333du+BKBKFE03_wve%;H#*DsmqKu4;hQ`nr%Gvd#GQ=}0)70FkANbgW zUk3DMzG*od)VeZ#0K%W-v|up^!wS!CJB?n^47QkwCqzpVD#v|k!8;+biyRXv4|RB* z%LCuhc?_Guu$T-y%rnB#HrNplTvZ-FFQ2RTbVdy@BI^%G@(&bMScVi$lSiXoKbaJc z0&EXfPlrd zVE2dwfXlPij(Y%N{w&y*g)lf@0YKyjcF71VDQ-iq^=k$8l`P|Esqdyxv;IZ>DP&0lM^i8V4M$`Va?*_d zlTS2Gy`9Ip(wQx8M#nj9p-!#y)9?ez7BsAnAXYPbcg87QaE{z9_~I*=F)1aWZeD^; z#cAY!`sKB(waEhtALBWEocTU8wF^EEjGtHNw+xH{Ghwkf^Q#Uh(9gD-%VE{--PoP( z_tTHnxb2#$2Nu@%nC9?@gHkD%=|s=!$MLkgX=}XdEFmfki3QPwYTNyRD}uh zNo1Le)eMjL0c$-Un>^f}!#n3A*HCt~2J$|13INmV*svo>{D3(vdM2?2co{ty_1 z$PIep`tU?6_mkPMS+(DALj6m4Plue=$v2JCHP?ui;7_d=B(QVdIM1bMf)CEr z9X>#%glaG)D1!#NUcnTF6v5v@mFix~fhuGosF1K_1fgn3oT-RWNtnU&;aRwlyq~XN z-;X3!B3DCSl{6n=7fVH$^Z+2AUUtX^BHxg7*Cq%4K)x)VHlHM;BKnWKv4(8k`!4*r znh!OhgDy0`+4pW`K6Rz>$5#k9UfgYdc!cvPUyeRUC0w7?N?kK1xc;x~Wf%%?QH5hm zojvz2GKfjJCKR7vV!qx7_uZ^A#)*ff$hLkoQ0-9M$plY>2B`DUuSz*N6xmy zT+V4?2&|awI@WIxTxeRHac?UN#}kAGMBm&Bovh@u_x)lAGj=$Sq`_4CGDH@Z8vcWB zXDMY3P@fW$M_^k`lfr|nC?(J=%@?oeYRkLpM75K5qpAwB&+6Mcn7qO=ouhK|#V1y8QE!b)p?rw4J-4-zwHv%C{Xf%= zz+e!WKa;V9pT-n*Z^XFA;HYcoP-qbT&`*Ts)gBJ<6|_nBpFM2bzcE!-l!ut_rn&oJ zhxY!W67u1^xv~Th41%sIc92pff7`|k$R-LUtI}?59O-41?Jk`v=#$(Ubyy}nrja#K zcs)$j1hO}ZNno#q1m4_&XG%Kf%82H}`z&$8UPfpsrjz*t@Nbm)ko`e_(x$9NZcdEX zCP;K-!F06vK`PJY$m;ChWBg1|yz0-J%bm_py;H>|R=!Hc6@R885mo;b6};o@I8DQB zSsSll1@O$k;pQyJWT!A&6i(}>hlUpKRgvPsY3ee;Um4PFMIn2_gAcbP0s znj2Xo!RB-@4(*ku%^HS$CAUqlrOh4ei(*(A+r(Od_TZPs5l+AB0_+XpAL++JuL|;d4e$nLqZfR2>t85`eaOc0R{T( zOBX>s4;XV-)X#uyX?l@AH`Q~&V78%8w}QUg&2B&0QwLsWgavH87FzEL@R=o#najzf zUC_0fgUvMBOkx&t&Z7KjzMp(S*m$?0yy5l~U*dEe;oDR>S&$d+N1o?-2V?PIlcC9n z&pi~NW?_h#$6UM85)}SVEdiiGIM(<%xaSYVEQb8FpzdD8b5wYQ-yEsj-tMmJH0&;^ zohgVqJicHZejQ-sXUjwqV6RPGIkmSNNpBj37@_G4d-(HCr)G!i0&>Qz{Ujp2+wC&F zDpgtdb>xu);k4x%cgh3DuO3XEUQI@P6*qr+eD@Sf3I7fG)@V1{36Ne4B$qdCd_iJA zR4SNcW`R5|pK^(!xt3-I4}m=>?y$0BE(tMdKv*Qud1X&k6qxa7?{$ono?tWzoP!ln z`HA-Cu7U6catH_! zLk^`0y!#n+y3!J`FK_%KC1S1W3YD88CK`NXa|IN9dSQGL8Y_1O55NS$GL^?o?j9l+ zXzm>Btc4KCQAe)wWYc*7NRTh1qWx?cMc4N9-GmMRz!7`A7g3gydxp};-3+t@IhFc_ ztRSk7)xhnD)4olwf3`bj=cP}F5THgkZ|NS>5zrUo~{M>6T^1} z7zED@RIA?}l`GRZ;f@9M=E8Js{xik@&ag?FgxL5b!ToJ{<`|I65uw=80AS}G2)aQ6 zF?;h1TD^Hxf9Q9Tp0XCd)>cdmWK5%qba6reK ze}+;i4Q%0wL0ur5P7RA^{B283?kPgvZ$Qez=ct!E!-MaQHfBK-M;O1|wvkhcUeJD> z0Z|MY>#8U*RTe);2u%F9WeVaDvI8m7`{p47&gB82N4F6zA`7-u9t_z1zg+;cE8rCF zSVwX51^)pP&yHU(OJs;?#wqND$e9=6sn~CJ#WUEoF9mQ|TWhLpg*oPbrVcp;W2#9?9xe49r0|ZSAc< zfu2^sLK)b!7H!Q0=C|-KT%!jJ2|8?W+9aNsZUeo3zm|MihQwb8$vdr~|L=`vKCat|MJMm~sbKb(AVrpb8EITKuvhT!#)!`8d^{xhndslFnox^Kw+wNyu_rm9B z*;}w>+XaSXB?2Qza%%buc^&JM93v&>8t?Gfg`Y1BSpxf06OKYl4HQ2_QDQ_@Z^17h z*b^qJ5P3l%SLak9<3A`9zQHp@?ny(k#<||x-mfNP5`Y=?(QH-VEQm&vYRfpZOGFIy zkvvp3-Q*kQ9g+d?bS*c`^|5HJ;59*LiU#W)1H#o06#|(5A|)T)SCm1vkN^7}>!JH9 z(3jr+b@;JKosD{W2(f01(cs2GOQ3o-(2rl(lJ!8lgp#9q_(E{0XzXe`rj&All~CtF z5CVQtPqkHji+dZQ79oLSQ}LNvT8^kEB?XiH1=NE5r-)QFhn z1tMU3_m@qL6%ou8{9*f{it3}$Hkwf6%FaV!xHy_$c9u1IS@ga#yw3A>D!jiE&=f0N z&f=C}ZsuKcDG{G8lrCtW8dB9)T5w6exMJM0g%isZaeV%7|4=w zvJ*%7_-dh?Ge`#C3T<-R2Bc3EHP5CVDPo@t5!cWs_47ieU!l2zTl+TA>gyvRp6^ilgSA5xx;n! z>Y+{)=z1mX9Dm95>`SCEV}yh-uYFx##Y$vz4b>iAy9G=TI+cFCrG0Ats*{FF|DF8S ztadK%(G(OBGEX7M)jCtA`|Ihi7B9QZffR-dz`a;iN)BkUWo_`qU~Y6a|`lrk?8cV^wYVGol=hX74o2qz@}w3G6LZDAasB^{sbp_cUzv zJ)O7|_<`o=ILxt;srmF>gfSYOcnhDkFlu}t+~dyD>}A&rZH*{)eUm|AM=`3wpR(Me{9eG=e>R+rHwh^l^nc(zEYQRKDzZjKYIs;S9SI>bJIXD)Et?afa^UO6o< zxs4JSv>it6H!v5t^TV7D^D8y3>2E-xgTqL+llE)Ehr8=bzL&VBdzljdKN8EGj3=yE z=yyG*qlcrY>8zG^<=$)d&#mnT-`{&28CF(YMv?98_c~E|QL&Cb*6(nzxt6HuJmgzM z-)iTY!_3U_>9Zn={B{aRAKAO`B01F<*GV{X*YN?_fmhIndvfeZ&Z|+H|4Z7iV|f3wswvkV4DV!nHmql8^Z2V&j6wP>o$}`7C8K0 zCwPwpv<4ND3~vg%v&IN&KF}&CM|z0~ZTnw3q=4*I7SDf9TJx(5MuWU!_+DZ!NVZpM zek>ZU0QK#CVJ_B45zhO(3Wtq`)r#X9{x4&a+`m8M*=!(bQ({vDrd9c_hi=XyA!}m~ zTwbNx2*%&^f z16S{GXxlnPU=I9d9fc}^rlWz>4{5P6 z!gM+>_}3}PjCSS79K2jJ5)_uu9MFDQqYPqH2a}mlFOn9q1Xv6-%s%~g&6D{su+}&H;-Q8V_yKC^`?rz21-JN2^p*R$`;y$t;r%JH#xa? z=WPFS&dz6vm@-&#Qry4nraEW{ie*A1^)wo1?l@_NPtDQlfmF~&bdT+Uf94tFJii7p zBPGSbL($XsVrhwRj~4A>L!{Z!F^#$+@0CWebW8cd@&tZ^x|>^CBcn(P5TW3fA^?P# zG$x$Tkr(z52#1&l7mN<%k(Jfm;z$Gh)n1ox_ z&b^~S#Dtt%npHtA8)zX`fx)kQ>H?!*Q)Uhr4cQ)v6wCzsl7jYj78f_};P1aEx%-fV z)U9`#(%nP!8F?v&7E189mwLcq-~$i{ro-(dz?X}1YVkp9)BEs}=Pi2w+;#ix4TgK+ zvGd!7Ni9y$xBw9v5(=WbsmayxR|9P_=AXg}^m15+NN8G0${(t2w++nSpn^mzAlyc~ z1?_YMIxSB<5Ty{pk543f0IJZdmkuaoZR=08cp^|>6m|IAvsT^HC=f)N11b%b#J zgQ!*z$I#{SeoJ979F#E0=yfTql1^+XsOOIvMl+>jyJWvRquLvAqcFhe1aH4@CnR`3y5KCcoJ zCqYyGD1s08Zm>r6_D;m3^Eq$_r;B{CvzC7*Xt;Ft^d>fxA53?vm(S=0q3#rF8$*bw z>xTJC zh^J!(7HSE}bmg3rPr1v1@CY>53#*Ybmn3c2u#T6RZw`}RbHB4==mZQ^@5f*A1b%|n zft?G>;WWdA=p^wK%CbSjF@pI!_Xh(-v>1l08nwna&YaGN;6}T!4OOamamwrgo#%Bu zqn0W!XX~j6@~I!u5zw3X_SdT)IU6Y!t6S)6U5d(DI-DGsbK!+Re&`^95&lbg&{LH0 zJ3NFg!s8+P_GQLIh8`R*u|!uLajfh|u9^h)gl|+!b%U*<&e-pVD;E_2KIA916iBJe zC1uHR^7Q5|GtE^kl$BI?NZv%5?Lgx+r-C9Ao;E>k!%&O>P2dj!MwR6@eHIVGERh(I zw^f#$FY0*egvHO1!}Ai`69)I5mk~>?&nH=VhLpJ*n=}^Fx?d{ht{T_zDf`+HWW}eE zVa~E5Pue2o`&#{5`Lf^M>5xF`g>e5CX^>plPJO7KgWxZ{8-S) zX`<1>gryL>eN2Jy|Kc9q}G*E281`FC9oVe5yl{XklcD3>Ru&@DE!DqC*w+(%c73hCXqrWr0JsZA@Ri}gYg`7 zCulrl&yWqzuVWi$O)|QCk$!`$#UVR*;)_d4i-H6kSy>uCK`^srk?Wx1ezFcE7vdzD zyBHQTqB@&|yP{&Q5B4zbU)|OoVviGbXbf)T!mob3 zJX;&wfDKAWbK_2HP35<|TSKJuvSJ!qI=WDM{$$7SNZ@h!^a=VgkHO6xBW(&8ay;8$=?WS z4hTQP>|FtspaLU0ceu4a`z9=*%lo;tUxYTqSJ41zSN+FP> zm}J(>Xp55dh%C@3Nc%V0w!z!TC&gl1hpfaY1UATC_p8!xgt1Xx@~PLg5RQ7tfSeab ze^NG#FW+_mXF#>kI#hmk59|WMmw;228|=X@RU_G+yi(7gSpqC3!Hg4mr6u+l%H4sc z3vqL^f=|5{$O2B^&=dtW!P}wLB;ZXF@+&GZ zWY}k*Z7r115&TWW_i{FIrmjq2u2c7zyaE|M7d&P;mXkCI;#_n@D^uxuQUkmij97{5 z^*Gk91>h?;4OKSQPfEB=LmB`%YSuR=zDS6iZTWUYke$MMDW>l~LUs+r0gDp`hBM*B zu(drGAHzoXl|CQzCK$$QaAdXz^oG3!#78|>i};KWZ@bfI!4@m0;IS${)WeNVTJygk5g(gXr3pWYXL{939Ucvyhiu~N{`*iOCW5L761FL8Jj;7 zDGW{6EQd8@CpX#P!Xy!(rYo)Tp&v-ghX#wvMK5GDa5~mUUIh=O^(-9FR|^64&YdDO z_~Q}M&|Gs{RSia<|1?l_m53{@r4I+rRZn{R2RD>I;daOagdPDbDjc6o{;eGZJ>)Ap zYCbKC!|aPvMx)9f9IOOGwV_g`3~}zOa@lVM#Fe0DZ-zB@6Z7B{INHU&~Zn~}&vrc=UEfUeI<;@YH)VLX0)kC!Bx zOk|K{S4jn#03yI@Iy-}%J@F6kCHLh^uK2QSf_@b=WaM>Ii{mhjWa}F*^MnXg@T>nr zNpg2OzW}8*XC++-R^uPDxAz}kcMrav4sT*Nyg#hs+~y%YeKB|UsxLP97`yDVY&xG} zViq`Oyzc(0>$YXF0?|ZIGeP=^4qm1?=oe2CXEI)uI#UTC|HL8+Cs#2JTOh=eayEZf)}M=C~bH1LWNzLg4@F!&Ae*+J4LjZ&ZdPwYsnnjFJiTEG2?Dxm12Dv3fa2z7A&20&@iB?DeIys|h zl6^&L4A%At1rtIeAI|w?TSTTkNaeZt4MC&!K!n#ddBA!zY;tsOeJd_bAm!-XYjs11 zvK`_8V%wqeb9;;P7eKce<}WrIQp_RA_#23O^Nh|pp^7oq1Mv6uFCM}VfaO;Oy zjSz4MvT%ORnM83G&#NP+68VhmoLjh(fHg*JZUt+ola;*t=hDU(cD@mWg8PSNxY|}m zQ-gHix~j9)S~m$juw5_A?yH^*^mj#`Cr4-&E2^AJ#t_|gyq{)&yN0A0dQ;V1mGBObJ-%2Fp*-?*h38ZBbUnT&e_^0R zxEjLhDE)RST$pO8k(=Yd`$y(vlDi7XTen67;4fhXX^4Zzz7Z+>RT`W4Eccx+gt0KU zXh5|3$fz2&VH!xhBc#^Gzip6*;-c&FCHs6e5&W+m5xk}{Y9__P1FK|6o+?>O;FWYu zkaI*(Vbz|>kI-u$%w$1&nyJPzbtcpH!mBl@P*ViVob?-h+><7 zVx>KVoM#lr%5}g zl5;t7KvUp#Ido&qM4|_@I%|`*HWI=Yt^24<^ z_`_Od+_#2-gDgyqF0Khw6s2>Z|H3iMuw3c-pf)^`8KC^~&HLtj35NhW6{Z3psm zb0@NNa)r_ppUefJbb*Wknn<{K8~m_EfiOQ$ONuNHF;w4m5=SnAPl0CUapo*OX9sev z`|(Oqa)hQc|%lmO%jy--gD zp(p-|2r|-20QMQn1q809@J*fXQa5s|vT$z;&!Z#${9&KHJJ2_z{WwZxAJdM2EK?&C zILjpZa6x@OrTN2g7B%*49qH&Y*MFw)^oOP5qRw^JmP40V@4~tYWB4Ydo6Di$ zP=mFs&mp1G2^4j0a%}v*1?qRPSiPQqmYu30Y%6seA~HANnZ$I18Ur0mLr4n{01$`km9Ruk;vt!kKq&+qB5{1mw8TC?!t6W2Q0mLVXmw-pSR9J*-G z7@+|`IAeA#%~ftt10#xfdvq@?ykrRtjV4G3{UswBaska)r?|o^x7q=m6e=n@eC1>d zWhTMt0+mosOlWahNiR)f&qk2~mAFFRNVYbI_S@e})hep_^JLKjZfP-aagY@RtF2jC z0_@Uk6}o4GF(0rVywJhILH+s0`hW*xHbD7x!Q*nbfj2wcC|-0judt^e;vQM><7U7R zq)xBq)meJqgUQ{fhel9Z@YX1CX#Is&K5Gou7WBlf|B+9+z0z8YG~B<-(>GuMxw}*l zW09h^3cPzsu`^1Wf9Sr@)ibabDTl&~EK8wW2hRpaMQ-fuBsHUTTfEkWa2U{+i)`*vuoWHfVj&%FF6hEL*1rUx?h4iXq+k zItFoOc`fcIz6Y13`y2l?x;SzRgTo{5!#74G(1<*khKv}l)Q(0T8~;2phHe~rf&(=O zUZOFauY`<-dJLzIJ?chiMW`Iu$)_li!gg-_Zk(2lCTkK zXTxqsY&Yd{&iQGnEs=^JFL~e1S=>tU=o-yy)ow9&$1gT+sTQR{NzDnwk?8X!pmn6{ea$I^Z>ktS>kD-tC_rk0iPI zwp|kw@YccPmBusxisw7IP?VWlG+{|LP;=$1Fb;hsul=^a1P)zTK-wkHXKuNNWx=0V>?%) zY@Ie?6Wt5$nP6-%1YdvA8Txs&@N57~FGXDhvQUr_`=%#$enS?T2x%)`vSNS`+#(H) zIT*2WmF*6D06O*Qpx_g1*iVV^RIXWw!SPVj?{#rdp%_xy&)-zz!tTcxrJ58!BnsU_ zCESD82o-=>xh(nKEy2l@2D!U3m9=%O$&hRE;V62|sP!5*JhFg<-9sz8ouhvKovS2} zs~ZGAnW^2NP;o+5u5P!~&#SNLU4yRNFi>3ZGxS)+wYvMGqs)@u_T43ss0!qqKxQk3 z`m{qkZLLP~e98c8*A(X7@pd~mx$~oWU9i_Z2>|K9W;L(t+Y(PgI84=j=P6@!8K>G# zjGO%^@)_KN2!*%{yL#_ivl_?=g@`eRg_i2qF69~3H=R4m@34^`>>sQfZ=wCcIfVAu zxNBY_JaPCs03oLZrl@CZZpQ5PYX|K!g1$--9JJ#s3PQs^#i)i@{5ND%xF3Q=0dQJl zK=c0WmKR*7<*;mk6E_BI(*k>-tpKXO&;Z$LU1F%Xb9^ZA7{s`Q4VN70zUXU z$(kKG*QYTIa4+UGvZQkJFF*fxVFF!w6K&$>ajkXX5jYLJQbaawDdfHRfD^nMOoTfs zRBk2<3d#HP3s!7P4=yYBsZu;#;J~o~6z;u(qJoZ4oO0SNlH{j9B{On~O&Y0m{sq3# z)m+Xu9WkS8gzeH6G|HoY4ZK~V()s+T{)xV|cGD?Pw#oc04M+C0l`MJ;zR3N4@r4q{jEpic6s)xL=GBN0FnktzUJE4~qAQn~@eWs)SyME_PGzvM`*r|}BdGa;{d?nYv8^^K3r z5=8XDRiQiZnHxEsBdDMhlHUI{F-2nMN3i?7DWozAB1sf-9imaK!*|{(n z1mamJ6&g&@aCeG^t51OLH5y5BfyM|ej|oRD&7Bzn^Z``<*h0aqCCpzib3sUDC4nCg zRVa+;1gi0n`AR4pp`V~JDT=Ay7=`W>kH)5Cvv93o)gU!?*m&f>sH_=uMfWnzH80q9xeU@SClq*k9|8pv3fkTy8!j<_!Wib>H)68mq zA|ii~@2>Z5Z2W!zgG=UbU8ByJFio}gUE$oKlROR7nRUF*Zg3dw_Ll~;*?FHU3f?dA zPfk@@zy_BHLjVHJU55Ez1DrkA)h#HppH$g=QMD+EQi4)1bsK_V5dbcSvICz(B$S5g zu*kgE{47Ys;%#UhZ&}i9Qi~R>%V!}eg1utNdHk;zid);B`0?V{8Vw2c(%M>MRG7AD z^4P0mTJ^fl!VLvR;5!G}pLtsC0?sDWsa751#qE^}a{v-}Z6PoQNJp7^=5~g4M|iwd z__21a_=KAPJ#eXga&iRknP(+N_O(xZFkkgE@cH#$FgCoN)H0Af|*O{zTnkI6tC^KXK-G$SvB#0+M|JhD zit}}GbL|Y*C;7%l&ndwK7z^ci!boYk=1I;(%ii+;gx*VK_dbelznO`+xu>t*o2|f` zV`=6>G-qCmA;T0=sXv14UsU$M7S$|006(f`*2B8GVcK~n!>_*aZ07r5UJ-+6P3}!M z=V1M_GJ;$EpOY!-w6;6CaISfNDuI{3s_BuXh$vMxS`j zuToF1qM@1SRg!3N?h-QYEX=1FrfGiG4$!&owAo>x)#ya<`nC0 zi`RUy88ISRj#kqy&gnBg);lVKTbK6vv#bS;SW}-v_YhUXDZWVml_bgq9Pda-Y(HM> zhAYM4z1JEK0P}3o88M1N{2syPG(fW+UnoMmY(+h4MNKU^V((!z;{+JZB-F2;k2Mf# zPn#$igS%Mxe_{|$ecRswyPbnL`*U7Ce)QE?MuXEL-SxWcP`%)^NhuFMh=w4>phr^Y1uP3mYb{!1%x-l;uQwJXrj95*Qk)tarldCa4oD@~pRPut}jY zIx1=fDqL-%aK*8);Q-*wn2RkqpyX4&8RDpAVOO?6qkx`WAi{xPUnh&`A5}bx5pvEL z5uW^+gGfxlX1#9d(_d1E|1@5i!%N2#x#i$%c-Zq^G2fdg!Gfny^NT7{wB{D68B+Of zX%F>0V<}I&Yj3Q+hFjC=%d|lpsX?HQ@I24ZQ0KeE2zUhp0C)wb*Ow*!izPMewwPjx z5Y0cat%1uDK4kIveT&QTS5TlK)T-FXub7YgJW(hB+h2U;uO3Li=lrF9m(A_q<9%-M zS+}=Y0pupqK|v@;i{hAidnZ$WGgFAnXII2n;UlG4NOuX)5P#+)Y3Q>irHPns#)cx} zOG#AX#3TWr_&99S#~LTQ+IBqx7gP%5(~)?W8ux;c2SrFt&}3g#Ch+K1!I?`@G2xjR z2}kQz8t~-e^_PTExrTf&9e>2bdJC9%D&VNy2LULjEGO zL@9?O(6EcU5&0_)Qbd>*qH46SF{>bY`;o(F%#s6Wj6jeS^tr zWgS5C*ufJ-WvJ*#;J_nQ2<7&uACkiFT zcbtArq(DQ2CrFIX=3eD;xl#QI-C^n{lT`|cNJcRe+~;Er{DVdK2T0K=eV|-z59|t9 zGHrw2B_bOo3brA=zCgv+3o0qX4bs9rTVC7#$g=|zUxJ_*mm!%I@!7`g5h6FJ>Ix+0 z0&ls_PSY0w7Y;-BX#mqEk_;eyd+k}P@>^;j-Ol!bPC_ngPaQghSmDYv|* zlmpOBPEe>rfe&^HHE-mSPBPpAg0ucJ%-s=34QtN|g}r#{P;o@R2ltQJkudr#O@V~p z91fYcuWRyTIWA=OAFf%q4)Y~{k83uPQxN;VA!++3E|`nTs4N$RK(R*GvH!bzrMMYVX5Nl9VJ=3>PlHJ0X}7J{2`&korQXt?UgU`%EVOU@=m5SeyFTUdUult8N4Qlel>$fX}os znVLS^uYh^ESN8RGFK0wT`HLB>xM&A8xYA+HLS!OZnQ85Dq}w@?U0PWJ8E!=8Dd$G7 z6QilDtd*5b5s-^vqk+7tO?rKb-kqD8k4o0104uwzz>-k-N1qsg?cH6J2XRu6NV%10r+36G&S}Md%fa;U@Dz7H0G+NB^MYtziP5dE3*Sv3K+=ct zo=blEYBEeumNRWcwjk}KqecR{=82C=)w^s3NfSi+*+K@5Bh3ixIVu)eVx~8CW>9Q z2(%Fxy%}wYwW~4})X1y{hu1J-VZm;LwT=Y(s+Ih4YrxmEgTFlQ3FyyA6}I1%-b8RM zouOAy>%jU|=a1D3rmUS4dtmf7D&LYFpWZF2zRKw8{?M8%&?|n95f>*i@OZPlh&d}07wW_h?jxd@1ooFFR(3nb6V3JF)w)Y7HL$dh7nekj9Ljq7x z{3Jm}^})$gp-_0?ec-p$QO0CZRG03)fuE3#_xvAzmGyfHzP$>VuOE>7A%e_3^w!Bx zf$T!0aj`P`TnnlD46YiWVx)y?Nrnjw>;!O7pFy?=Pg6TWJ5s`5(fztYF(!>}cMZKh zHkyV|J5|i_r)C@Ly*At6ru3(xDkT?u?}rTB1&7|hr7z4QWJs;4qd3PU3F#1ed0wajGD_;4XKUewM=v;`E53lQg$}UV`Y!t!>Rmt0gno^@l*oTIwXHHEb@WFH?}fAMf=cg4 z{<{is_Q@AoNT5K=k68&tl!rnlFe-q|9YS5n8}(2B)BJ~7q#=Y@7{8cFWM0JhaleEA zO{I|2hd+V9>d%!OaV^Gtw}3eyGJoSDIS5?Pu6l}$y0s5e2m`bvv1e_){mIzA+JUrG zhd?~B7)B@c2YE19crg+wUEQc7R8-4LDOSXRp??d-pjJbW$!JY5Ci2)pnMqL}sc`~@ zSm`x&2rPFUT;S;P^mk%EI{&{%Gj<~|$QkMX7ThtM%g2W1L4dgL5Xq?Vo3MrevIUWX zBoX&LpIIm5ck(n2hj@>zjS)qnw{|3!P9b?Y&@wImlSwJ5O^wf)<_u2HZOaiZ-$dM0 zbF~m+9vno-e)Lcin7oO~jx$0{Z2G#5SeOhG!svkxAlleuyB7r$VRkCDKJ03I-8()<*AaJc$~q6ZzZAx0ejt58ENkKKA(G zD4eKC!M9}LhYd-8|D2VcbHA|IwvlvDbjyWjAW(x4wY@qW01i16jz)ge+e-}QwKzi( z@qowlmSFfBwZf&|6-)@%34?8&bA86_#e%*BEY}z)+vUX5y1F|ZI9P9e)5j$XT9hkf-P9wa6*|0PB~M`1$LD%B;nqC2#zG=G#x!KKAf`G@aIT#_q-O z4FFXyhM$m~op(L)agr7DYc5FS<%c`ok48I}!bz<;Eg8_d>Q-i1`^+mLcI@+hq%1|h zmII*MC1HAVvt&@iV{$pEoZ>&(KRlfGRXoxmeEdtL-&u%mWoU~Vad5t^z14FFoPGKF z6*Tu&E)SquyF^Htq=OPtJ$GpX*y+wkSuCcruii{HI^4Qj97e!%3lItR&0bm_@VLgL z^*4lD9DEEPINUo9WhIZZd&-|JXW$nl0VJH>LNuI$o+cCA7-GIo<=5@im@o>m`>swT zl9I=A&I7(YR_Xq|W)zap+}D}s`>f2&v6-0}t(Ode54q+%n#xoS>3{2!sr{(i!)6mT zv|+1#PBDC*2BN7k{5IYYh~Jde2Hlw;u8l_Q*&*VpjYRAf5O*n?2C$0P0naq*_Gvr2 z79QAawvMEG64)bH{r~8|L?oJmPAWBSg0+_Z{y1!7INAQop8<_eb6QaKoLc6f0X~5i z0ktD!rU`6DL=BCAYYfjH&-l&im^A29l;Ib?^N2-W*M)Ri?cxpO;*D5)&nud%Ahs$u?qi?%t@G-D(g>!aRj6zt3>$E2*{+KQdO3kl5AEC!#UORUq z{lPFucmV4^SyOvCX(MtaUXRissg&dYOwYC5;EdDt?(l9P3=u4IT8cKeTVd=#;4mi6_jlY1O3Nt_ zuxev3HiD}TrM??s$TQ|jkhff;*XFeyMif{fj+;BuT`C|Q4KJ@RW^a?3DZQ4n6 zW``~-eK5ZQ9PU%zJq}v}8{${v)OlyuqIK)%uyZ#LPKP-jC%^7{sEM$^I1Sl@D^9vS zYcmo07GroH_qMi7CXdF!^gQ%08zml6GBZE_YyNjs@V#EQeNug3I_Df+DBmxt?wevF z#JR56PM^sJzsR1k*+}|)Kf=P$z8;10^=UPqHadXSyE(Ck#*VCn)eC_y=QLCSEti4r zvIs-$DlD)k ztrNZ1(-3(RrMNH;ye(ha#&PISRByV%=yS zx%2>>9YcBFMEd-2IKi2x0M@SQ^G!+Z4D}F(zNppq#_sv&N{kAU6DP!L79P`RT5l>U zDhV`oF!EuCIEW(NLo~sI?;~KCS_QM8N)>Vn>+2JOf*{}#5LO#4P@tiqzi@DX26JNS zi#b01Js2>7dpcb?cjvHO=>wG^U#T+|ZHonlO^gS_kp2~v0r8$ZaQx!EgP+nB`5VKIpwsm#&^%J7R~ugFL^n?yU;5xfyIYelf@UxKz{b8--l|XDb<5 z+4lCrpqI1E5=V+K-Fy> zGi06pMh6jgUWfnrTJz5=PQ|o)aNkXillx2Kp%oP{gQ?HR=7R;Qw{#`?B8w#tT+VH= zRJA#y54D9>NrZ)FwnqqqnKt6XRluYc7tL+24vHQthCfu-7g{qoB5r4~*S%ET$GHTc z!Np=s-TC#=w%)~}zRC02#8|CnmdK3eKX(y?wpWx|N)}Yp`2e4N&_-+%(~V-`^>G5+#NUI-;cRY~0H&SbmEBS{hfO|E;d@atO{)gbfY$5rX+>D5U|agm zNCb}#D@*Hb=nqHxu4|s2hi&qoxgJp=31yx09b_@Rq7$Q%hDsMBm?{_@mxM!|2X-e!P zw`4)yFjJMgX-kA{q9A^JdSl%|VA9KDA|f?wzzj z7O36u+m_r5&=o31NQ{*lMy96ZMUrvIwSsOZ$@WWmk#znzd`}br*y%{zVGwoRzPUW1 z8=>LLXRwFM^-;y;D&bUfYdu-9@|XJk>Og9MvAy>mYv%!`?qX#`0}52X?{3{1ES>+7 zZmHHU=Z{US<7F$Imt{W>cJ*8-g4*OW%!SD-3v9Am3cnwF-5=~Q+wc0+BIcDu+5;;H z(-sdcxyUjSvz4%b2Jw%R`d>{E#6tcbWED z)MMZL23*PPk~tiN@ije&S@+1K)ajtwd&PXhHXveOg3y^f|4RGos0_Tl+=nhVw|?(< z2C)uu)=pmwmUj}+Q9<7{tRU06yQ_^9Z1wQs1S$q#W__p7GC5ZNQBS19{T*Z+=vGU- zmAH&(va7HffhL0TCQKV~@i-n8b*uw>&VPct6Hw66oI}GZ&JrVh1Kp4kWJ~{|gC3oE z33)QbscP2oCYN-4qd7dYe@0dUU53@q$umDAjuia39ZV!%9wxldmI@oNO8=mY1pJ=q zx#~EvPS+=-%hT_UD_1SLEb5ql%+T*<_70^edpxM6sJ`{RyLf?`o%%bO_h;S?QEB+% z=a2Y;s$Ns3z3+jYjjt1IE0}B|^$@x!B0CkD^}H_JZVWOP3c(;>7=Itl8gmZ5@lf9V zB%womJm!&pe9talGGj>ZpRlym4miHeeA{&otRTZ>3cojco0D|HpCx}S;89RC=yKCh zsej*fs=LB;)$#u))OHO?af+?1LW;5ov0Z$zXItZQP9Gz+VTc87ZRx_npGe#F+BWQC zi3Jt(^$8`S6UI`@{y*H2VwawDD+@Z3b(Bsd? z@6ql<^+F3ok`O*&aO4Mk^0(6r?n1!+OrNs}o~hR~r+9;E@jhnkDiL-vwHh6iE#Y$5 zvgo#SEsH|=;6nmXmeyt8gL#wSBf`&|qpZEe@Z#XNUJHMx&lLZsp9C8w*)tDt?D&-I z1T$Igf4t3yHu7WqwBjYT=bMY9j+Kbe|I+ia-M!O7*Xvd4>6_WJ3&SsdHZtS(mQpPLd|3=kljPIcJy46PK@JIa-PB^ z>%hzxJb{mrwZk!D7hX^}IlX!nc5%pGvFzL(L1{Y{|crc9-7*^U{a^x4742h zmk61k8QVoh`?%Z3LHAVIO8gewbJ<^}7yd_vgCZ6tL4<#seLbGBI)%3WmGpFT81**- zWA%BQ8VuxRB{Btp9x$cJQ)2tB&&x1#>|Mp&(=(uaMT}VvK)6CQJ*Cc55^yqU zWviw+k(ZO5#T5LPf)S{K&7j)1?Sx&e4E7IhsOs6IHQ(J9euvH6wJ)w|z*Q zzez@7@Flgi@rH+oH&mvCY3}r#oLJ4x&7<)-r z`Od-XtMA&{S_i=R;@jg$SUPVt=2V=y_VZsBMo(lSy#IBK20AJ_(19}(jcr$L&gdw z|LVgh!`IAYWHjH!19X=ny^nVL*5qi|ObE+D`hQL6HhXo{80H*A_Im0%Z`AW5M&zdf zYm1x*;ln_?0&7?Qj;dw5p=;6GqG7vF05bP@%Xj;WOtdu{yju4e0ybD6Y@V9 z<_)lghjl+OwaT5=H!7x0q+1y8X$%LGL;}D1v*6q;GK^a|7owwStcAf5J*@q8OI()nCbmftrB>^ke6s zz+4lLHwy>M|L&H?zTt25Jo8INZd5X*vHXN9an=qk)6+o9H0CbUW7Gwi10B#h0TTU$ zI~DWkY;F-har*DG@`l~ll1uZ!6XsZj<@fFBhgSPfqRZUFJc>orf(&Lkral`(imElS zPobw)CnZ7FbLD`kk2veZB5QBG@=1vd!zhtmMuKTxJ%LY?xkQ}b$aBx)okZMQ&xv!y zdx*WS%Z7b9_+#3iFq}#~lteTR{$Un8<9SuYr2pBKb;Z{o1yfHL3xS5+5Eq$wli;nj zG_hEClKi(VeRvve*ey)Kce;sM%)zUEb#?RwxOF=LjJKW`9zgxIDOLYVeUt{Xx(Qr{ z_4RP$>n&=(mPm% z&SVFx%q#kVEf$cZ@XnRs3E|N6ct_pSXW@OuKELZw{HWf(k+^nHe*V0WYO`!Lsfq>& z+j*4!-y?gNWouwyXe$5SasWE}|DOCm2e>(RNokz98@f2r78W6Xg19i(Au})CRP)Q# zsV47(Tk&wkqQry*f6Nha-^%g57Buf`hG|wy_;Nh;F6IB-0RQUFLQ2+R@fY3H-?E-F4&$Y2UFveqM=4qA`BX)oX+a`T>g^I(5oMS}2fMLN&X{8l z+(*S&0Sx-nObMx*TBezD>8{xTU*a{`S&UflrcY&>?MuX`?gtI#)q4yi@5^d~hI8uA zx0|}%o`7AtQvk?3QNf|t%ChGe&_>KF#8Ya zLQc@njra*;X-48pb_4zy4>oViH$dXk05u!2QQ=--;`+J5@%A(p+1~3f!Ur6@!?c>V zUa{bvyJ*Olf0hz8bM`B!DuUJ>GNc3eN6rZKtr{?w3sfAry-WCSMWEsxT8RBN0%Y`W*o2#!gi2Ta)@Hd%pb8pl?OkAymk&O3HEFkiYcCH7gD8A z0ej9wP>Z4sc+Tln-ts6MnuNACNksf(i|V(n7jqYdwU<(}Qme&kpAqZFyUc}e`X)DR z2ddZiucspVZ;$7FTx;!qw<$+5Xijq2|E4KlFVCC0SKPXn|8EoFF8m7joQ|qD+ZN!t z)xkRugsXv&wWM?iOA`~5M5y^vMVz%7u0@$S9kRKOtDpCZdH3?nN=fs`iwNi{Hz9n# zpZrU_0|(l@-l?dL2M8d)a94Bx27FQ)|2YJCx&L5y3bOuXrc^QPbI;t%Gh0Ixg#Z0^ z6K4ezchC=J54P#m$PoucNRO~|3(0$56@p{YR)jm(H!B3Y`rV2lEr4rCdq5Xw}f_uzo?TN%thR za8b5`KTY;(ROX5nS1NqqT)mOt4FVXZ5ZCY+b+955r;xTyuH7cR=Kv=nK-wgE<^C` zAV+AbSL*TrA8)fUdb;id8;u4{Y;NnxWyo+k>gBo>p7kz3CR@ecf@}~!3cpy&B&B-0 z-mfqP$pR!aHx5+vuXmrS^zAP(d+1tqRVI`8Q(g11=+5b}Dj663I`ptuPuumd2F_~| z$%y%)sZ?IU1at)=Ty=sbUMFJlMq{<`8L_Jbh$miwiC9gCcSXaFHBMG;-EbRlWLIJ6 z9L~Q{qMTQOO!>_={MGf7WUcZM<@(r$i;Ouh^U0y|(d8Sh(y4QON8gFiT_X*#SSoMy z&9MVU=+x2*I=98`Jvz{6)mT!>cc>%xt2p@YkKHxJ^)H>(VM&?nMc)=9%I&ZcuN$3h zh8>21)CcV^$GcZApsL|`)^J2`ak^`xt`JtUo4N^E?-`Uu8_1^=Gd9>+xKhDY5}npYz@$7N{}BLm|R*|1v9g;?>K4D>DBc@AFVU$ z4@$0%Orh7j_ZICLK2L4Z(3UFmhF_W}v}C`yGZXgXPuPW7R1%M1q<+sI?*Oi2su42GW)`vy)cQ`#_shSF#z~}jFr@fm79ZHC#0eV5SOE2IC zM$q<0=VMzCG`pg$ag*8MEr?SWw#Ps>>203*_i_8jYAInDVRFQ{woom0zV)ir!VgbyrgX8Z?BZ&hjx-VTjE4_69I;%PebK^9Q%M~W3 zETu5c?b3RE;T9e6l`d0W2`%6}Pj|&>B7=Uyz?Za>!6aw#n<#y!q36yjK>$|N<+bm} zRp1$QuXpWXjUm5%WPXG+;!mN+c}#UMkMp&ZTLDn8I*Oslmk^IthF*Qj2B`G;Mq!I@ zEcKX#GVPX%+klHGPBJG-Nm7z4QRKDRilhu=Tb>LM$6Jt;P{ylS@kjkA~j z7BnYOEtQS#NuZV2D%w~rJD8v_&fM{#aZ>sVwozS%bZt3*#6x<*ha|J>{OmZ z?aU={_TPa<=lza%1sL&7jRpqvwLA2 z(49j`BN%;|nI5|qA&)=|3|JT-dj9Q?IU`EW7$?irPO;N**$q4x$k=UmENi-Z znygru7}&ORge?Fm&Vpuq8l^O1YOaj7u>3u(C}P{Nrl-RthZV$*b?6G7q2fsh&=CIV zs-prAZ_i*EPKF~b0cW+*p9Uw~jM$kzYk_7t$!!z zYaJi2fE@vCcl*|?kr4^|?mLZK&)o>K%!?&~Mg1Tgc_`C}t?=)}VVG;*mbeTNK2zkyfx7JuE!NANe@Ions zv=6#c%SFS+i(FpjI>F;2Hdb!l2>O7--b?gr07M@*ahlW!dR3WIgj&#Q^NaKd`U2yi z)Mq}7nBx12%I&-5!AXAcy3$8=#heLP!nK+*tzUFdc3|r2acIogsJG2v>Zg~*GYEaD z`km=t>Edr|1z#H?DT!eatpIvA0)% zJ-5`XOode)o-~_kj_cb(UcRC?!qm#5vq=z2Ui`o%)GhT#ySw9o4lYSd$X6!S5NaH1 zAWy;fqIr41)PI&Th_oZh@LXL}*tCf0+*({A23)T7uGM^*$;>znUD|^Rp|i<+xh5U- zZl=epd*0+7hN>4klK(IOBv%40f%6pd$M72g%xZ3J4;kimrujm?k?=J^o z7QJh2e-E?X4Q$L`oqhsr7)gyu2JHPu5^SqRu66G!#;LI{JUOZbIkasX>WLKH%)c)x zj+VCY?5zM(L%aKesxuOjoNV416qbUbK@(BOIu~u(o-Jmq7v5r^=jmIV%ceIlIB!8gK0tM`ob5EjNhF0(a=->nXYGIl5JepN~^Jc1rB(Oz$E z6{QOD?QfQ4cqTkKrXBGWIT8_D#ZG%G4K|u0`jw#2BPlU_9qKVJp=b@}rR&$6ZD;!9 z%b{675rX~67}Dd9ZF=DN+RzSwP|)|$U+|xu8V-gm99NJ&Y%rTNIWv6sE%6XbPd|#Z z0v{or$KGCd=$$%9Gu%8B@=Ti?uF>!Gd^vATvTU|^xn}DMNiFpJuA#YSZ`BX`CDq7t zf|i`Im!MJ}tKZ;M;WK9}K_w%f{R+;s;dNEEphxaUw{I3;VzFA;u;BpUh=2fHj((wA zr@k!E17dr~6!A#S6GpQE5c`W1v5lJAKMK*BbCI!)78xVtoiP9H=4T#tw4Q?^r9X2o zpz5;nv{;!$2Kn9Qp2`t)LA)M`mJsJX=q*r4xhP6Vb|AOmBXZYzwl-{zF)>z8m1es8 zgjU2;W6fpd)4&ecJM>4_||LniUS}$y)$s6lUdrIK#2R)(Ds`1_4gA zhGHCR-!B^Txo{0d6a*F-?JtFk^QKqgwG7M=@ngvnYigEs^(895Y_L63K*$71Nedj4 z#5!RGXT8{2OttQU5)9estBQQ+eGVMXqkmJUgu+l9hh>x?p6_JL$L6*5HEJ*S*Te{E z#a(!#CIIYSj8TYRrBEEnNO87do}5yr=|6|MRSSP)ZZ$Gfu#pdeY!EW>Jm`PPb3e@B zIzD624r{N%pkfZyI1O5~*!iZf>1nF{r1y0-bt<=_fsg(uJxI|zuTW+r&msJ*=LmD* zB4?bx&(K$QA7lTo04@X3{AIh{9=vnK|8}eU&>eSww>{q4BCU~gf=Nz`X<~9#)2DxK zqFG^#$_biiRv4plf+n05M(3QMsf+{ml|-jQ>Tyhq7E!%oMR?ID5mYU|3cAMu3PGEZ zmS8jzjSWl&+uv4a-BNjjf7O@n_Rjs?Z+eK}WQ$~(p?GZlMNpclc&(0{?!gU@-uvyg zC+d!W$bT9((tk^o?M+Nf`Y3?WtiSNA?~&*+3w$I|tiP&Kw-jw=2qTDQ{Z(~Ne%qs5 zr#6$B3Mp9;0?lxXU;5ndLoV*mJBF6wUIFzIk8UBd3mMuN*di zvSZ=XPnqIpViJdxEx?$bp=q)Jd@PKg2{?t zZ!^MkmRW%SZL43gO`l)ckw15y|FA7vtSBt%0I&%meZRe3`pIo~cqVzh)@xcCtv?e; zKOZ=_{fnmfnV9rS!U7m`{4a(DsP{O3V9fEq7#5)3IP(G3g_c+wIQuF_@f2sNJD@ z&E#&>KGR9$jPPw89czfa${Ja%K7uOiVI{DS#$DFd}f> zh<&DuSk_;>FbGosO-xRIOaU|>F*%1Z1<>SN=Klk8gP;E{Lu0W30000sD3Q{l0rA;u!Vx5H;p4FzcnE<0@(HV(M(|$V?e? z*x|(-m>5!j&ADLoK}p17KV~E^ND7CuntJdRi?u{NrCejW@1sz`O3Rwp5JAV=&NDW7 z0y)*kRmjEjL}>Qdb9Cqla`W4wy~$O`t$Ax|e043~$Aza8I`NmaS+E2frjMa}GsP$U zn8kW&5-tsEu1mL0(Aa8nfKwh~i%k7)ESmmZslf{Vcr-^U=LG*@1a|ARu{VW#WsigF zVkLI#jIrUy!0k#TT7B`}q|chKZ~lY+?CQy>!AH-x=S3jGm^HBfu98kC)0f)DD57S2 zns|zGn$wE%j9qkx*w3FDh*H}p-cU$=EHV*q{4|crVgnahz|>Sf$2e*q4vv-|a9bz9h136UDd3uG`6aDB%83{7Pvs z>Ae}=DgHYNcNEC&t1|6Yo(g20F?v0aMo{s_{P?Nbsw2ix7jjco`P`9zWy|YVX;epPu^_q{GIN^ zFV*1qNJLT~oXa+aS53uLsc>2F-OD$iL)XZ}H^In<9x!tL;#rB(+ zzgVLmX_!JBS!_z+>O>O%@O~D2MhPv&Hv;cAo1Za&405rcF(T!(MBXCn-n z^HXVpb?^ulNC##k(}Z$B0}FYejzT!@dq3ur|k2K+q0`;2OI;eCM+`7=(h{go2FV zzy^@*X2Lcm{wAHh`FgzSf%x_#@pthb&5Q)HxxvUujVl%yg_HKA!_{AMm{A&;gG1a8 z#M12*aKsrcjhk^oXHXDnUi8YX<2!-gE6?_8(y`I}2SL)2 z3Ga@Hhw3d7Df%IwEW#SaKzs-VGIqziWpV}J`>#XH&x#RmH?_ozPNoY|f^oH8xV*g< zbrh-!B&y0yL;3#DQSpi#$}(0BW?qhB?A?0JMi@Qwvj>l;n@K6Nm6?@4s4L4P{^pu# zwz&-@%S9vmz@L_RZMx;xC-M}aG$W5S#_p-o({NLNDSbgnMXTgiyx{XgU}^o~$A*d< zpeav6NJ5usSgIqXQk-pa&|_%7U)0~k7A0w3B&;gStL1$)k)}Kaa?ubjHqAG~vOlJ` z9c-(WSaow8B(_5umv#@+>+4}Mes2ZW<-&%UUR!#RSl_-}x_-|RB}h2pQ|Plw`uXh$ z%K8{b3V^7Ed|qZYvz=yT{q3MIIa+pZ5$M4YNvTH`j)RO@R66Kb1}7MCq{gV3G_5c& z3=SO3?!|JZ5@=`^77qmX7#BA!C@DwJFG(5ta5v6>hy?1P3wGQQm=LKzuq*FzUef|g z{Jjk4`FRgckz)zhM~kg7EL^88YqDm9i%Eh%$`UfWRLp zKIhBQ1K-ubyS|B_=476FxG6uE45`JVoJ&)BuFp{mkpr6j zNyKMV#~vWD>_AbJ8^Jj;+UICZf=SG8Vy9>yDC`kI*{C9K9glsNFH=kHbAPqjM}=l& z-$C*YBrbX`_6N6BVsa`IyseE`fbg33bK4R6kxy8A$rVZXe|!;dJ{BDCKA;Qx?Rv)( zpG5RY9$%WuGn!_<`V-Tp)iGvm!kV2JT58LrCTxpQmSohff~RuJLh4kW6qUJGT3DFt zPNA}H;bVD>3yfqUep3C6NxO`zmB_N>M~ z{zbmhbq1RAkNcu~6mz<+G zfWm#B2k&V0SLbloL4{z#v~@sBuNu}@cQtVbAR37JR|n_Zn9a>X zFmAQ0{-7!n2tvfyaVplfCOPnM@nPvyldM5F>xNEeyBi*SW; z-v{OC{pL&Mhh#9ohO~Brl-*NU*>v;xBjhzg&1qiZzGAyj-P9q{eG5>PMh=s!r#>D> z88T(3`quGJoyBFfk!<_X)up`m3|VEvr9!vr9g&3IPYQTiRzB7qv3TujFBVdZuo>=y zb|i_fxD(rKz9WTTMykGeFulmW=gkt=Qe!h*p&51AGo*MVdXKT#L%5i#z^3cShwp@W zPNUoNbYZ3G_;mlm90E`#N+qa-7o>QU{J~gceEU6}^3d9Zp2`_fAZ7F`xe->RPZS>{ zj$2ihSfn?&@sA;{NTOhLGRFC^?|Reshq?A|6RoP0c~PZUtc9-q8V~%&e1u(1sZo-~ zC~m90V#mn5y^;<^Iv=O#icO1C5s#63v0R-6<5S0Y{Uih0;)sA8?TQ#j^|ux^MIGa= z)1&I$+S`fIxO8t@zbC{qpzmVz>4v8h2?}M}$ZdVo#Y<6nVVsLLg!AH(C6E`7JQRtI z+qhUOiQVukr-WUuM3rUnBLmAeyMogPgVbPw)e%#{p113{KcCsEnqc=8Ouou_&Lr`r zo!CBMSE(|6rxVpcqG61_iKS6E=1SnUDrs-KST zm>3e{Ss$43ibQ}O)a8eGOvJ*0lbEdXRlU2EdeoI8Qr-eE-BP%h$FY1@H28I*|623vTj%_G1J43z)xXVvhn@V9OD!V*|8piNF5L@P3}Z7Q`>3 zb4C{srzHBthzrhFb$=NT39m3hq{KBqKog~8!*h)A;7y7o-$N!Ek{aEuv6CP~>l;;4 zH%#U3hPePCm?Zq-Z*6RBqy=#DtK5#}Bju}Wyic2DUPD8`G!h}wGNzRNURyl**Fk@4 zcPwr*vkjJ-I##mif=_N#IDD0+ZQV|nI=^y00n!V%j~(?`6cHvOHuur007YQ2PqEJX zaC~FduA{LYnvO`Y&wKe|q=>Qc`6zoIf{eZ&QgnbpGW}K1sR#{5=N#m1ZXCMvNt0IzFtqm!=1GwK;7uo1 z$O6P_%L#lg-?G>U4=^_;2|bDQ*Pf9;_Sn@*63XKkEzsy7VMZ}TfhijJE0^72M(?US zCINRJiID!dpX(}k2f-VAW9ewJe1a^W>%NCXNqxl&-4bbho^xVTyAYG5h8Wcfyx68w z#+un(8HvhCCf)GsP9ovOVEL#^`T>P(=ohefkzW3q#}i?U1&y&T_@FB~F9kg`5Sb8z z!UjEhDR67Noh`Dg*` zMw^b`XSO|Ur+*`VMfM&MzcLq8xre)JfYS7CkongSI-gCCnS8p5Y#IquIaJWpvJWZk zjNC!6p|&-8x{5mS>N>a}MU5xgNUNpDe-@Sp@+Rb^>Y6- z@RpXqsC=hB!-q|x#_Oics<3qU`%l5u_L8PTcCuP$Rr}sMY$BOc;z$9U7_F)r^5P-4)Gp=nZu?1Ggv>b(r z;v*7+gMYUfw-gqvtcMHzmHdsIMT_w+UL-WQwEhJ6QK=-{0m&>!4;9tKNENC6{>b8Z zeoO@ob%;*4ZY)*&;Q3jH(BkXC=WG6nJ&Z)l>2dnczrTc-Gy^` z@U9&C>&KYVqu*}W6A$+-3$Gra>1Oss22#wcs$%Vay1hZtW&9d}rjllojs=@~55WRr zUO*quMDw1XZ=NL?-22*;zw5W4y)7RYr!0?PSraIAYkh5~7B)oKsiz|vIv_Eq1=_-; z(L*m!jhl8ke-gaDH`qg4&{vk_XQUJfO6nP_NYU=b;?WD*SPS{=#oz(_31|u)vYc2rlp853EIDBAA9LJe1jA*C zH0z7`vUTpU|76=z3_-UrpG~)jpIZF`Y>`Za7=LZRbI`QlwV|)OR`{?f>JBe@W;}-We0*Lh>X;d5hosCNlxe`=Bm$ z>Fj3e#XW)3OS#wd(;A;d?^WOaNge)s`x_lq{CJ}|h&bEt`+Ai{f9lo2ZA;1UFXyuS zxX*o8pAC|5h9%Dd3C}Fi@0pBeT}AyX-?4w2P0FMG((qUC$kgyUaRl)BH{-;ZNJiBV zSl8U5w00Y*uBHn8KzeOk#Z&ad!7JF^SNE;#M?eF-l=B$$*8RIbkw|E@rRHN?r+~;mVOgHnwge%*!W% zd38Oyly0)`Nah@?hl+h*@X(X?n6)dD_+TF_Z@ z#$s1U))XQFnb>2B)7VnB+M0LiELP7FT&7ieqmqbtg--AArFl4!7_j{#cpw_%p6@KA z#w0wCT6=3m6R5e>HW6EiUo9_GvjLzT-q66Gb%SJS|aOZetQz03`JWD~JzCMEy^m^OfGNnE-<^D3x?VrGr=-||3%;S1&K z$@m@U+kSrZH#$eX>Feg}jg}iF(Cx`e=#VZP$m%hS&pgs;tvF;95q*DEv_iILs_xHD zgf2&rOItx#&=3>z5ijW#Aub(CpV{tYSC5Wn;@3oVqb&|a&SF(NCW#yOT%C%x6QNPy z!@N&Xi9n1PPk0Hfoi~nbheHmH5_~m`NS=?S^JKTQP>50yEL4>xH3y0j)G_Tuvt^^v zM}qvL-C=&3IZ4u3^@gRdbV%QA$X;z364-WZ{C>yoQ9;yRZHP}v^dDuNa!ba||YO~n5GsnpECuU40 z_S-uLj*EkcB1qC{Ymf;>iOA;jUisv`*5rz}fp*A1@^9F~GW5XoCbFDO9-~u{00Z3n%(Ed&CFXZy$fg9ZNqo+R#IgxJ@?WK48$4?I zG^N!|%u8*+jj}f_5|7SK)^b?3A-w@RwlpNUbYorz)Mkxn%EpwMO-#98m7C;oF&}U+ z88zgilM(d=ss!Sm2a$Fb=v<%$&YmnsE@j~ulz8sHlg!OgL}m0y+QLC!=g|*qx`Odq zFTc=G(hI1@J)RF((ZDBM=_kf$3J^_U>1({`>$a!H#n$5Dn!C&^-x}Hw#P<2%<+C?R zqI%v3h&!IGM7vDQ^|&cjE_Yme7|D%hX4!S@#pR!~^*s?jFemy9*0N8!?AsmSWX;wT-=SZ zbPsA|+r(-ZAO7%_GnD8>jm(MX6sHaYCY+)C8X0{Sd&-7`GH#WlslJ$NSOP<~o;c-e zp*Nk#M4upzHaPYcccTV}@@zZ3q6quQZ90UU?#V3qZSS;P=#EZGixrO9@t>M=-`A#b zes)wA(l-fBU7Wy@o}1&!D=N~3o^hUCMP3mNWE=!-tv69ccff8>$bLf$S4yh@$_jPo z1CZY)kEr4nGb+?={aJMnt6m5m2dmkO*MM)m^%Kn`8LYmg@0Inp=C z*~D(I$k8;-Ym8qy?EP8Fiphuk63E*LWiQ349ETVv%tR2$D`2ux{!7#4Xa?IcXCMQY zn06a~t+^iI=w2n7cuQX*cn02@G-k;7Dl~zOw14H{h4?`ElY3G&(s=p97h<+t@M&a(%tg zzX=i`>n?(?goF>Qdv^{CO}crbaD1{+`si!&uijWp2xNnqkHl&fD82X3+7{X(wSYIo zIuoF%v*ctuDTfwRjBYy|J*xNU`*ZHKxmrw2^Q*2rXgF0{c|f`GbO9E*;O~$iv;~mv zpW@>7tLW65kO|4Vd8M6JWsl24Un7_}Pe*YC@5%D%-v{k8rf|yaTiF+(O|G$HX@j-f z8#w;pTggw53DfU_Mt&Du;yi|d4~;VMhMSEt`A#E}NRcS6t!q9H(-_T{mjW+CUn50+;!Ta}23=Ax0;>HLw#mc)oCugrN-A%aV zuuuJn9hH#~03Q6|kr$|nDN@7~`k}nX7*j_lIW>br$H26B5nqwf5Qc;mqPQ#ln0C>o z!aQn<^`q-Bfy&S_=+{?$eLq8D?p7_|j;-4xgcIMj%av5^FN$lICLJTBr@}5sWH!|U zXCtQ?udi%cd7HFGE?o$|p4~dIwvcvsXWT;9Pu6^hE6=mFSERU{inm0pq!8}m{%VAN zFXngf6`(s<{&NFc9jVK4r$5re3M;Jd*vNlM`=w>K`|cg2&!@vuT_fQ2@f9?1w?nU>=hmDjgt%0@r$4Yr3B88 zwe&NZhT>m;qg9g|)H~Z4H}vY|oqXr_th6+##XXg387OBMGuys(g{1qt7I1z>M_Clhm4YpFD~ zy4bB*BVx()QJjxN{Sf)byG+m=gdY)7%?)xpdM|^C;63( z2vGUj4nau9Sc17gs-;` zhTVHkxOD!&1lqCnqV!A`zx>tZ`8V&{B@M(b@wXOc44slUN{zt^Inx1l!G!@Y!!_w` zcv5CfDw2L|4oSEvQmqrSCsU6u|DDcIT1$|gwm|yDX9+!`D#Kf*K4xoGXw<9?L=;ow?Q$ybFD=cqRO3dwu-JJHH5%c3F&HPZn}FMV3#+`OjlOs6f5vvc$X zIFRIBTwGSURkO8VuB3`LmhWK)J68`!2yAFC@VQG9#vaK-y-zYYu5?Dn1tF9o?G&ug zhi&|NZXOjQo-OxQp!V|>u8nZnbnp-ccE!*92u=IQ3WmStpD+Ao%c5W0`k@)tknQ)r zN~jZb+RME!4_K3cu2Q##?@! zw@kuU(+sR~m^BKE>Zj99yEUbgoFp!&smU<#0EII8&zP8G-H7iIWQ}u00qms}akP*W zM4DwJR(Ta*kZD396;nQ%#4r?1U52m+fx6R{B0AdUWYShyh$|18U;Ef&g$Vba$w1@? z?}+?@v|7qWFvqc0fE4~T$k}hx^ARSjKfp$=_&P2co)*(q)_b#>*y*|p_>R`$uM89Q zH&ADq7Dg!sBUFFHcXj*FSH!_*_ijRe$P?qtLJbh3iNCDs+eSBe`4GEur@l2TG45`{ zN~kN;p(*xa-?R!HYlrow{{Oz{EPwD;?1v_3+6g1|eiI;Q>zW6SfBC)xS|J_J{W=UbthMqtR z9SD|4;3u^Bl1Z*@5ZvRid)9jEtXLcL*&QRkEc}BKn-u@M+(7oSyu3wb9r~B&B(TS3 zHEs;w9+4(!KY-Bu1$!U9JfoTJx$Tz|W@pZ+R-kB?-3cX9-vr%P8(-0VN|mVI2xYPA zG4(KR)MXS9B*9=EwfIqnevBZORc3M%04yws7dOQhWwB!!;Ou(37bW~L&C(6Gw0UhQ zEB2K^1(ZTV9yj=BtNH_;&DTCoCAc5&7&O|UNXepyO!?FL2~$+ zvmTUrJjaOM!r>E0ncQ9lp?OQ6N&rwqkK{MVV6^W?v%j+O2%|1AVT$ zKPhV3isg*Gea$}1yggj~6#!@8VLz)DZL0rq&1YD!+9TNF$i$DsUmbKz%;wA#JS53$ zpTt@dv%0Y}g!=B=#0;_?agOzk0}+_Y=9C#dM^%_!5Z+9$+DohQe=Bxl1KdZx6)7{A ziWd^nNt9>=aQv8ItY`f3lKQop=K>@O50RAg>J=9kSAJ%w>Oza#k+dlX#%c3DrSUx( z6dpPtr62))G#iY8lf!DwQ~`GXq!3Js0FGr4772&h;AD(uCYaV5Up&%w2G6k15j6Rq z23T@)4@_peD4IjSgwPy=3}PUh$jBt$ygKq4L@{K10vlGFyZg8ddo$+y8)*& zlKcCm8-3d{;qKF&?2@$G(-^quK;_LB54-(6s@3F+edp;HblNUk=6Qs3M`oJ4xqtmk zXC%4jUbmlMMrKG~-8tSz+rwg+VbfATOInuAsI{h58SqzmK~&XfzFbrrPS28&rRP0q zY9=}t_#r=1iF9T6AG%HZ=j6st9?q5jv2R+VY!ZnJ-h>y-<^b;6X1NWjW|+ttJPr&S zXo1Nl0sN3O)^G9xF}#4JnRwwaMwzn~Vaws=+~sXLfYn(#M?aAH&xg*lo)$YVsX*j1 z1O8d;%^Oc3ZYkbbBv(!2AAjLDFwTE8`%~B!0`tpaRX_dp~ z?rHwe#?#iV0nYhTk&uc_?uw&=&`Pn6s^e_u*V$bEzCEQnfu=HWv-J#VH&$`ZC$t~5 zVUfsJi|8KWf!9W>)QfMupB)ayr-1Qw|KZ(snN#V+y#vpHde(etvQddI4{)|PTe)FdmV-C?ZWkFe!ut3!u96qX=2up`f=Gm zg?$^^JgswEJ#Khm0H62i-W@}XaY;Xy7u!v8l&#zog&Yb{jHpsS$CUvt;29EHj(|`S zWcfUNzcaGmCHL4&9%xnn9B;kzeDvqAyk2^DPJ8W*$=yI8z~6_cI}wk4(8WM>Om=2S z9Bg#!Y%>^>tEiC)-WJ-dow_u1Qgj=K%xDEv>1(nqRR0W}xb$3ZZ2Tn9;b(sNmzj*z z9%eRe{LA=RQw=!4CB=XOsSHGe62UIV9{jI5vMHb8oD-G5`A8B+oPEIK40wIPUh_{1 z+{*iE{16+xbSTq;!B9cZKh60rlwWiv-XG|SI$#+00LKpl-PQdK z2LZ0uH=o#D3|1D-ZXD0XDB=KSNTaV_{H(|qJfrDP?Ej+#I@*apr4hN%(gD+6n@$@~ za8zfq{N|m8wq;u3HE9`)WvN!VTs>)QbL-CIa-h{P|MC6(&RX@B!_`-4U9%wA`Uw4x z=!^iBPd6VE(Iup)GNZ;yYrdKaBc*}oS$G#e0ULZ_{xF*QLHMAZq-@o`1FpQbgu<+M zPMi59MM!=sr{(0-RBVI-U|C=qV4uI|a8G3q#k)t)BVPi45=pKgwrV5{Fq{RtKFq1Y z^sW(=KBIU!u6^`TCcZfIm1=9(4jM%Y{n23(t?XU!z2{3yU0Utbt#aX7cD>r{QE~p* zn5hTyft8E;?2+XiedTpa5Z~QGKG^JGIB9+Z>h?Lt()dIPOl<22Jhsac+V^!UPpo|Y zMK`cUCL?nRv7nU+r9aiR97`jAhVG0^%LMY1FRWjCtHxN8sP*!yTo*HGt8R)a!&;mP zgI_~UC&2v;)}>HHXsGPjNUT4VRm_ZGE%e9vh&3TYXWKICc)Nkq=?&t>jMQptdwN9G zyg!_9a)M(-A7#My9FBOT+>V2wj@5x*f^SLlLUyx}4k!$V2lhXhn!J;0hyGO%@q=VA z@|B0oJ|isau8LA&uIR2#`Cu&=h8iBn1exI~emAsj74SNp?sF-9`Nhfg+wZ*)ED0!{ zo=Xqv*57j#!bYcq?T$l&H6}u2{5L&Zwr5lv$XFz#^>u&>G_tYmO52Ap1zk^2?L1;G z(6lTcIz$W3&E;}QaB--md{bxIwV?UWjcHoEY!SN|25yVv=-sqydb$*a%-QLLOvvB2! zLx19K-vgz?$sS=vHpJ!29re;wZ@oE~hP^FUk*er^`K1qSFBe>(ASi2oKqCB!8N z)6?+oe{at=soAH$>ggb;b6wW|4^eIAn%Ds4tvZ?+WcNQC0gi_HRx5iKDQ}+n6CqjK z^oS&P?eTWFrB$;R4RX9Xt_RuETi|vTr?M@fn#mW@r#iEX3Vbn03Ng8wTw25G{9Pxg zyRzof_KVL;_`}QD0Xb|Q9QZL&{_Sq0w?C@iq2*25+q>YQ zhvY+hDp4CgC;AD=o0dzMmJ1I6iThXE^k{#X3CTH77T*c+`Qlnxd(= zj~=RT;&7l>1P6MfdR>--Q1Qu1aP{cA-glN0)>TSk6R#JAiQFK0CVRkDr8^5LbjW2d zegxs51$I4jv0;7s^T+2KU}r5Pq31o_Po}K|bI!lV7v~q_78!+&-@Uhr&-N^}^$X=Q zh^?mfKe#ZZaGDA_wynf`ocOog$j-2_wEo%sH{4$^v$kgBv>XqkT-Zu3hxyC5G~l!yU5PCRaDhP6^bLintQfgIP}z%nY*FWQBH6{ zTn~bcwlDOEJK(tpS5)TryJjU4{8(k5{)H69f!+5KGG*ZPsqHi}?y%dY`g2Zq?=dVg zNowHr=>pB0FV5b2s<83XQ!7nVg;plr-)MnbRxMkycZ*9-VNs{7X#(D*42+wR9%Om; z*+ZuR9s0g=LU{!xR*Mglnra%ohvlboUK^%OZr(W3TMMg83NjwV0%X|cg-Vz6UmOW3 zC@6Y6q@B6KzS!9Ga@UJ11Cf7h;6QEhRv9RqGQd8Feo)5k_%eAhcI#Iiy)VMQxi6)p zq%_Y7&mSoJJ2TuLi4(aW$lVAvea<=V57j*vlx5OK|8;-$l7ZT?aYGs=wvxO9k!*S37x^m< zVK)RNWiGXy<%BswAGpgg!pPI;mw49|G#=OtFSU)+%VRC^lQ~-v270H6lxmhEGXw6gdib}A3mLZ{hwxolf{y# z|HBh0v#LuN9~X3&&Q+$p_USDuNMqNvnRvM0-Wdv+nn9{%w_po+moWX8Fo28%R$GNe zrPy)1x|e7k)R<>cf3wjkqKj@fMd22(%7aR z*-Y-zC7oxVG7x87g(X>0aSLF$!}U2owrPGVwOGTK;Em2*q05-;9jDy*<%pSsnpf5w z#UJ`4|KWA7G#ed|!xNec(Z;Ekew~Bwl z`>pHoH^MILVWR-Kybz=CI{>99pdX%pF_GV*8fQUvyB|}oEgOpRw-I%U872ief*%%q zb`B$~P7XHDaAuuWG8ZT{LGWV}keQJBy03tdjqHrpC3)|rH;;b?YZ4z5k@Gt zM#F$8>J)Tvlr28wEaKi0FL1xAO+PPX%76%03zv>P6@>B~#E3xHZ5(49gP;VrK`PN%)p^d;{7u>PVe!y3^8^RNZjK-I=n7Gkt&|=Im;6#BLt@|GG;a6-mccL=&N(^a}s+)$#j48Z z(_eM-@QP#;7MT?i|K+Lb2wQWr|N0-?%77frE%bF$^!i}tTtxmk|NK|b5Gq|Us;D|9 zDEKo{Gd#MEgMc?l zBPxsKhm0ViW3o@DK|?^<0v?)16Zu79#%P2>tC_0`!zHyxGCB=Is0K(q&9!UqU>>n2 z1D(fsfhNb{rC^2B;q!^4S6gW3U74k}+;v!8WK12eBX8luW(sQW_>)Q+hzY_L%YR0; zyN}jDwmJ) zg5LYTlrK0@zUKm5fL2s7#y6Q}b>+3M5lEmzg-s}X;&8*VnTQqlun~pzX!e6f4VzAd z7KHA8{&l{QDeIR+{y6_k=wg^y%x@5sy;O=ICrK+R_2aq&(?(P+7&R*fSv}re4>k0( zTIb{9uo{-1S3^bE0cO575Ux^ih>xzo-XL9O8LEzxu4l>uAaX!t44eI_%+Na_Zb$1# zlp{qK#h*=S5lN4r-FZ^Rb(qYa@UYmQfTi3_LzPY!m~MA7@b|lYyFZpVoyyyk9$aRm zcj&Y+^K=aWvVWb3mNajLorH8M^b<{D-e3E5a#^%xK8)4FI!)I)zcr?hvIg&5(wXg zf--nf&K&nH4$B32&sqhZ{0pUpMF?J~|9fKiibo`+|8Oo@<$7-5_vHmOutwaS7>#CZ z{B8|LZ?r!$+W98a`^~{k*CS&Q3rUEy0OAKo^iOoBaQr=%#`7+WW@{uxR1se*$!&IY zU!eW6470_D1SekhVS_~d#M6o)b)t|J47v1Ud2;u@Jgo)8p3i;>qkgUT?uz_@Zdd;t zJlX&70tMIq#}#zDu(AFH0M~Tueq4+tb1394ne*Yihi?2Sg1FN3=U*~b|Swj?^91Br_bY=4!^hP7P^7}EYHNmL|I0>Siqra zC354exV}E&V5V4R=4|O#Xf^PB#Ib@)enMaK0WW~!2lT9|7D6U;zQn$6sEFA46d^~7 zx$!7ThMcW%^4IKUjP=_wUkgtLhUi_03)gGE8WH*v-=UAoV4w$Zg_wH#eENZ)Qni`P zi^`sP%C#`qkUIn9wM(DD#j}tyv<=kP0aTrRvCl`>F8Om9*U+c4WO4K&#Z>>fmywZ? z%Hn1h6-d#lMHrP(+>F2 z*_ZzU>@v<5%I15Z0D@d5gU!y?+g;t=o!340rJ|4cVUVlR>gwXWJX%Xn(i8g54`cz6 zjj%d7pYyesdt*#p7wtrCB4pL}XPL74nekG0+&wF;F8kn|K$&Xhol#D071y~D*9`y& zX?$MeYrCGNV|{QDuvE-l*|-1|LZ9W>$SPQ@}&VQ??NmPFffZL*BOpBsSm-ZB?Pi0(MxP2+vIWwoo$L zT_^4D|7nAlVv?%dgrQ}i$`sm4D_O?{Lc6A-dVqq<6D17r#0|H^u%uAyL+@A9Dr;7; z&Kl0AdX}frsr0o6Ym*)Nzcygl9K8ve2)f9o3cuzPzDcz(3u6N6F(_}kZ?T~lzf3{* z1B9M>_wCV)kHDen`Bp$j*Vz=Gc&PTfM7TNuet_398dXJ7k3Jsl5~)AZqw?|7@&9!5 zhZc2AV0%b~nc0G{|A=gq`4^`zYciQv&7)>`dophRaQ9DbT8wk|s<%_1y5m{xx+vxE zg2bqXP>E9GZk85j$$PQRT}VDWLusDqzo3=^H6;uO(aPDe?fI?g)7|vH5WCDqsLlVt znz}1Q*_SwEgQcVh5aUgzeML8ZLMYbO62_TFUn0k|1SQ16e1m&JbA-FN5bPttHJW4w z=M(KYI()ZTJw8tQj1kac38Zn6J88OJY?}jfYQ%9G?w5z0ZMdmQ(hXL>+U_z}3LIerhfG@&%8U3|FxcQ%xGmLu8H;Sehh8 zIti$$YEh@ykQ4+!Ff5ZSC<51syJw}=1;)9h=zFr77GDVo$4%!ZAAAFA$j`sn3-hPy zbX(B(=w;4N!1il_r^;x;KAtNaW&^wCv99;#$Jzh8imaN)UhhVZp5WF6E)^)bq3UYf zXbDBw++8aL(*@-`ir$D1V&&-{5%SNLPX24Czx*CQ<&htZPS{Ak8Ha;&6QC9%dShE% zLoBI{+`p9il7#}|`c9lZT^}3NH=CRve-br`unQ)~S zNGu9mllMRK!L^8!@|Qt|z=4ovY3|^%ACY}9ns1h}R3KwPWot2=Vo0Tz*a=D@N?>dQ zLZ~iEnY3WHg?(@+gO53Es3sp{>ru=t=&!#@jib4jM2K^)r=`Ri#%w#)=#om9hCB+m zYn)`cdc&0)*yK66{tEi;&|&sF8IH(Y32v?N^cRuD*d{S^DbYQ|YB0pta1Uo2yI4=Y zmB=U%U)yA>`!2hM&~o7-q~VAQ=TLOBqTh*^Xs?8Lzq-}eZBco9R%X~5MI+IyvWAgw zL2-QZ6+WU=URfyW{(hg)JSO?2vn)KN_oMk;U3)c9Z$k_|QT=_TOXPT8>I013MW-Ap zN`#;$kcL+rQeOSEvJp>rT}I@v5YyABzX2h|4o)B$gKrfqDp)~b`lwqS6jHX1r zQju@brD;X7iF`vM(I+R*cWL}&_3gZKIh7ju-Fro=)uNI&btZcf6}Pfy=C(=PR@0Q*ga0uGY&0Y z4%~t7j&*O3Aq)Iat)krR_lNLSI*%R3{-)C(b-E@iv^TjGR$Idpx4z*K$!rBr=lppF zG_Jrv?i;-5FyLG1}aw_xKSO`g=E$TvBt->0%=srBo$aB z{$9xU#Z*FKHS+A<27F1;47B*c_DWm*JLq`?|ZDzX97@^vphkVzAMX{#E92Ls;X9`92HWRtFn zsrs?>kf2`lg2!;B>>Em0@L>PDw_F#L*Qgu9g-QET%#jK?h!x%4b}p(*_Qtg4ivVSC zb`y?Y&ks<%_#_gIHkF;k>0k#vA0z}1!NAWmat28XUfA0n8u*69^ZN>w3z2wxGeHa4hQwor z${uF3+)KHh4zCn8vfG>43measQ7ApiW8^v3c=3{xcoY9U^2rPNcKRbdBqQ|DrK9)( zLw&T2ps0g!$>e!%Fa`YgbuW7fjZGG8sRo8R1b??W_ZIPfwi&Oa8jQJ{ZCqr?DGY#r z6TTZ(#9@WX7TNVo=;;d`cfQkz&-9LAg3tXVT9@l%eUGws9m2&>g8jYJb3A64@?p05 z|A+MMo+SMLuib$>H??r8Gu{Km7%36Rc=K>9AHlB$a78atXWb;ei56wA1hD_#0vG|D zAr}fKZxH=dVd%&+kNcqiM`(dR8;=0)vR(v{+x}x@bT{{3!f!`n9Xz`rgG*q9Nca2b z@QMwrO~+2QVmM23J!jG!XgCWCL4f?H#S-wJCM~2|m5N7>osLc%AglkxkoyZl1hM}Y zEH*TRUfO6=*s&5bgP27 z`FZ9`j7vr)mUwYh&<|4V{9)=)oFy&1 zw$<3SZJT%ce((Kpe||sCoONcNnb~`Jt-aUUr>|jkjrH={95!{e9?G;8=+bvb8xMIc zc5Hr*)$-qQYPWk0Dtc@(gz0@e;I||wrM=83&>`p%+>>egfbdT)o1cluite|2dbI*A z^5Nt8f9gJ2D8hLk?GQhiRmVBz8^5aRqfhc7s*C$R&4PRSiDyGzg2PpPrvaz)wdm5$ z{w2`WDqlrdlH-WWPYvZfx*cnD&O%~7D35ik*)Day)Erfr>H2%>#V+)Dy6*$+-osPu zhefmU9Li61F@OfaFFVOXNm9dZRT>H{&anTdv)vKq23v`6ZN3|rDzMO*OcyQIM+=2C zVocCbOwc2ROzQQWAFjnu6)Gxrep!(M-4~7G>ARIMxM@ih`Zf19JW&_D$gIIWA(En! zqpc#?n#u>}2ehK0JGk3l_;kM*li6HGk7W(`(QjI%9l$5+U{ycy9$5}HE?*;L28cw+ zJ}YS5;Ju8ZgKqS1c7I2OKsy}bG2dS0K$~?xhKE_T9y?VpehbE=6+nK@L+F-s(LOq$ z+$8UcQI$IXRKW=!>k673B;>D z!~2P#*nl5F6wBPM_yr+R6307KDYI!+v!{?`xZ#>H=FaYt?5+$E96{14neKaa65p|g zeFO}3xqJ1B>h{S+U_te~l2jp`K~~TJ z6{6l2)mSW>hUyoZn(KjGtu;+957@ZGw(>Qt1A#;wgf-Mr*YFA()O!ZXa^;wFD5SMU zGFjbIod}AHNE6{V=Tj~j(?)Be2uxUrFo5Gr%AvM&k}Lkr>}>7MN>(kYP$o=6#F8i~ zvz8xwcf%^|EQD53cEC{=4~fwBIruV9uTMiw3|?|0+&<$#=bvP=EZ9mI#U6Kgt<%a$`MiWxU4{~P7H(Hb$Es}N+ zI~sYN2!160`Ju85gW1Y5apr)DV9NY4$a)NI^AsAB3~2p)FDqWJGbFBG2w(9T$h?xV zRWg9YCvR0hk#~Apn5XURyx6}4cEfg1XrR1^@=-uRxGx87G6pm)G+TbnmYNWJW%IsJ zB#m8iIApel?_aJofgZWWPf9WRuA3-OLg8hesy#!>3bHs~*scwJ;NXK_AAQ@xJPMv9 zg}XTL9$_7=k~Ks63ehtPwc-TP5u<3@|Dg)6m^mV~=w3dGj14h!()ED=)bf-;`;lf7 z@qD_4Kr5$n;%6be-+yrrQCk{^W%-aE)Ec~z^RJxi$4w7gyd}|2S{f@pPi3GD-KeA$ zM0tY+jAA5Q>NxDT!q|h>QsjPUK!aG&9(o#aCDlYt%dr#AnuV{e(+^(BltSQOl=;xL ztf|fa?+d>Eeov03!v{IQJp2?P8!nFHVkQVC7(co44c-iD3G0pbJ zi%4xaq~jk~`<1O_0k5@!nlIp+AB)KEDQ(eNp6!Fg;!Z%D{q@-zE3m3q;EiN zX*q5yyRG^H!ta7vuK%ooX(hl7B?u*{(al4J-V+_JvB*k`gkc~87gTjjUgkj)=R*}M zfiBiY^M#};1BMp$zIjxHawAf3&ew2^jp^MmPJXA*Sv zpp_F^f`;x>4vEN%%`Pd4k6tKoB8=v5)8$rqf<9CLHxG)3>CO3jI6Z@f0LpYpyC09f z)&&iMNbzT4r>A)|g-Jv6=+bf7nul5@=W6r)khhf`$U1Vw7XR90CvGySt7{^jPzTg7 z+U=*zr7#b?(k{G;QHv1^{}u?13`~E59@TT2E^<4m`EoO@>UZo5va0;{1&{yq&J4Ke zzEK=kRl?3dur->tmU2olfH>5$LX}bXHg7XV6!y3Ua()(u@VSPmT{vZtY z&%`c${(t$RdfNJ+2-%OS)ut>;yDpNW$uHP>tZJ)hU8uJA$gcg^;B5Y^cSihW6U}qV z(;QYZH7x|t>33wMDn{Ik#7G|CEIhV+)IJg&V6!gjRY`#ug{QBDx1yFcz4=IX*3L7R7-5H}DF22M{xP0hTG z-i*8U&6T-H7XHGJ@mNjL(h*%P5*Ylv1gr;Xz;$MAoOucD9Z74pYxdfx>cHvDm>R#G z@68!L9dq|)Qq{a4G-Jo5gEu^|w&yBORRWK$`keju1#0n`_lb|0$72N-?B?KnoE&E) zZ=9d41A^!I6B_Gi+e&mqBknQlWTuE)l(zO7x#8DZocH&G7z&5EJMSPpfd=-ZwpXu? zcUz%D)4g)tCx2#ciM^l$pM=-InBVefEL zwOdkedwIS*GD8p$VD?Nc#b~Vj2KMS~BCwzuy<17|D)JQ-Y~$$=(@G~XOOVO6FI0O^ zKpfFXZPC+HQ%o2ouCYJT>SfnEy;%twszo>aIYAM~4NlsqKz$zT0#=qIbDzw4R3qlo zS1}S?N7D)pRkO#i+{C9_T_edpZKC^t1h0YN^&L_on$>+f@HAhJ1^U*e`qEyJesbVF zazQ9#EvuVV7p|_eQLL`M-gp#|J<<7Lykb8e%HZg_KG$}r7`9S7|BK1d3%zr^I5S zy$v3qUhk6x&=9eN&hJw-cwY<7&{s$uN`>{WAyz06Y2Ak>+dV0RsP#Kd59QRu(%PnH zWqCARN`kf&zp?NY1CPm{EA4aV#>U(lCQ3IrWzZu>R5f|9-Q^~@L%RF!?tbWl;Fn!n zp@zaYsdM`2X~Ggc+qYT;s5@#0c4)(%J*BILhCpoqXg}d4gy6SZ9NY{D^I1o+8=44& zJ4S}sI^2F3YU!k0MclTw?&jq{HnS02pWnCHD2<(})l+Wt@yP2h1Prliaod=))?Of{ z6d-+DRnyJFV2kWWndh#A2p1MUWWbaKZt(Z|(`@Qn69s6`t;!!-L86v>oU%dF>G`hK zVFsM`xU~L0(Yl=TB=B&5^nC1y%-Ru1)M;$$v-`Var9e^Ke%WIqc6WDIcwcRq#G(a7 z47^_1Ja8Az;0|V^_j7k#MI~E@q$>ve{=6)B$;}>%8oy1x!HU!Bh~a7RC(~*j-RIH< zd?QC62P!;ct-ji1%oWm^9&= z;f1tQFvZK~V>zniBy9f@9%zsItu^a5t@27-nO`3z`hXHsO1)Lf%!}rX3y`nimZnezS@*OLE>{u1pD@(|4O8o zD@R;H^xnL!>6BIE@pyoMk37jy0!M|k-6;1q`j9(e`{K~rzB2)fUt7|0jDECMRr%|U z=^a_2ez()(RnX~*-l3~ky>T=QJ+I;!R3?Bc=+#tA_6UL^mTJvH;@fY=zW^YW!D`h1 z3DiXen?bL`i&swQtuB<(pVY{AB@mg<6@vFuA$nSFc8SO$Jzf#|S=)jJG9wT$-cE9z zG6=_HL=pPF`30%mwt9R)IM3Xy(!BSardu3V?KeKk$US6T_#sv{m!!yy;4We+4DnBM zEriKBsi)Ecd$-(Rmp%oKGobO)!un=beco!h#p+zal}fpv{W2fN8E@T4w0)KI4x^07 z4Be#QB+hh^LfKrdMOMydX@;cCfesCeOXzj-@+`-rqD`Lc@vZhR%~ugSn58X!f*KEv zo9K-j7Xud$TBh!+thT9&YWUAi7o%e$k8cFp&lL5}pX*$mt~Z$9ae=h4{w%$_Us-7* zTd6ySYXe#g_2NB!$PhY;cEi`DrR7_R8gZEH{Hjsg*gkKCYVmY4^pXiGC$7+a7y8zP zv^!t7K(#zUb(QEAWn6@Z-=O_0je{S*Zgz_eq@)cPjp(ArFnWqb(v*I09k8ZoD`zAn z+9=?8=HPPi{OIoi8iBYoQI*;)QEJx>Pd%4>57LV%LGJ!cdF+;m4V%A=H^yfAPsR(@ zue(EWr|a!$any1UP(q-EsI)M2YDHyb42*73rhr(`R^V{6Om}h6iXeN>kyDM!nI_nL zh0e%wz2y|gXV4TuK=VmOt2&6lBT39LmK&rH>dYLM3+#X|8iK;0W4cJd*w@zWY)O0n z2I#=9zVBG_T@+B5kIkQ{XLzs!A?to3(a@zDk_&mV$Wq4m&^iHc{!32502S~t%CPo&GWWS1DQx~YUunL4br`9TqPPO-X#~Mfvvc$EYFcqMW|<1T z!_?BI!$n>u!$q$}3mZI09QnOD>ZJbb^QJbh+ko4ia;T(k6@Og3Tyo^QubtD!dHlWe zga1kVGdibN&ABbXS|>h8UiZ+cU?C@*5gE|SG&`kEi`NNM0`GA8@(*WV7jj?x*OI?R zoY!jFbey%i;6eU0)+W~d@Z4zae4-X=-jG;g(T+GrCw)0mN}k+GKMjmMrtL0$_^P0u z1;{EWC^Sy=*C-#N2_-V=3{U@&O5w7`n<Yv86}Eqk55hp{j7%{iV0g}E8S?*s0O=$EtH z0KO^7LNdEaaGFiqe8xoRqO*MEnL(k79Kd>RvTn<2lB3SybJQJ%McQL-K~8&7j(dML z;Rl`Oj(|C_oVZqneNI7+MONqdqfQX~WG=y(o*G<0C^1qanAUPNG$$D;_n~T7 z2XR+T4Y%rsESEVRwjnT(z}bq!)+BWHXmt=pSkP8yh&g@_BL&5x{i>Okwpecs7!5vu z6_H>wKm4xi#>pwCzLx4~wM0+W=1ISN$Gx6jeuywf+_bOFM@QqoHU7i&vVR}%YP`a< z`sW)H=)S*6{|v(c{=bb0+M?ezIt3*jF7^lg)@WTnHrhA&_RgUfXt{mt+Z=YgY|@+E zb#!u{cpPtbu<+LCWaa_VfzbCg@h^>eFRq1HXfumAhb5 zY6K%3s?umWmTI$>Ar89rfvQ$^ev;oR2g2-5!{V3xmWa-S5(1(Kda%9&;;07(KLCDA#PpRCfV?vCKFl+;g-zhED%~y4{vGt&(i=~n-6%6RXXCPGV6SZVay?_M zA0ngKoukEU1`dcE95Y&>zPK54pRuZbz!35n=7uxw_>V5lOPE_;?Tv+Oh2J%@qT=o( zG3K97Ny~ByM)PL40J-vE@JVtYsqzwIj&OQIo_7g9!u&IgpN6Vx95mJXAxM--?tlQn zy~L_lw)wbkl&AsRQU8P>{S?d+ocAJuAn?w(dNTzuTtx)gOUq+_)$ux!o3$Gz=aZ-Y zRl@kI(rLJ8)`;ps*)~{8NxBvz%G}7qzD*8?mn38yDV>)tLlghgxkOeTHLcyUgPoJN z9K5D4`P?MaB$=naMkB<@$q6p+wesrCP#m>P?YooH)|Zc~0dRG87ls3&cbjb77$IBe(n-HCPPR|B-8?VA<$eoH0r8eR0;%fG zD8_t~C&R5SV|9M&8$Fj`0eHOcP8P};jq%jJZGS|JaIj_q{}k$-C}(-1RZb2eEJp$! z$8m-*c=lPI5Z1)G0Itu1*vUdV*>0< zTZiv!YXoAWBrF9>t7ltV)h3mpDknEB8a}?1+l2?3oM<+n>PNn)tc>O-klqVq=ib0z z-sJVX_uYEEmH+$(=&5O;6NJcy_lrknrnfj_Tc;FIfojxR8M8hS4_=Z&c2!&=_SwF~ zGOol_U4a_J8NI|fhCD7QMxB@m0nsDirn87dCJT%N=rkGIvdwF$0~ zz^Rj;pFQr+*V62GMC(0c&9lCw-w*@oS;)lW-kuLI3-yhSkWl6PJ1yBLE(srAkC&V8 zWMSEPFNRnei$mglImQO$X~I=HTpGrCh65HOuzh~PpGEN}6c*~O361rJ0pq@}Od7i{ zn9EmrvCxlQ^D+FC9*f~6e1qt8C4}-f)j7FXU{4V8G@@ddAkrBG41b6HN7lk^}A{o@-j*m27vEP%O8s3&bb z%Bz_C%`L_Lse}}=F6{4fafE~8+kLc4$H8A>^`)UsqX&9~MXSqzYVy~pv2w4f$CVCv zO!R~&M4N~uDI<*T#ug7b^5Cytul9{(M%d;x+psL&eY#v=57pdFHh*D~J4odPz5nV` z$%MDXe8z{knBhJJqO@}&s+5kQmMsQCsFth3kY4N1QG|sE-L8HI{8bB~L!iwjOvi@l zAq&JNFi|%Coc-M#V=G^GMI`M|9}&VF(o@gDP}A2ZH87Y8tQ>W6^4Jfi%i@3s&pX4{ z<=1lg<{H`nK7fL3hDBoo>kqw~wYOaxA* zK4!}xC<W-@OqhRwP5 z%pR`)`1uPa>tu#{q;AIZf%(El$z_N+$hFQ^#5jGfHDqAHi-qVML&MLrJ6cecgLea& zB9Pxd)MWsW2S5;%uQ^d1+&45pwW>3o;6-)G5xu5xowuRh3-W4&ufZ%rkq9pa)PAR- z>4v9-F~+vPn`L&mbt9DWxzDz}LiWL77yW_Vt^d_CP%_I0?*?ZK4w&p?m~s~1K7pve zgVrO@;IYe=&)?0R9>T$JS$qzt1dsZ5{Wg{!fL;k08c_-2IWTp>Vvr1iOAZy-O0dgx zXlf3c5)X9G6W2%%g~h^)tGw)B(*2~(ZeW8-02dY^Wbwj~u*lB!C#n@3t?Pz9*4>0m z&b>}SKrm9k7tcQBKKMXk^6_wg3&R^>ci?Y0#Z(Y9aIiya_%j#UvTT&k|0eS3)=fC? z@oN#F6uEIhy?|R)b@yOwGuRR*b?D4*q9W1KadBo*zq|F9##}rkS$$z+m`6C{&&WbJ zEh1er2=D)Re|ykR*p#G{u+)QWIU!#D_q|_?lx&BMj%}cB!whsqAjCWb1u{?Nu&;%CXaimNR-&m8<1vdd9rm zA`h;dE{so&iV?w;$`@_uXv~fx^yL(?%k>vB?Y3mjrtMoiDeoQ+W)MH$6{(#IFa~35 zE7U&}El`Khjj-&;H`tOq5|qS{tF@jwAM*B1gdY49&@3mU>m z3>xFf-zQ<(IrCRyui~(PgPt_JI!ExfN`-mz^#=h>*&teYfCTzy$`#qQUMfVp=|v=ioEa5L*TtSME0!s=zye(4PgLQzn@ z3UJ%joKcE^u#CU%9Y8Oh9Crk--%iv-1l#F;x{#qc^TTA+S7F!mDFBcxra_=VkSx;8 zqe1ZLBvC_^)RpCOe+uL6&5u*h#grm2vc?XR2OlLuAWU;tGmoUe2h0TiXpm1{`tzZA zNh}?dn(&C=oIgy@wxkF~`@}Cs$YXpF)I&e(h;#G4t1~!YIMHyw+RM~cv$FT^HI2FoDA2AF%9jcKuCxWeir{3l#!ppUYkEGpAMn}x+9ye!k zlFz*qXDcymJtgd{s8Z54G07bgM0@3^Ul+?rrcMCEkK_uW69qsiM&#nXoPk-*2^ETA z0>O?i21X9IPC#6oLj)qP)D#aId=ux8o`CXqe6FfpDApo4*u4ZByLE z8$J;J8RSNp1NH}GV2PXw>e}TJ7Dsd?Q)pgyoe6r^?NOlph=W`(j;m^eVY0DK|7^ZO z7zK$lxhU)1K8@71YlQm!eF~Jh#YgnI6g*(dWGfGqsf1i;e)PrTxM#h?qapBtY9NHq zhdKj$20MV*$!QTPo7==m^5ue7wUD;)bxgq1cbmqR2C`mj-$i9K2eh1=P6EQuqq$Ty zv$moITJFpUAj?Vx#C6W9BgYgo%j~GWku7}0Kc)v^It)9XdBf*sYblE?NW^-^+BKLMCjCNB;!`ME*-Gg~r&r*Q zGB3oE37iLN`=N$I)<}R`TZxhc`WKv;1x|;MQKr$KLjO8}@f5nZPwtc-xVXFmN8-x4 z=Hhx6#<%48Bq?B=Aaaf=t#*n*OJ^df$6*cZl7r7?(3N<=XBE>~W6~Y>WfUEIm=@EC zG?o-y+=-}QUp9NNGMCVuP?gMjiS<1YV(x9I0Gb`eHQtHC!=!Yej$C-NOGO!u3LkQN zJtA}oCE+C%Qb+!0#p}J9$1ldd#u|UC1|M4jUbK7&r;SZ;=@m~gY@1UrrdsdIn zvxIx5(O6ji@mOva3Nm?&KYGSbv=Znv_=2(1imR=loPWr?wq4GEY`j{{_g+!Kg@Wz| z>~@`RJ`m_0{PX(EcBw>J++4~pdit)&C*L9#E};#j?Y zlOc955)u=aWqBY!2CuoIX<=!ZS6`pdz{PBBZSB^&zOuZ0>Cx`i-oG@Q4;HNM`;?nO zCIK8<_nqDm@39=P47w5kD@dUJe<4#p@NJ;qGaXUS&R}yKi9_?O*gah6c=hRnPGgl9 z5pgKmc8!d1WTWf7Bllx6DTQBJgLwcP%_*F9W5fkrm{WBL8*gG$wv+_huIgn5yNP}E zE%W)RAkNdjvgAm@e~~^xi9=$4bB1^0phN2B6#i1GAZ`=6?87g5Z7zL)4pd*snTbA# zBI;LQVhG+B)>^Lgqg;JK7h_Hrt?W$MR-0cf6V*c6CF8VZphLTIyTKdSpN^`w7BERw z37oK9oS*-l2!*o+YT_Jk)tWJWuS%fNXZ*!UK?yg%Z`nhk5pdWnMyju^{1pO9 zcbFwS{-7u%|G3+E@&5A`K6s?`jhK4Ts<8h)(#RL(5aMj5QQhL_Pn2d}?!EraPj*30T7F*JXNtF z8Sh0jgw*EN8*;6aJV1B=v0DeRlGnSlZvB2cc+p~L0OlxUhy3U5N{C}-n1V~*AS(zL zh;_2;U&2L(`0|JWd>F&Nh<<1dkSg*nV5Z&JOdoj|ojh>Jo^TT3S)vXem$OQ8kCHF< zTa#hp;>fh!HjsIckqS^52xp^$BMQ9+fjy9hqrvR~Eey&ji!en@eX{QJ(H*WG>P$`?Lww-qm* zQ;lCL-)(fk0rzI;T^>aFjON|_{h8_gg8<|Pl0IhNQ;3A`6lg;lVO|J_;0q$K0ZeNu z8^pO_O^I_^bXxKhgu)bPVfol(j9oZQt3=(SRn6_=N15Py;n|{OvA2RA<9(l&$hwN&G-h z4BZSS2UslRC+^1eZ`0(i(7hpM!pF{a&89bmSt4_0Mmyn$?oD1&tn?iAr%U_6u$i=J z_D56xR)-L6>&?F+zrpU>zp5i1sHIEDjDh3fNy@xU#W+`D1>D+9nv=PGE&gNVE2aAE zza|(#e}?;{^l-8ur+uB)rC!7(y0_bi*E&bb05IfVop;qQf80IDoP~!MdRM#PG`PN* zdA*c>oaN`_kQ$wtJ-@O~`H(3y*~9w=>rCvp{}f%0G3bxP?SAP?<+R)t5k|gU=IMHe zyk2bBBY#F7%q!RjTWRnz_P}2es7)YulG&&Om9iq>N2@dWP>L{%0=RuFXhJ?V8IMFR@ zA3s`t&t8kkXS~f22ARQhv}!vUAbZ?7m=DYKBj*KrjLWdTk{_XTs-NNWYAwf5`TzHC zi?z4WQfk1q;xB(7R+)Jufc4O#o(hpLKi2d-vro%FF=BOouWJ}kyVyjvEHGAZ+0Q*4 z{YWBkM1brpf~Qc~#!#6z?kZQ}*^_;`4rX6Zl7|8UgV@^1(NdExBK@9hukX$|)~ zV&QrhxeHO?5ThyVA)powbU{I!J*W1a>QLXvA^gpqwZswS2UZ+@FGFUD6C%zsb`r0- zG@IzUfvVlQz@_^2j9+Trr0XkVPQD&4>gHdYJ1dd4(X(q}AApb)Z|+=P&=~Da#o+tJ z=ZQXc4=&@o{i6V|QTrPBkFm}>Ki)ST+?zAv1}tgL^&~AUHe+(M{O?b%EIuI0266Ht zvSk^rq+nB`|NcH3xu03{;fP>rTcsOeP8Gw}wfVD$Ewf6NQH!}in%X4BcOY6RvTA_h zN&FTBrY_GLRPx!=y!H4enCUz)egS%Ok;4H3R3UN84_G?oDyykQlxsC!zifO6syA4t zAveB|HQ3s!;o&V`)!U+hh7exq9rwM_1SgZV|8DXtY9=dHivCkyf{V$}upIk2bV;1W zg2PgWl~Bf6AH5HXolmj0L#f@yQya_4K5^yaQI^?gGN~!(Vw-zg!fyq3@E}*OH-WG= ze@7r0*kLH)I_>rz+tXgN|5frJWPDG&UTCzhtsTb%2XryiN=ndL`lo#vV4Lz+OBy_Ro+n%bxv_Cng7vLXsv6kA=YPAMiBCwdj~nUpepnlL zyxIXbH>cs$^zE+Meh-D)Qk;+Nj$}Pg&}x07;ZN9Mcq0{mCeObaVxBoOOO?(73V@ZQ zbRUf9mV{x-TRM6cCh*&adih#gZV`zj@Jr2k6dGa(o!o;|FIJTcU~o%>lcSE;-FQP1 zZ{77&GN89oKS)<7=r;1L^oSQA4wZGk=6wp6h4BaaZ&3+jd@NYxlN9LB;kkA!7~<$b~r5e{7l?CTAI-qZyv$L#b?%{S z(_$p4*!p|Xgh=ECoveD#r}9_Y{tae$Lfs`yx-rXw&HEkP&oKk2U(iEy+Z<9(#1AEc z_|0G+1KvXX5vAz7(Ab-`Ea%RB+ygu5Hf8`K_;uGRCx4Y8Ow6mpAKU?0Vf#+U&0eN| zoTxB7T-B<*c1)w9qU^^1$!3)@{3XLkbL9$c4o%u<(ku37A{3*8bvuQ-Yob(uEqV;ELZEY_{8;CC|+@uRDi7r77#0D9UsuYeC1F*|T62_r~RUy%RsY z>3{JauIKi!zhw7DnR965m-16cu?wil=O>)@1GeKPO`b4i@24+2;=Z*NM1ePOamH%N zcWrsE@Urb^xfy~YEh#Bn7Jabrm8gN8t;K4i+1XjUUiZK_Y9vS5b@g=jC%c|V^6#H? zpaQa#^oM>YK4>#Q_RsKM!hU_>JXnFt5 zo))i|^LE-TA?mGUEmgmxuDey)w(4m^3Boj`X`s;IKa7GQ-QoUu-C4rTwe`8xS>Qxu zYW0pXT&0@3FCV-_LzYS`!=R)T!R2=&N#pWfl!5ZZgM>0KDh+~Mi9-m3yKsmwcNe`> z{Ivc`wwmmz^pZj~b3nYlhYJi{N9Ci^EYuq3qU?iDs|$@4k{x%wcwilT)F4nZx$so_nfO!Whhx z7`@CUpSbrUBX$16_**yJ2u8NVUuIih=#o%=BQa<;FP-7*d_vlJ2fi{G~%dr zfthS=>Vw;T36gTa4geZB0&D~NJKMu*TFNKjBv zU0q!ugJ=7?enwjxzf?5&+^p%p*nrpjP(_yI9~7G`R#^o$A?~y7k~Sapl0_s}S*ty9 zf0Oi`VxF9_Yvxy0(;8qH9`@oHvQ7zM_VOe}@%xqp^g((zt(9ld0bQZMf8I>#NdQW) z3rct|!7LbNMm*_e8fA{uOFqBQpYSCfSGkPvOXho2A7bieo6#4qzK$&l&ZM6m04>|$ zlLCarqjVK7)1TLt!<9`jD`HGtgg)R*RIfAxEeVSmRH6Y-h;5a*Q-zL81^thH&`FHv zcVr1iD+Rs5zS$}X?idSFIxp<;)uiI>IN!nJzf;)nIJAnX1fK8G#Yp@Jfzy5XgWpSU z`&O*=QrUJ#O-V?0_-tNK)N*)tegI6JNb-qZayDvd6K*~0on6tGM(6{sUE7X(t$k+L z(95S6NIC#eBv`eX40Uk}CD_NS)Dts#k8{Cu$^>51(p;KF8Gzs}@w0YI-%pt79Eoo>(#)yt;3{ zwa2$;@YKk6SbJ2I?vfB<+0vUJLGO!kCoa0!@8bZ^bF1I}xd~GXRFS239b4*FZ3M)Q zA8ibzEFb5-Sshr^N#1;fABHfZoi~Tl<%@m3)~k~Xgts4BK6z*_0b2E`M-4_CDe6cC zwG=Dv|9#XY3sYq?G3DtNbued5Jj&X!_hKc3o-~%FzKZ)^Mv{t?%IE=1g;E8ZM(A?n zhUF~fVn>-9ng<_dSW{5=_7Ab(y9f{`dooz*xHYGMxRHD}La){|3e6&;diB#cpGz3~ z2-R^JEg8&jMy>@4tGNja&h5_y%XSb@m14oYdYxFR;lS)g+HHF0RsRBZ)2Q9wnT4RF zv?wN@EyDv48C%lzvw_w{9S{vg|G}+`M@Ap2jg`Q}mf=I{3S-$NRFpWygsf7!&Nc-< z6a-r1I|*n#ZkUp33ZxN0-iYGA3naebAm^n!AXL=`tEH=4qgH$hno0YXETK?RevrvS zr?}OjBjnhIYg(Tok2tJTBg?d~d$uU4=r19v?Qfxue zViW@+B44sh-G!E(?cS5fCd@)oSJcJN7>Q!YcY~%aF?#L*^XI)OW1$seZjy`n*W`0kQ+8XhFkoKQf&4u%ycauiv@sOj$6SMA=b#7bG7&};ZCwyW#&tmqKUCo>RaHo#`j=qTr z!X)y&f@yzHW?s7A0X}a`kmr;QyAt>(vY(GGhgXS%>RPyD{PDrh!hX5KLQ%88yu=}d~Ar8Y1k8?$)A5S7VaHD547 ztO-st_L%`|i_Bd0xYn+RvFp3zhZvcm06Ifg$F1dVhpLSFo>L4^``KSSDRRfqvg}>}166H0Ed9C^(rql^&b-G=Mvq-2`WtCG?5LKF+MHj*0Bs09^%t1r^xq>ou%m4&A&@ug zL=juYWGd}9TmA;+;N8!TP4b-@CrlJAV1&7|ZAHcmwEbJsty#ChW{pp5L-qq;Sh;9F z!w=&~d{`1AqRdq>7h?;BGjdlkA)-vs&QS!TMEjv^xF#QUa%-|Q0{L-fByN;czQ{T}2%tiI&gEOYjxRx&48Q`d97SE9LK* zDD(9!g#j?u1$>TW9=$TwF1NO?f1uq`9YGe_jN?BRx)8FucXYT4HbdPo@%y3(&ol(T z%u`rc3WrDDonu2*rzlx95v}ikyaW1Jo$TMWc#SI=Mz0g1&>bSxQU-y4y}E46*U$H&IPDH zw~j_Y(=^71V)kmCiL%S_|3Mp(jr(%zRzfDo(X_@y+AGG$w2*6>WU0Vzs3^rJI!WU* z!sU%|ZBq|N^px~;23<@4rP;@3AhCn;UBo*)aKaQ@rrF(4Y6I;fsK=H*S!YRurM2b; z)c@S8vae(ZLpS!wKJ?GD26sGk&Jp@g~MBucAxL=Xt3O_=d1Cy zMf9p=hf~+-7gsdmUsHQwApD)_2F9gq8r2ohEc)BeN6X78wO{oi@kt(!i}95kFK=Bz z<8)M+`}_3lv1108PZWN#shIyKFQBaqVAxO814Hq$Jvyu^8*3Rp`EpFCvArPHN9gPl z@;H7ou?un9xxYN_2YAtX>Z`TuZFp&EHK454m-4+FGZK~*6c^q^finNW@4ZN#;rzm_$F1t0Z+(Kmv} zEo3DuAvkrQop=s5SM+}A(YwIhG$mk5y}YdlvXCicJ>wA@@zVvx=zd|tI48rH9R z$rYhM;w&n=BJ8FE=6bpaN>l@&JnG-P7(u)w%p&yS6E^LxHbgAZ)%j+t6xwaGUUTqo zt|QFpb`q5IlNgmvw{1!e#tDy{DpN*G0ePC&Y9YFo+kjom)!TJTY|F+Y#)3TC=-HgQHT3!dWfxoNL(Q9l4}UTj6ZQR z*kq(d!{1cHXA5Tlyw%y$CCsp8a^TSkQT|~1W>^C>TkvG6Kv>&nNl$A7y^mh(ETz8- zcVi=e^2<{g(!LS5>d=mlpU?02m`v;oR$o@k_k|!C3$=m(!25b(8V%$;lTtAH#-=ls z)$ucRJZ?9g_&ja_A++_FNpPS#YOkle1@On4(UincVw^Ssa&@2B;W9kL$lbT%xTJ)j zj`6Zza0_8O_d1pvRT7#H2~4anuc=EJ+syO?mq)ciNKw;u4-yGMqBLG|=O;QoIca{{PjkPWl8Ce5%lGC=M{5I_ ze3@4etCQqU3POoi(35neu}kv}fNdO2HfKu63*eUbC80@|BI!C0l5Yi12sU4fBC=A*pdAf-XZ3O!l3dCcKPr8!hl zTH(*V@rlV5yZd~*(O{Y)ICZjNq`pW4P7|!8gosL&f#lz2vH1;nTYRuIms9=MWLDtT zao?%bvuCBhfN3BPeZ3*Syo)MJ pSrt#^onvI20kbDJTk;2|)!+>aaTaC98^_iMb zMrWk;6zS^Le??2e#bwb{d@%_`@Rv|pUs??x0}6CFfbVK=K@U0lshbw{6AGPAYefsf z@rjJZ0*!;mC;gW4PMI$**$9PbazFvL3Qq#)Nz^$xtdF{Jz2fuG7&`R0QgqhBPwQxi zteEeg50&m;}ZLTWr+ObS1Dql{U;oNal_hUn1{Q+R>Bit$NhlGgIW=~{v}3;hZ*4RuB49K4+_AQ3X=w<)|( z6WcQ``=_o}eRf^r%AH>oJMap8IXAa21|}Vx8`d3gczKh zqEF~NWt?63KqL>ViQ2$+C%Eh{%!I=&VwhTv&-_LON<%D(eZ$gkFi6c)7cEH|&3hQ* z-bh!Z<6v(S_8h*VZt{=pgLi z=)vJ%lpo9A5?`Oqov-I zKdrS_p1nGVPLzoRP9L9tZKYxegYq^MtcWb%G$_dC0CuCxzA^^pE0l?N@qT4qSwDMUe&u?-4Cy{A z$Liip2K17)3gzOA6F|+0U2Qw+-IWGwG`t?BDBY<4$^o80#`Sewq;z1V#!lls&hX7)QcO0=OA;cu=LO|?DA>F68@ z_FbZ3u6+46{}Y)4X8p&sU;!JJEekGMC4#!;=OQ!?P=5$oth59p5pQf@GC2OaDr3rLuD{sHUJN4P6-G5@(bL=)W!}3qR^Zk~GP9Do%F?d+V zyr-X(;wO Date: Sun, 31 Oct 2021 12:08:50 -0800 Subject: [PATCH 10/26] Refactors reagent pump code --- code/modules/reagents/machinery/pump.dm | 205 ++ icons/obj/machines/reagent.dmi | Bin 8928 -> 6662 bytes polaris.dme | 3281 +++++++++++++++++++++++ 3 files changed, 3486 insertions(+) create mode 100644 code/modules/reagents/machinery/pump.dm create mode 100644 polaris.dme diff --git a/code/modules/reagents/machinery/pump.dm b/code/modules/reagents/machinery/pump.dm new file mode 100644 index 0000000000..6c9302d61e --- /dev/null +++ b/code/modules/reagents/machinery/pump.dm @@ -0,0 +1,205 @@ +/obj/machinery/pump + name = "fluid pump" + desc = "A fluid pumping machine." + + description_info = "A machine that can pump fluid from certain turfs.
\ + Water can be pumped from any body of water. Certain locations or environmental\ + conditions can cause different byproducts to be produced.
\ + Magma or Lava can be pumped to produce mineralized fluid." + + anchored = 0 + density = 1 + + icon = 'icons/obj/machines/reagent.dmi' + icon_state = "pump" + + circuit = /obj/item/weapon/circuitboard/fluidpump + active_power_usage = 200 * CELLRATE + + var/obj/item/weapon/cell/cell = null + var/obj/item/hose_connector/output/Output = null + var/reagents_per_cycle = 40 + var/on = 0 + var/unlocked = 0 + var/open = 0 + +/obj/machinery/pump/Initialize() + create_reagents(200) + . = ..() + default_apply_parts() + cell = default_use_hicell() + + Output = new(src) + + RefreshParts() + update_icon() + +/obj/machinery/pump/Destroy() + QDEL_NULL(cell) + QDEL_NULL(Output) + . = ..() + +/obj/machinery/pump/RefreshParts() + var/obj/item/weapon/stock_parts/manipulator/SM = locate() in component_parts + active_power_usage = initial(active_power_usage) / SM.rating + + var/motor_power = 0 + for(var/obj/item/weapon/stock_parts/motor/M in component_parts) + motor_power += M.rating + reagents_per_cycle = initial(reagents_per_cycle) * motor_power / 2 + + var/bin_size = 0 + for(var/obj/item/weapon/stock_parts/matter_bin/SB in component_parts) + bin_size += SB.rating + + // New holder might have different volume. Transfer everything to a new holder to account for this. + var/datum/reagents/R = new(round(initial(reagents.maximum_volume) + 100 * bin_size), src) + src.reagents.trans_to_holder(R, src.reagents.total_volume) + qdel(src.reagents) + src.reagents = R + +/obj/machinery/pump/update_icon() + ..() + cut_overlays() + add_overlay("[icon_state]-tank") + if(!(cell?.check_charge(active_power_usage))) + add_overlay("[icon_state]-lowpower") + + if(reagents.total_volume >= 1) + var/image/I = image(icon, "[icon_state]-volume") + I.color = reagents.get_color() + add_overlay(I) + add_overlay("[icon_state]-glass") + + if(open) + add_overlay("[icon_state]-open") + if(istype(cell)) + add_overlay("[icon_state]-cell") + + icon_state = "[initial(icon_state)][on ? "-running" : ""]" + +/obj/machinery/pump/process() + if(!on) + return + + if(!anchored || !(cell?.use(active_power_usage))) + set_state(FALSE) + return + + var/turf/T = get_turf(src) + if(!istype(T)) + return + T.pump_reagents(reagents, reagents_per_cycle) + update_icon() + + if(Output.get_pairing()) + reagents.trans_to_holder(Output.reagents, Output.reagents.maximum_volume) + if(prob(5)) + visible_message("\The [src] gurgles as it pumps fluid.") + + +// Sets the power state, if possible. +// Returns TRUE/FALSE on power state changing +// var/target = target power state +// var/message = TRUE/FALSE whether to make a message about state change +/obj/machinery/pump/proc/set_state(var/target, var/message = TRUE) + if(target == on) + return FALSE + + if(!on && (!(cell?.check_charge(active_power_usage)) || !anchored)) + return FALSE + + on = !on + update_icon() + if(message) + if(on) + message = SPAN_NOTICE("\The [src] turns on.") + else + message = SPAN_NOTICE("\The [src] shuts down.") + visible_message(message) + return TRUE + +/obj/machinery/pump/attack_robot(mob/user) + return attack_hand(user) + +/obj/machinery/pump/attack_ai(mob/user) + if(!set_state(!on)) + to_chat(user, "You try to toggle \the [src] but it does not respond.") + +/obj/machinery/pump/attack_hand(mob/user) + if(open && istype(cell)) + user.put_in_hands(cell) + cell.add_fingerprint(user) + cell.update_icon() + cell = null + set_state(FALSE) + to_chat(user, "You remove the power cell.") + return + + if(!set_state(!on)) + to_chat(user, "You try to toggle \the [src] but it does not respond.") + +/obj/machinery/pump/attackby(obj/item/weapon/W, mob/user) + . = TRUE + if(W.is_screwdriver() && !open) + to_chat(user, SPAN_NOTICE("You [unlocked ? "screw" : "unscrew"] the battery panel.")) + unlocked = !unlocked + + else if(W.is_crowbar() && unlocked) + to_chat(user, open ? \ + "You crowbar the battery panel in place." : \ + "You remove the battery panel." \ + ) + open = !open + + else if(W.is_wrench()) + if(on) + to_chat(user, "\The [src] is active. Turn it off before trying to move it!") + return FALSE + default_unfasten_wrench(user, W, 2 SECONDS) + + else if(istype(W, /obj/item/weapon/cell) && open) + if(istype(cell)) + to_chat(user, "There is a power cell already installed.") + return FALSE + user.drop_from_inventory(W, src) + to_chat(user, "You insert the power cell.") + + else + . = ..() + + RefreshParts() + update_icon() + + +/turf/proc/pump_reagents() + return + +/turf/simulated/floor/lava/pump_reagents(var/datum/reagents/R, var/volume) + . = ..() + R.add_reagent("mineralizedfluid", round(volume / 2, 0.1)) + + +/turf/simulated/floor/water/pump_reagents(var/datum/reagents/R, var/volume) + . = ..() + R.add_reagent("water", round(volume, 0.1)) + + if(temperature <= T0C) + R.add_reagent("ice", round(volume / 2, 0.1)) + + for(var/turf/simulated/mineral/M in orange(5)) + if(istype(M.mineral, /obj/effect/mineral)) + var/obj/effect/mineral/ore = M.mineral + reagents.add_reagent(ore.ore_reagent, round(volume / 2, 0.1)) + +/turf/simulated/floor/water/pool/pump_reagents(var/datum/reagents/R, var/volume) + . = ..() + R.add_reagent("chlorine", round(volume / 10, 0.1)) + +/turf/simulated/floor/water/deep/pool/pump_reagents(var/datum/reagents/R, var/volume) + . = ..() + R.add_reagent("chlorine", round(volume / 10, 0.1)) + +/turf/simulated/floor/water/contaminated/pump_reagents(var/datum/reagents/R, var/volume) + . = ..() + R.add_reagent("vatstabilizer", round(volume / 2, 0.1)) \ No newline at end of file diff --git a/icons/obj/machines/reagent.dmi b/icons/obj/machines/reagent.dmi index 7495451380140bc952cf64701d5480f8a84f02d8..7a284942bc945dcf1652c1bf487394cd338ac452 100644 GIT binary patch literal 6662 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 TNn+stJAm3lO{G!=i;({Upoje) literal 8928 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 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\_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\__513_compatibility.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\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\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\spaceman_dmm.dm" +#include "code\__defines\species_languages.dm" +#include "code\__defines\sqlite_defines.dm" +#include "code\__defines\stat_tracking.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\_compatibility\509\_JSON.dm" +#include "code\_compatibility\509\JSON Reader.dm" +#include "code\_compatibility\509\JSON Writer.dm" +#include "code\_compatibility\509\text.dm" +#include "code\_compatibility\509\type2type.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\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\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\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\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\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\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\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\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\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\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\antagonist\_antagonist_setup.dm" +#include "code\game\antagonist\antagonist.dm" +#include "code\game\antagonist\antagonist_add.dm" +#include "code\game\antagonist\antagonist_create.dm" +#include "code\game\antagonist\antagonist_equip.dm" +#include "code\game\antagonist\antagonist_factions.dm" +#include "code\game\antagonist\antagonist_helpers.dm" +#include "code\game\antagonist\antagonist_objectives.dm" +#include "code\game\antagonist\antagonist_panel.dm" +#include "code\game\antagonist\antagonist_place.dm" +#include "code\game\antagonist\antagonist_print.dm" +#include "code\game\antagonist\antagonist_update.dm" +#include "code\game\antagonist\alien\borer.dm" +#include "code\game\antagonist\alien\xenomorph.dm" +#include "code\game\antagonist\outsider\commando.dm" +#include "code\game\antagonist\outsider\deathsquad.dm" +#include "code\game\antagonist\outsider\ert.dm" +#include "code\game\antagonist\outsider\mercenary.dm" +#include "code\game\antagonist\outsider\ninja.dm" +#include "code\game\antagonist\outsider\raider.dm" +#include "code\game\antagonist\outsider\technomancer.dm" +#include "code\game\antagonist\outsider\trader.dm" +#include "code\game\antagonist\outsider\wizard.dm" +#include "code\game\antagonist\station\changeling.dm" +#include "code\game\antagonist\station\cultist.dm" +#include "code\game\antagonist\station\highlander.dm" +#include "code\game\antagonist\station\infiltrator.dm" +#include "code\game\antagonist\station\loyalist.dm" +#include "code\game\antagonist\station\renegade.dm" +#include "code\game\antagonist\station\revolutionary.dm" +#include "code\game\antagonist\station\rogue_ai.dm" +#include "code\game\antagonist\station\stowaway.dm" +#include "code\game\antagonist\station\thug.dm" +#include "code\game\antagonist\station\traitor.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_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\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\telecomunications.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\effect_system.dm" +#include "code\game\objects\effects\explosion_particles.dm" +#include "code\game\objects\effects\gibs.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\manifest.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\gibspawner.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\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\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\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\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\only_one.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\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\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\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_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\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\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\flufftext\TextFilters.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\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\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\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\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\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\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\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\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\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\rd-readme.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\tables\update_triggers.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\dnaswitch.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\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\southern_cross\southern_cross.dm" +#include "maps\submaps\_helpers.dm" +#include "maps\submaps\engine_submaps\engine.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 c2a367e278bc7942d141e28cd28f08b9f35ed410 Mon Sep 17 00:00:00 2001 From: Atermonera Date: Sun, 31 Oct 2021 12:09:13 -0800 Subject: [PATCH 11/26] Fixes temp sector initialization --- code/modules/overmap/spacetravel.dm | 28 +++++++++++++++++++++++++++- maps/~map_system/maps.dm | 10 +++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/code/modules/overmap/spacetravel.dm b/code/modules/overmap/spacetravel.dm index ae1bca7335..386d3be0b6 100644 --- a/code/modules/overmap/spacetravel.dm +++ b/code/modules/overmap/spacetravel.dm @@ -14,7 +14,19 @@ // But pick an empty z level to use map_z += global.using_map.get_empty_zlevel() . = ..() +<<<<<<< HEAD testing("Temporary sector at [x],[y],[z] was created, corresponding zlevel is [english_list(map_z)].") +======= + loc = locate(nx, ny, global.using_map.overmap_z) + x = nx + y = ny + if(!map_z[1]) + log_and_message_admins("Could not create empty sector at [nx], [ny]. No available z levels to allocate.") + return INITIALIZE_HINT_QDEL + + map_sectors["[map_z[1]]"] = src + testing("Temporary sector at [x],[y] was created, corresponding zlevel is [map_z[1]].") +>>>>>>> 51f5290fa1a... Fixes temp sector initialization (#8325) /obj/effect/overmap/visitable/sector/temporary/Destroy() for(var/zlevel in map_z) @@ -22,6 +34,9 @@ testing("Temporary sector at [x],[y] was destroyed, returning empty zlevel [map_z[1]] to map datum.") return ..() +/obj/effect/overmap/visitable/sector/temporary/find_z_levels() + LAZYADD(map_z, global.using_map.get_empty_zlevel()) + /obj/effect/overmap/visitable/sector/temporary/proc/is_empty(var/mob/observer) if(!LAZYLEN(map_z)) log_and_message_admins("CANARY: [src] tried to check is_empty, but map_z is `[map_z || "null"]`") @@ -44,7 +59,14 @@ var/obj/effect/overmap/visitable/sector/temporary/res = locate() in overmap_turf if(istype(res)) return res +<<<<<<< HEAD return new /obj/effect/overmap/visitable/sector/temporary(overmap_turf) +======= + res = new /obj/effect/overmap/visitable/sector/temporary(x, y) + if(QDELETED(res)) + res = null + return res +>>>>>>> 51f5290fa1a... Fixes temp sector initialization (#8325) /atom/movable/proc/lost_in_space() for(var/atom/movable/AM in contents) @@ -130,8 +152,10 @@ if(O != M && O.in_space && prob(50)) TM = O break - if(!TM) + if(!istype(TM)) TM = get_deepspace(M.x,M.y) + if(!istype(TM)) + return nz = pick(TM.get_space_zlevels()) testing("spacetravel chose [nz],[ny],[nz] in sector [TM] @ ([TM.x],[TM.y],[TM.z])") @@ -143,5 +167,7 @@ var/mob/D = A if(D.pulling) D.pulling.forceMove(dest) + else + to_world("CANARY: Could not move [A] to [nx], [ny], [nz]: [dest ? "[dest]" : "null"]") M.cleanup() diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm index 48a8963e36..9fc0487392 100644 --- a/maps/~map_system/maps.dm +++ b/maps/~map_system/maps.dm @@ -205,13 +205,21 @@ var/list/all_maps = list() return text2num(pickweight(candidates)) /datum/map/proc/get_empty_zlevel() + // Try to free up a z level from existing temp sectors + if(!empty_levels.len) + for(var/Z in map_sectors) + var/obj/effect/overmap/visitable/sector/temporary/T = map_sectors[Z] + T.cleanup() // If we can release some of these, do that. + + // Else, we need to buy a new one. if(!empty_levels.len) world.increment_max_z() empty_levels += world.maxz return pick_n_take(empty_levels) /datum/map/proc/cache_empty_zlevel(var/z) - empty_levels |= z + if(z) // Else, it's not a valid z and we want to expunge it + empty_levels |= z // Get a list of 'nearby' or 'connected' zlevels. // You should at least return a list with the given z if nothing else. From 624e99180293b5ced8760fc3dc6ab8e392a18a60 Mon Sep 17 00:00:00 2001 From: Atermonera Date: Tue, 2 Nov 2021 18:14:04 -0800 Subject: [PATCH 12/26] ChangeTurf improvements. --- .../endgame/supermatter_cascade/blob.dm | 2 +- code/game/turfs/simulated/floor_types.dm | 3 +- code/game/turfs/simulated/walls.dm | 3 +- code/game/turfs/turf.dm | 8 ++- code/game/turfs/turf_changing.dm | 58 +++++++------------ code/game/turfs/unsimulated/planetary.dm | 2 +- .../admin/view_variables/admin_delete.dm | 9 ++- code/modules/artifice/deadringer.dm | 5 +- code/modules/mob/freelook/update_triggers.dm | 6 ++ code/modules/turbolift/turbolift.dm | 4 ++ code/modules/xenobio2/mob/xeno.dm | 5 ++ code/modules/xenobio2/mob/xeno_product.dm | 3 +- 12 files changed, 58 insertions(+), 50 deletions(-) diff --git a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm index 88da43257d..af29065f96 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm @@ -21,7 +21,7 @@ /turf/unsimulated/wall/supermatter/Destroy() STOP_PROCESSING(SSturfs, src) - ..() + return ..() /turf/unsimulated/wall/supermatter/process() // Only check infrequently. diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm index 486e215325..b63ecf0143 100644 --- a/code/game/turfs/simulated/floor_types.dm +++ b/code/game/turfs/simulated/floor_types.dm @@ -30,7 +30,6 @@ new_holder.decals = T.decals ? T.decals.Copy() : null //Set the destination to be like us - T.Destroy() var/turf/simulated/shuttle/new_dest = T.ChangeTurf(my_turf.type,,1) new_dest.set_dir(my_turf.dir) new_dest.icon_state = my_turf.icon_state @@ -97,7 +96,7 @@ /turf/simulated/shuttle/Destroy() landed_holder = null - ..() + return ..() // For joined corners touching static lighting turfs, add an overlay to cancel out that part of our lighting overlay. /turf/simulated/shuttle/proc/update_breaklights() diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index d0bb6d5640..f46d0c3105 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -45,8 +45,7 @@ /turf/simulated/wall/Destroy() STOP_PROCESSING(SSturfs, src) - dismantle_wall(null,null,1) - ..() + return ..() /turf/simulated/wall/examine_icon() return icon(icon=initial(icon), icon_state=initial(icon_state)) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index bcd53322b8..c70a81a8a8 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -34,6 +34,7 @@ var/block_tele = FALSE // If true, most forms of teleporting to or from this turf tile will fail. var/can_build_into_floor = FALSE // Used for things like RCDs (and maybe lattices/floor tiles in the future), to see if a floor should replace it. var/list/dangerous_objects // List of 'dangerous' objs that the turf holds that can cause something bad to happen when stepped on, used for AI mobs. + var/tmp/changing_turf /turf/Initialize(mapload) . = ..() @@ -58,9 +59,14 @@ Be.multiz_turf_new(src, UP) /turf/Destroy() - . = QDEL_HINT_IWILLGC + if (!changing_turf) + crash_with("Improper turf qdel. Do not qdel turfs directly.") + changing_turf = FALSE cleanbot_reserved_turfs -= src + if(connections) + connections.erase_all() ..() + return QDEL_HINT_IWILLGC /turf/ex_act(severity) return 0 diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index 492f3ef65b..5d95cb499a 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -43,6 +43,7 @@ var/old_dangerous_objects = dangerous_objects var/old_dynamic_lumcount = dynamic_lumcount +<<<<<<< HEAD var/turf/Ab = GetAbove(src) if(Ab) Ab.multiz_turf_del(src, DOWN) @@ -64,46 +65,31 @@ if(ispath(N, /turf/simulated/floor)) var/turf/simulated/W = new N( locate(src.x, src.y, src.z) ) +======= + changing_turf = TRUE + qdel(src) + + var/turf/W = new N( locate(src.x, src.y, src.z) ) + if(istype(W, /turf/simulated/floor)) +>>>>>>> a7877d86e50... Merge pull request #8341 from MistakeNot4892/qdel if(old_fire) - fire = old_fire + W.fire = old_fire + W.RemoveLattice() + else if(old_fire) + old_fire.RemoveFire() - if (istype(W,/turf/simulated/floor)) - W.RemoveLattice() + if(tell_universe) + universe.OnTurfChange(W) - if(tell_universe) - universe.OnTurfChange(W) + if(air_master) + air_master.mark_for_update(W) - if(air_master) - air_master.mark_for_update(src) //handle the addition of the new turf. - - for(var/turf/space/S in range(W,1)) - S.update_starlight() - - W.levelupdate() - W.update_icon(1) - W.post_change() - . = W - - else - - var/turf/W = new N( locate(src.x, src.y, src.z) ) - - if(old_fire) - old_fire.RemoveFire() - - if(tell_universe) - universe.OnTurfChange(W) - - if(air_master) - air_master.mark_for_update(src) - - for(var/turf/space/S in range(W,1)) - S.update_starlight() - - W.levelupdate() - W.update_icon(1) - W.post_change() - . = W + for(var/turf/space/S in range(W, 1)) + S.update_starlight() + W.levelupdate() + W.update_icon(1) + W.post_change() + . = W dangerous_objects = old_dangerous_objects diff --git a/code/game/turfs/unsimulated/planetary.dm b/code/game/turfs/unsimulated/planetary.dm index 8e08b8d26d..c6be94c5ed 100644 --- a/code/game/turfs/unsimulated/planetary.dm +++ b/code/game/turfs/unsimulated/planetary.dm @@ -24,7 +24,7 @@ /turf/unsimulated/wall/planetary/Destroy() SSplanets.removeTurf(src) - ..() + return ..() /turf/unsimulated/wall/planetary/proc/set_temperature(var/new_temperature) if(new_temperature == temperature) diff --git a/code/modules/admin/view_variables/admin_delete.dm b/code/modules/admin/view_variables/admin_delete.dm index 7976d3bedf..4f9c048fe6 100644 --- a/code/modules/admin/view_variables/admin_delete.dm +++ b/code/modules/admin/view_variables/admin_delete.dm @@ -19,6 +19,13 @@ T.ScrapeAway() else*/ vv_update_display(D, "deleted", VV_MSG_DELETED) - qdel(D) + + // turfs are special snowflakes that'll explode if qdel'd outside ChangeTurf + if (isturf(D)) + var/turf/T = D + T.ChangeTurf(world.turf) + else + qdel(D) + if(!QDELETED(D)) vv_update_display(D, "deleted", "") diff --git a/code/modules/artifice/deadringer.dm b/code/modules/artifice/deadringer.dm index b10c05c942..d0774dc2a5 100644 --- a/code/modules/artifice/deadringer.dm +++ b/code/modules/artifice/deadringer.dm @@ -172,7 +172,4 @@ corpse.adjustBruteLoss(H.getBruteLoss()) corpse.UpdateAppearance() corpse.regenerate_icons() - for(var/obj/item/organ/internal/I in corpse.internal_organs) - var/obj/item/organ/internal/G = I - G.Destroy() - return + QDEL_NULL_LIST(corpse.internal_organs) diff --git a/code/modules/mob/freelook/update_triggers.dm b/code/modules/mob/freelook/update_triggers.dm index a678ff319c..02d36e54f5 100644 --- a/code/modules/mob/freelook/update_triggers.dm +++ b/code/modules/mob/freelook/update_triggers.dm @@ -15,6 +15,12 @@ /turf/simulated/Destroy() updateVisibility(src) + if(zone) + if(can_safely_remove_from_zone()) + c_copy_air() + zone.remove(src) + else + zone.rebuild() return ..() /turf/simulated/Initialize() diff --git a/code/modules/turbolift/turbolift.dm b/code/modules/turbolift/turbolift.dm index 78fb4084cd..da2745bffc 100644 --- a/code/modules/turbolift/turbolift.dm +++ b/code/modules/turbolift/turbolift.dm @@ -195,7 +195,11 @@ if(istype(AM, /mob/living) && !(AM.is_incorporeal())) var/mob/living/M = AM M.gib() +<<<<<<< HEAD else if(AM.simulated && !(istype(AM, /mob/observer)) && !(AM.is_incorporeal())) +======= + else if(istype(AM, /mob/zshadow) || (AM.simulated && !(istype(AM, /mob/observer)))) +>>>>>>> a7877d86e50... Merge pull request #8341 from MistakeNot4892/qdel qdel(AM) origin.move_contents_to(destination) diff --git a/code/modules/xenobio2/mob/xeno.dm b/code/modules/xenobio2/mob/xeno.dm index 9996be9e61..d50063081a 100644 --- a/code/modules/xenobio2/mob/xeno.dm +++ b/code/modules/xenobio2/mob/xeno.dm @@ -101,7 +101,12 @@ Also includes Life and New stasis += hit.stasisforce ..() +<<<<<<< HEAD /mob/living/simple_mob/xeno/Destroy() traitdat.Destroy() //Let's clean up after ourselves. traitdat = null +======= +/mob/living/simple_animal/xeno/Destroy() + QDEL_NULL(traitdat) +>>>>>>> a7877d86e50... Merge pull request #8341 from MistakeNot4892/qdel ..() \ No newline at end of file diff --git a/code/modules/xenobio2/mob/xeno_product.dm b/code/modules/xenobio2/mob/xeno_product.dm index a9989c3c45..91d66d429b 100644 --- a/code/modules/xenobio2/mob/xeno_product.dm +++ b/code/modules/xenobio2/mob/xeno_product.dm @@ -12,7 +12,6 @@ Xenobiological product lives here as a basic type. var/nameVar = "blah" /obj/item/xenoproduct/Destroy() - traits.Destroy() //Let's not leave any traits hanging around. - traits = null + QDEL_NULL(traits) ..() \ No newline at end of file From 8cd5fd66ca5c69c922f66d84666a5f5517fb6954 Mon Sep 17 00:00:00 2001 From: Heroman Date: Sat, 19 Feb 2022 18:58:43 +1000 Subject: [PATCH 13/26] Compile Error Resolution --- code/modules/food/food/snacks/meat.dm | 31 --------------------------- vorestation.dme | 1 + 2 files changed, 1 insertion(+), 31 deletions(-) diff --git a/code/modules/food/food/snacks/meat.dm b/code/modules/food/food/snacks/meat.dm index e7a16f5364..e7c010bc7e 100644 --- a/code/modules/food/food/snacks/meat.dm +++ b/code/modules/food/food/snacks/meat.dm @@ -58,37 +58,6 @@ reagents.remove_reagent("triglyceride", INFINITY) //Chicken is low fat. Less total calories than other meats -/obj/item/weapon/reagent_containers/food/snacks/carpmeat - name = "fillet" - desc = "A fillet of carp meat" - icon_state = "fishfillet" - filling_color = "#FFDEFE" - center_of_mass = list("x"=17, "y"=13) - bitesize = 6 - - var/toxin_type = "carpotoxin" - var/toxin_amount = 3 - -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/Initialize() - . = ..() - reagents.add_reagent("protein", 3) - reagents.add_reagent(toxin_type, toxin_amount) - -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif - desc = "A fillet of sivian fish meat." - filling_color = "#2c2cff" - color = "#2c2cff" - toxin_type = "neurotoxic_protein" - toxin_amount = 2 - -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish - toxin_type = "murk_protein" - -/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish - desc = "A fillet of fish meat." - toxin_type = "neurotoxic_protein" - toxin_amount = 1 - /obj/item/weapon/reagent_containers/food/snacks/crabmeat name = "crustacean legs" desc = "... Coffee? Is that you?" diff --git a/vorestation.dme b/vorestation.dme index 2040326e37..c7d8ec8cb2 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2369,6 +2369,7 @@ #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_datums_vr.dm" #include "code\modules\hydroponics\seed_gene_mut.dm" From d788a61aa41a7c8bcdc01777427d5ef3fec9953f Mon Sep 17 00:00:00 2001 From: Heroman Date: Sat, 19 Feb 2022 19:42:32 +1000 Subject: [PATCH 14/26] Compile error resolution --- code/datums/components/material_container.dm | 6 ++-- code/modules/reagents/reagents/core.dm | 7 +++-- code/modules/xenoarcheaology/effect.dm | 15 ++++++++++ .../tools/artifact_harvester.dm | 28 +++++++------------ 4 files changed, 33 insertions(+), 23 deletions(-) diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index 86573474e6..fbad2752ee 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -115,7 +115,7 @@ if(!(mat_container_flags & MATCONTAINER_SILENT)) to_chat(user, "[parent] won't accept [I]!") return - . = COMPONENT_NO_AFTERATTACK + . = COMPONENT_CANCEL_ATTACK_CHAIN var/datum/callback/pc = precondition if(pc && !pc.Invoke(user)) return @@ -168,7 +168,7 @@ // It shouldn't be possible to add more matter than our max ASSERT((total_amount + (matter_per_sheet * sheets_to_use)) <= max_amount) - + // Use the amount of sheets from the stack if(!S.use(sheets_to_use)) to_chat(user, "Something went wrong with your stack. Split it manually and try again.") @@ -358,7 +358,7 @@ if(materials[M] < (sheet_amt * SHEET_MATERIAL_AMOUNT)) sheet_amt = round(materials[M] / SHEET_MATERIAL_AMOUNT) - var/obj/item/stack/S = M.stack_type + var/obj/item/stack/S = M.stack_type var/max_stack_size = initial(S.max_amount) var/count = 0 diff --git a/code/modules/reagents/reagents/core.dm b/code/modules/reagents/reagents/core.dm index 0cff5905d8..3eb3e06cfb 100644 --- a/code/modules/reagents/reagents/core.dm +++ b/code/modules/reagents/reagents/core.dm @@ -196,10 +196,13 @@ /datum/reagent/water/touch_obj(var/obj/O, var/amount) ..() - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/cube)) - var/obj/item/weapon/reagent_containers/food/snacks/cube/cube = O + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube)) + var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O if(!cube.wrapped) cube.Expand() + else if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/cube)) + var/obj/item/weapon/reagent_containers/food/snacks/cube/cube = O + cube.Expand() else O.water_act(amount / 5) diff --git a/code/modules/xenoarcheaology/effect.dm b/code/modules/xenoarcheaology/effect.dm index 4ab7066b99..145bd3e258 100644 --- a/code/modules/xenoarcheaology/effect.dm +++ b/code/modules/xenoarcheaology/effect.dm @@ -10,6 +10,21 @@ var/artifact_id = "" var/effect_type = 0 + var/req_type = /atom/movable + + var/image/active_effect + var/effect_icon = 'icons/effects/effects.dmi' + var/effect_state = "sparkles" + var/effect_color = "#ffffff" + + // The last time the effect was toggled. + var/last_activation = 0 + +/datum/artifact_effect/Destroy() + if(master) + master = null + ..() + /datum/artifact_effect/proc/get_master_holder() // Return the effectmaster's holder, if it is set to an effectmaster. Otherwise, master is the target object. if(istype(master)) return master.holder diff --git a/code/modules/xenoarcheaology/tools/artifact_harvester.dm b/code/modules/xenoarcheaology/tools/artifact_harvester.dm index 948843c163..03f0fdb484 100644 --- a/code/modules/xenoarcheaology/tools/artifact_harvester.dm +++ b/code/modules/xenoarcheaology/tools/artifact_harvester.dm @@ -148,10 +148,12 @@ cur_artifact = analysed //if both effects are active, we can't harvest either - if(cur_artifact.my_effect && cur_artifact.my_effect.activated && cur_artifact.secondary_effect && cur_artifact.secondary_effect.activated) + var/list/active_effects = cur_artifact.artifact_master.get_active_effects() + + if(active_effects.len > 1) atom_say("Cannot harvest. Source is emitting conflicting energy signatures.") return - if(!cur_artifact.my_effect.activated && !(cur_artifact.secondary_effect && cur_artifact.secondary_effect.activated)) + else if(!active_effects.len) atom_say("Cannot harvest. No energy emitting from source.") return @@ -163,34 +165,24 @@ // var/datum/artifact_effect/source_effect + var/datum/artifact_effect/active_effect = active_effects[1] //if we already have charge in the battery, we can only recharge it from the source artifact if(inserted_battery.stored_charge > 0) var/battery_matches_primary_id = 0 - if(inserted_battery.battery_effect && inserted_battery.battery_effect.artifact_id == cur_artifact.my_effect.artifact_id) + if(inserted_battery.battery_effect && inserted_battery.battery_effect.artifact_id == cur_artifact.artifact_master.artifact_id) battery_matches_primary_id = 1 - if(battery_matches_primary_id && cur_artifact.my_effect.activated) + if(battery_matches_primary_id && active_effect.activated) //we're good to recharge the primary effect! - source_effect = cur_artifact.my_effect - - var/battery_matches_secondary_id = 0 - if(inserted_battery.battery_effect && inserted_battery.battery_effect.artifact_id == cur_artifact.secondary_effect.artifact_id) - battery_matches_secondary_id = 1 - if(battery_matches_secondary_id && cur_artifact.secondary_effect.activated) - //we're good to recharge the secondary effect! - source_effect = cur_artifact.secondary_effect + source_effect = active_effect if(!source_effect) atom_say("Cannot harvest. Battery is charged with a different energy signature.") else //we're good to charge either - if(cur_artifact.my_effect.activated) + if(active_effect.activated) //charge the primary effect - source_effect = cur_artifact.my_effect - - else if(cur_artifact.secondary_effect.activated) - //charge the secondary effect - source_effect = cur_artifact.secondary_effect + source_effect = active_effect if(source_effect) From ef4b3775740482189b12e85d4600dbfdc6ee7699 Mon Sep 17 00:00:00 2001 From: Heroman Date: Sat, 19 Feb 2022 20:06:38 +1000 Subject: [PATCH 15/26] Adds swept back rabbit ears and large antlers from Jackalope as independant markings --- .../new_player/sprite_accessories_ear_vr.dm | 16 ++++++++++++++++ icons/mob/vore/ears_32x64.dmi | Bin 7322 -> 8340 bytes 2 files changed, 16 insertions(+) diff --git a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm index 37158f8e08..f6b0c77abe 100644 --- a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm @@ -809,6 +809,22 @@ do_colouration = 1 color_blend_mode = ICON_MULTIPLY +/datum/sprite_accessory/ears/rabbit_swept + name = "Rabbit Ears (swept back)" + desc = "" + icon = 'icons/mob/vore/ears_32x64.dmi' + icon_state = "rabbit-swept" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/antlers_large + name = "Antlers (large)" + desc = "" + icon = 'icons/mob/vore/ears_32x64.dmi' + icon_state = "antlers_large" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + /datum/sprite_accessory/ears/kittyr name = "kitty right only, colorable" icon = 'icons/mob/vore/ears_uneven.dmi' diff --git a/icons/mob/vore/ears_32x64.dmi b/icons/mob/vore/ears_32x64.dmi index a661c9e3c768d2465733dfd21853bae92f4cc5a2..df92e62a42ed698af1bbe6dd58f105a36443c85e 100644 GIT binary patch literal 8340 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 literal 7322 zcmd6sXH-*Jzs7?gGKwII*bopEls^cM@I%knr96O|U|0edp6qxnoZi8M4%_d-quxD&jizmk#y* zvD->sQo}@!1ZQCl{$=y6MxFe@z!{^oL)mtxcb4500USemMH6XN!Tj z^tGmfJeqln*QFOHj}9LTpkv(5!pk<#LU=uI@@K%uI%^2zP|9U9(;G4Q%&}Jgi738c z5v#OS+3e*N$=AP&Q!md*%exjo#hB(EUhrZ=$1Glw=UOwfTcB5p?<*E*KfQW&tj+oA zR+|?GcoL)xRZ68gC5x7|oY2z$@aBAm2)%YMkyT`iCo_y6TXCMABHNXt?rQ*OBZaxg83GdCWX zS|g$HrLID*M&!QXJQLixNtu`REp@?hD2#|B&#pm;{tqQa`LvH z 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 From 40c9947bca17139979c63d5c11928f57957c6817 Mon Sep 17 00:00:00 2001 From: Hatterhat Date: Sat, 19 Feb 2022 04:23:35 -0600 Subject: [PATCH 16/26] bro i dont wanna talk about loadout_general.dm --- code/game/objects/items/toys/toys_vr.dm | 2 ++ .../loadout/loadout_fluffitems_vr.dm | 6 ++++++ .../loadout/loadout_general.dm | 6 +++++- .../vore/fluffstuff/custom_items_vr.dm | 12 +++++++++++- icons/vore/custom_items_vr.dmi | Bin 63668 -> 64218 bytes 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/toys/toys_vr.dm b/code/game/objects/items/toys/toys_vr.dm index 3884b0a17c..21f2f1cc07 100644 --- a/code/game/objects/items/toys/toys_vr.dm +++ b/code/game/objects/items/toys/toys_vr.dm @@ -4,6 +4,8 @@ icon = 'icons/obj/toy_vr.dmi' icon_state = "mistletoe" +// HEY FUTURE PLUSHIE CODERS: IF YOU'RE ADDING A SNOWFLAKE PLUSH ITEM USE PATH /obj/item/toy/plushie/fluff +// the loadout entry shouldn't be able to grab those if everything goes right /obj/item/toy/plushie/lizardplushie name = "lizard plushie" desc = "An adorable stuffed toy that resembles a lizardperson." diff --git a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm index 5953edb77b..0f9060a1af 100644 --- a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm @@ -851,6 +851,12 @@ ckeywhitelist = list("pastelprincedan", "hatterhat") character_name = list("Masumi Maki", "Harold Robinson") +/datum/gear/fluff/slimecat_rd_plush + path = /obj/item/toy/plushie/fluff/slimeowshi + display_name = "slimecat RD plushie" + ckeywhitelist = list("pastelprincedan") + character_name = list("Kiyoshi Maki", "Masumi Maki") + // Q CKEYS // R CKEYS diff --git a/code/modules/client/preference_setup/loadout/loadout_general.dm b/code/modules/client/preference_setup/loadout/loadout_general.dm index 8b566fe3c9..615e16bf5d 100644 --- a/code/modules/client/preference_setup/loadout/loadout_general.dm +++ b/code/modules/client/preference_setup/loadout/loadout_general.dm @@ -53,7 +53,11 @@ /datum/gear/plushie/New() ..() var/list/plushies = list() - for(var/obj/item/toy/plushie/plushie_type as anything in subtypesof(/obj/item/toy/plushie) - /obj/item/toy/plushie/therapy) + var/list/blacklisted_types = list() + // look if theres a better way to do this im all ears + blacklisted_types += subtypesof(/obj/item/toy/plushie/therapy) + blacklisted_types += subtypesof(/obj/item/toy/plushie/fluff) + for(var/obj/item/toy/plushie/plushie_type as anything in subtypesof(/obj/item/toy/plushie) - blacklisted_types) plushies[initial(plushie_type.name)] = plushie_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(plushies)) diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index ba6d7976ef..f21eed951f 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -1449,4 +1449,14 @@ item_state = "revclaymoremob" force = 1 sharp = TRUE - edge = TRUE \ No newline at end of file + edge = TRUE + +//PastelPrinceDan - Kiyoshi/Masumi Maki +/obj/item/toy/plushie/fluff/slimeowshi + name = "Slime-Cat Research Director plushie" + desc = "An adorable stuffed toy that resembles a slime. It's pink, and has little cat ears, as well as a tail! Atop its head is a small beret with a Research Director's insignia." + icon = 'icons/vore/custom_items_vr.dmi' + icon_state = "kimeowshi" + attack_verb = list("blorbled", "slimed", "absorbed", "glomped") + gender = PLURAL // this seems like a good idea but probably prone to changing. todo: ask dan + // the only reason this thought is relevant because the base slimeplush has its gender set to female \ No newline at end of file diff --git a/icons/vore/custom_items_vr.dmi b/icons/vore/custom_items_vr.dmi index 3c05eb5d57f4c8a05a637b0e2f99a401b19c9568..ca6f3dfa19e2675d9fcc3d4d45df93180caaa596 100644 GIT binary patch delta 2497 zcmZuxc_7qzAN~!>eHUw`A;+v+sYIH|v5O@-mKG~VLU`$+sSuDNH-JMH`a_rCvrpU?ArzMtpw{XR`wqMzxaIXbXU&vkpm;IP;M z@6jVsHYLxS?+leCB7?F~WjKLoiL#BPk1{QykuT;kD{}C9qx+Jy49I`$5jA%6kYMs9 z$u_-z#Kc>Ta1ZnFmm}JBa)x?E=O^IW$wA~}8rRf3X63)wW+?c3@3*^l{Wq0Y2BJ$= zItrMpsN-7KdQh5n&Ic7sY@LI@>-sC>0rp}gll69Ka(cSVd!yqFsw{qpTafc|Wu1>? z#`eV`g(puDX^Cs>74QYCa>j(a>w8`~yBv2|93i-k|N2Sg=t>iA1{a_vh{y)D)Q$pr zw8_zZFw+a=917eEbwWb?0?JZie+8-Pr|0SxN?<73*k%E7T1?E6Ev^{1MxM!+w0P$C zl9dwAyN6*+?i-&D`=mdM#j1RyP(n5)TUS?CM+iRcIF5|{|Dn2Z| zvr0|7bD97K@@*5AEd(-6ot3@%W~-OVIn(2A%X{L7hp%R%5~<@FR+09c<2WTx>Bw#Q zc~0XZ8P&I$_gRm-!%axb-I8arRFkQMl7={X=v&QGxrG<83BR)c+`VAbvj1Vno<_XI zsr~*a$QgWf51?1m91^H(^Wa@v>1p#gA1!GP$6UES*8FHu%!4hsiOT|wl%YEKv#f1u zJ119%#=6}3gE41agugLy<|$g2Zs+@tBfj6u*ix7+$a$9+JCt6@v0lIVeQ#zwe|@!q3c%TtMqa>;&O*wxE&LRtrL3f zU2YG)9D!$anYVBksClH=#4~g8IMroJPzyoyee4R4f`Gk8pX-_g7Ys+V!y@ta3Exb* z=jBl-OZC`kyup-Ogy{()uJWeLFAjS*ef2aJ%tbe^jDs%RD3A4BXsVE4ppp(A^o0h( zQ?UX}sdYmblQ1zsYF_s0s@m}RlM(Ap>ef;F_Yd2t!*c{=BckLltpZru6tG2sm7 z2L|D=r!qL?Qke0KK){auT}vPk&O+G_z3J=eTf*5IC|#w}^@Q({Y<2@rI_V|m>ugGH zWnS>0E=l7PXwPMwfVP*w8ycu-LRy+s0&lCQcf7x_J!(4;=jFBMb!X?xIawK*KBCd< zx}pG4tdXH!Kk>Li`btHLUTw>AON0pZ{cjncj zjdCeEPHk^HK+07aj_hw)`) zR|X!t*V?7byPb+#E=9?(<9IRcR#vWozbx=tE94{lj`N&G7`__V8aYH_PX{Bm<;{#w zRmjH?7OBgT4i$Zkd{Nk19PK={!N~g7 zEHMTW1w^EhPR1W`oa(_*H%@+gVRLwSz+WW<5CecDfkYAj09wa3IV#ZS=d8!LRug`1 zT?oZkLLWUny%q`&-<^SLiP-@6GfA(^KSx^f-iy2xt*XQnUPnWG|74SsSZZ}qvW3v4H1zLtyD0womoqnnW>i@ zs*k!eCGBQB22P9?=Eogq2pM`hCWwp2I5<@YNXyBy4@=vKo;4#T9(b~nS3oANwBK1> zz7twoE_Lnib$~V5rrH#>ZhB(busOGq`;PXpD8P9gfxK|d^MPKzYmQDSht_H@vG%Lw zSX({sN`ZBZh0tG_T)O`3B3U2q>Ro(Y%xY7`;{PHl->X-M>GD69kqtSmLjWC(9|JyO=GifKMKE1s!2Md2>b72*4U zi2i3P$tQ0TkEMERk((0rc$S8gEo`M@;O2r3obSwh{EjH)G?F=u%+x0xLd(Gbv0#du z$WbBTE>(-1|6hXZ6>x0n)0ZHpSJ_`CsFwscw0W?kSYoI2DUIYFO;hfXzQmx6(u1op z&RalH+|SIx+?#f;uNW551l=+#X5sIAJ5xc>o?Jl$N* z?6RDoC%UTOy+WJqab7m!k6hSvP)Arrgn7OW{^A;n>9*L0+ME1 zRe--(f$mm&CQcWrZI(5(@W?3JmQZuE4B|hj>ul5?A>GK*smAbp-elkP zU9Y8ur#%UMvh3`0iNh0)bS~`KXzC2yagq*U-l+n9$jhRC3_#}th>PcE9gI;N%M)vw zgS13YGE@c$K~6lrkR$X86MoBlP9E4Uf?&hx+912P{`_oopDR-7cbf-R($Wxwl4ta-CEbn!Tjm&jQ`;B+f#n*qR9*wIYUL~F1FuAxEjE>#d0vmB*95B z5uj&t@jwKTGg#$Fu+TTV8~k>l#0HeApgHV-rW&T`7e^;vWm;%6K6E$YOm)jP=PK{; z3nU!&fbQ@zIP89xl-7&lw9Y8FFi$kU6FUps6-LKdGi%g78DR!BD*Tf&4*>}PP&g(; gh1v3dqGbmhxFoU3M4CwnIe^oTuKVl>wtmU~24MdTw*UYD delta 1942 zcmZ{iX*}Br8pr>HhAK5xWm+WNx_V5jRaHl&dLS{VTc~qr6r~tfZ2U8}^zbPr>Zqzr zTR|vs##Kp1$Jrq$v5ruq=!8lmLgZl6e)i42*tgH~`#tA(N&so%L2~uwhU*P}SJ3)p z#0+GXrrF%eL6lbPLK^kXKQl(Q9&A)p^!gyL;n?WEsIm`aXE=EF#Omx0+8N*adH!)o z#y~*dY-L~WQ?0$}0mkTg|MtCCBDD@UJb|Bx*z8Gn__)W-8P)1T%k_6SnfN07H34}l zvi2t-;c$&Q?Z#iF@4J(4VKB_qA&dA~A{QDOoVY0=;`A(-F-!}-weRRg^rw~uR9+gT zWEzZhvUUY$u{tG^)aJGI*_(vuR6E?s0-kxQq%rglz$Yb+qN&hz4aac@!=)U!j=gjM zu6@64`^{_noPpgX8+5uM%30|_{Cdu@jf;7po8e4ry7EHIrm**KreBi06|2sV!Dh1u zmifM|cV9f}eraiCWuRKi&)-UJU|ai*@^m>V;Cj@^yJEAy#Lq=qRC@UYU1G)(5e8Zq zl`c5W{Xlxb!#txEQg@a;Zf;UVt89gaN$OTwayVg*Z+Lc8YfoG*Pk20rUBZ+uQ3&54}yxiu5qH)`c z*`m=P^_OW)0$0L4mr}#nbSIe`vcMgB!rNcGobUb|KK%Z@Y19E9Y#Nn%CiUo8o{fMU z6NfWW>O}_&CxuI+eTsxIPOHz7;LOFxT|hr9kvPehAS3H27821OxbTOaf=b1 zQq~cXB#Rr7_S`h7hb{%@^1{$R!E7pH9u^=Tc{?ZQt(Gh|*MM8For=GECn}Rh^e70< zfEhq-YO1WRb|jp?Gj%=?8a;PnaQM6Db!w4IJ)>t={Lj54k*-fA`*eq#Wr-duRnhn+ zU-v>uM`pG^Naync72eT-zVgP393-K3=8b3C=dpej4oBpg#NAvOB?UMYpGRVbN=}2F zsV#xtwHqM0L%dv{14FPF41CmdL6~2|o~TKx!8Fw@2wi+GtV(Z&UQu3dh%O*yX`LB* zH~#%RG;yt-h{ZTL6Kb2!oaht|qL8|TveZZ$Dv`}Er680t6&VR)%wi%rsD(;J5h~z9 z=_sJN?qmXfi@|bQA#H193 z)cXYN^EzAtpK+EDtcen`4E_BS?x~!E7+i&Ok)YZ_#TwRVQxp*OCh#rAQ-hWB;Q0W-Fy{d7%V?h;gptM6iq&IuN^UKjsXsC+v z4ol4oZMsnYg2=u%xpn*Ve^us8zu!qmLk;o^X^!rQ3UZArh^96hix z)v^it3Nl%8p$&)8H;x{^E&Wj#UpUU&1BAM~Rk1Zix2ag_8<2>~;97&_EP#*N8)~F( zSpA}FFA|L1GM#7od-Waxa{Yg~qv(AJouE}dov}n^B;8Y5PYzbH()Zlr_p{w0++|e8 z(uIx=6SlLXFpIP6@S<(7cDDQ2Bc7T_2mq#v?OI=CCx~C@ef+DwAnF-~Mav#Oq~P3c zGVPnP8u>X(URI$7r`uL~hi`zCsgM%wYv4FdCYx#Ay#DK$6P74Dv(Yf{Ny+MoK03_! z!Aq}$(wn-8Hx4AwP4)oz-xTzKx2@}ihOQaul~)rN^Dplk;K*LnFv$118=zS{y=rGz zYX|D>kUF{VXLpS2GaVdN7oQy31dENP1 J?UkVP{{YDj$oc>P From f30405123380079fd2001b597606d734564a9c5e Mon Sep 17 00:00:00 2001 From: Heroman Date: Sun, 20 Feb 2022 06:09:21 +1000 Subject: [PATCH 17/26] Adds Cryohydra to Protean whitelist --- config/alienwhitelist.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt index 2e9994be80..e955b0ef1b 100644 --- a/config/alienwhitelist.txt +++ b/config/alienwhitelist.txt @@ -23,6 +23,7 @@ chillyfang - Black-Eyed Shadekin comradenitro - Protean coolcrow420 - Black-Eyed Shadekin crossexonar - Protean +cryohydra - Protean detectivegoogle - Protean digi5 - Protean digitalsquirrel95 - Black-Eyed Shadekin From 36e674471600da5f2b11e9557c3e80dbcdd35066 Mon Sep 17 00:00:00 2001 From: Heroman Date: Sun, 20 Feb 2022 08:13:03 +1000 Subject: [PATCH 18/26] Fixes wrong .dme --- code/game/machinery/reagents/pump.dm | 270 --- polaris.dme | 3281 -------------------------- vorestation.dme | 2 +- 3 files changed, 1 insertion(+), 3552 deletions(-) delete mode 100644 code/game/machinery/reagents/pump.dm delete mode 100644 polaris.dme diff --git a/code/game/machinery/reagents/pump.dm b/code/game/machinery/reagents/pump.dm deleted file mode 100644 index c48e8d9834..0000000000 --- a/code/game/machinery/reagents/pump.dm +++ /dev/null @@ -1,270 +0,0 @@ - -/obj/machinery/pump - name = "fluid pump" - desc = "A fluid pumping machine." - - description_info = "A machine that can pump fluid from certain turfs.
\ - Water can be pumped from any body of water. Certain locations or environmental\ - conditions can cause different byproducts to be produced.
\ - Magma or Lava can be pumped to produce mineralized fluid." - - anchored = FALSE - density = TRUE - - icon = 'icons/obj/machines/reagent.dmi' - icon_state = "pump" - - circuit = /obj/item/weapon/circuitboard/fluidpump - - var/on = 0 - var/obj/item/weapon/cell/cell = null - var/use = 200 - var/efficiency = 1 - var/reagents_per_cycle = 40 - var/unlocked = 0 - var/open = 0 - - var/obj/item/hose_connector/output/Output - -// Overlay cache vars. - var/icon/liquid - var/icon/tank - var/icon/powerlow - var/icon/glass - var/icon/open_overlay - var/icon/cell_overlay - -/obj/machinery/pump/Initialize() - create_reagents(200) - . = ..() - default_apply_parts() - - if(ispath(cell)) - cell = new cell(src) - - Output = new(src) - - RefreshParts() - update_icon() - -/obj/machinery/pump/update_icon() - ..() - if(!tank) - tank = new/icon(icon, "[icon_state]-volume") - - if(!powerlow) - powerlow = new/icon(icon, "[icon_state]-lowpower") - - if(!liquid) - var/icon/cutter = new/icon(icon, "[icon_state]-volume") - - cutter.Blend(rgb(0, 0, 0,), ICON_MULTIPLY) - - liquid = new/icon(icon, "[icon_state]-cutting") - - liquid.Blend(cutter,ICON_AND) - - if(!glass) - glass = new/icon(icon, "[icon_state]-glass") - - glass.Blend(rgb(1,1,1,0.5), ICON_MULTIPLY) - - if(!open_overlay) - open_overlay = new/icon(icon, "[icon_state]-open") - - if(!cell_overlay) - cell_overlay = new/icon(icon, "[icon_state]-cell") - - cut_overlays() - add_overlay(tank) - - if(cell && cell.charge < (use * CELLRATE / efficiency)) - add_overlay(powerlow) - - if(reagents.total_volume >= 1) - var/list/hextorgb = hex2rgb(reagents.get_color()) - liquid.GrayScale() - - liquid.Blend(rgb(hextorgb[1],hextorgb[2],hextorgb[3]),ICON_MULTIPLY) - - add_overlay(liquid) - - add_overlay(glass) - - if(open) - add_overlay(open_overlay) - - if(cell) - add_overlay(cell_overlay) - - if(on) - icon_state = "[initial(icon_state)]-running" - - else - icon_state = "[initial(icon_state)]" - -/obj/machinery/pump/process() - if(Output.get_pairing()) - reagents.trans_to_holder(Output.reagents, Output.reagents.maximum_volume) - if(prob(5)) - visible_message("\The [src] gurgles as it exports fluid.") - - if(!on) - return - - if(!cell || (cell.charge < (use * CELLRATE / efficiency))) - turn_off(TRUE) - return - - handle_pumping() - update_icon() - -/obj/machinery/pump/RefreshParts() - for(var/obj/item/weapon/stock_parts/manipulator/SM in component_parts) - efficiency = SM.rating - - var/total_bin_rating = 0 - for(var/obj/item/weapon/stock_parts/matter_bin/SB in component_parts) - total_bin_rating += SB.rating - - reagents.maximum_volume = round(initial(reagents.maximum_volume) + 100 * total_bin_rating) - - return - -/obj/machinery/pump/power_change() - if(!cell || cell.charge < (use * CELLRATE) || !anchored) - return turn_off(TRUE) - - return FALSE - - -// Returns 0 on failure and 1 on success -/obj/machinery/pump/proc/turn_on(var/loud = 0) - if(!cell) - return 0 - if(cell.charge < (use * CELLRATE)) - return 0 - - on = 1 - update_icon() - if(loud) - visible_message("\The [src] turns on.") - return 1 - -/obj/machinery/pump/proc/turn_off(var/loud = 0) - on = 0 - set_light(0, 0) - update_icon() - if(loud) - visible_message("\The [src] shuts down.") - - if(!on) - return TRUE - - return FALSE - -/obj/machinery/pump/attack_ai(mob/user as mob) - if(istype(user, /mob/living/silicon/robot) && Adjacent(user)) - return attack_hand(user) - - if(on) - turn_off(TRUE) - else - if(!turn_on(1)) - to_chat(user, "You try to turn on \the [src] but it does not work.") - -/obj/machinery/pump/attack_hand(mob/user as mob) - if(open && cell) - if(ishuman(user)) - if(!user.get_active_hand()) - user.put_in_hands(cell) - cell.loc = user.loc - else - cell.loc = src.loc - - cell.add_fingerprint(user) - cell.update_icon() - - cell = null - on = 0 - set_light(0) - to_chat(user, "You remove the power cell.") - update_icon() - return - - if(on) - turn_off(TRUE) - else if(anchored) - if(!turn_on(1)) - to_chat(user, "You try to turn on \the [src] but it does not work.") - - update_icon() - -/obj/machinery/pump/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(W.is_screwdriver()) - if(!open) - if(unlocked) - unlocked = 0 - to_chat(user, "You screw the battery panel in place.") - else - unlocked = 1 - to_chat(user, "You unscrew the battery panel.") - - else if(W.is_crowbar()) - if(unlocked) - if(open) - open = 0 - overlays = null - to_chat(user, "You crowbar the battery panel in place.") - else - if(unlocked) - open = 1 - to_chat(user, "You remove the battery panel.") - - else if(W.is_wrench()) - if(on) - to_chat(user, "\The [src] is active. Turn it off before trying to move it!") - return - default_unfasten_wrench(user, W, 2 SECONDS) - - else if(istype(W, /obj/item/weapon/cell)) - if(open) - if(cell) - to_chat(user, "There is a power cell already installed.") - else - user.drop_item() - W.loc = src - cell = W - to_chat(user, "You insert the power cell.") - else - ..() - RefreshParts() - update_icon() - -/obj/machinery/pump/proc/handle_pumping() - var/turf/T = get_turf(src) - - if(istype(T, /turf/simulated/floor/water)) - cell.use(use * CELLRATE / efficiency) - reagents.add_reagent("water", reagents_per_cycle) - - if(T.temperature <= T0C) - reagents.add_reagent("ice", round(reagents_per_cycle / 2, 0.1)) - - if((istype(T,/turf/simulated/floor/water/pool) || istype(T,/turf/simulated/floor/water/deep/pool))) - reagents.add_reagent("chlorine", round(reagents_per_cycle / 10 * efficiency, 0.1)) - - else if(istype(T,/turf/simulated/floor/water/contaminated)) - reagents.add_reagent("vatstabilizer", round(reagents_per_cycle / 2)) - - if(T.loc.name == "Sea") // Saltwater. - reagents.add_reagent("sodiumchloride", round(reagents_per_cycle / 10 * efficiency, 0.1)) - - for(var/turf/simulated/mineral/MT in range(5)) - if(MT.mineral) - var/obj/effect/mineral/OR = MT.mineral - reagents.add_reagent(OR.ore_reagent, round(reagents_per_cycle / 20 * efficiency, 0.1)) - - else if(istype(T, /turf/simulated/floor/lava)) - cell.use(use * CELLRATE / efficiency * 4) - reagents.add_reagent("mineralizedfluid", round(reagents_per_cycle * efficiency / 2, 0.1)) diff --git a/polaris.dme b/polaris.dme deleted file mode 100644 index b0a5a89409..0000000000 --- a/polaris.dme +++ /dev/null @@ -1,3281 +0,0 @@ -// 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\_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\__513_compatibility.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\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\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\spaceman_dmm.dm" -#include "code\__defines\species_languages.dm" -#include "code\__defines\sqlite_defines.dm" -#include "code\__defines\stat_tracking.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\_compatibility\509\_JSON.dm" -#include "code\_compatibility\509\JSON Reader.dm" -#include "code\_compatibility\509\JSON Writer.dm" -#include "code\_compatibility\509\text.dm" -#include "code\_compatibility\509\type2type.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\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\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\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\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\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\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\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\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\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\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\antagonist\_antagonist_setup.dm" -#include "code\game\antagonist\antagonist.dm" -#include "code\game\antagonist\antagonist_add.dm" -#include "code\game\antagonist\antagonist_create.dm" -#include "code\game\antagonist\antagonist_equip.dm" -#include "code\game\antagonist\antagonist_factions.dm" -#include "code\game\antagonist\antagonist_helpers.dm" -#include "code\game\antagonist\antagonist_objectives.dm" -#include "code\game\antagonist\antagonist_panel.dm" -#include "code\game\antagonist\antagonist_place.dm" -#include "code\game\antagonist\antagonist_print.dm" -#include "code\game\antagonist\antagonist_update.dm" -#include "code\game\antagonist\alien\borer.dm" -#include "code\game\antagonist\alien\xenomorph.dm" -#include "code\game\antagonist\outsider\commando.dm" -#include "code\game\antagonist\outsider\deathsquad.dm" -#include "code\game\antagonist\outsider\ert.dm" -#include "code\game\antagonist\outsider\mercenary.dm" -#include "code\game\antagonist\outsider\ninja.dm" -#include "code\game\antagonist\outsider\raider.dm" -#include "code\game\antagonist\outsider\technomancer.dm" -#include "code\game\antagonist\outsider\trader.dm" -#include "code\game\antagonist\outsider\wizard.dm" -#include "code\game\antagonist\station\changeling.dm" -#include "code\game\antagonist\station\cultist.dm" -#include "code\game\antagonist\station\highlander.dm" -#include "code\game\antagonist\station\infiltrator.dm" -#include "code\game\antagonist\station\loyalist.dm" -#include "code\game\antagonist\station\renegade.dm" -#include "code\game\antagonist\station\revolutionary.dm" -#include "code\game\antagonist\station\rogue_ai.dm" -#include "code\game\antagonist\station\stowaway.dm" -#include "code\game\antagonist\station\thug.dm" -#include "code\game\antagonist\station\traitor.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_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\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\telecomunications.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\effect_system.dm" -#include "code\game\objects\effects\explosion_particles.dm" -#include "code\game\objects\effects\gibs.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\manifest.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\gibspawner.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\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\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\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\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\only_one.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\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\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\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_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\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\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\flufftext\TextFilters.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\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\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\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\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\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\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\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\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\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\rd-readme.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\tables\update_triggers.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\dnaswitch.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\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\southern_cross\southern_cross.dm" -#include "maps\submaps\_helpers.dm" -#include "maps\submaps\engine_submaps\engine.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 diff --git a/vorestation.dme b/vorestation.dme index 404569ab1a..f507ce3afa 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -967,7 +967,6 @@ #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\reagents\pump.dm" #include "code\game\machinery\telecomms\broadcaster.dm" #include "code\game\machinery\telecomms\broadcaster_vr.dm" #include "code\game\machinery\telecomms\logbrowser.dm" @@ -3598,6 +3597,7 @@ #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" From 920e917e7b8252a3b6ed3fd2da73aea59a9f9c88 Mon Sep 17 00:00:00 2001 From: Heroman Date: Sun, 20 Feb 2022 09:12:49 +1000 Subject: [PATCH 19/26] Conflict resolution --- code/modules/overmap/spacetravel.dm | 19 +++---------------- vorestation.dme | 2 +- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/code/modules/overmap/spacetravel.dm b/code/modules/overmap/spacetravel.dm index 386d3be0b6..4d24fd7039 100644 --- a/code/modules/overmap/spacetravel.dm +++ b/code/modules/overmap/spacetravel.dm @@ -14,19 +14,10 @@ // But pick an empty z level to use map_z += global.using_map.get_empty_zlevel() . = ..() -<<<<<<< HEAD - testing("Temporary sector at [x],[y],[z] was created, corresponding zlevel is [english_list(map_z)].") -======= - loc = locate(nx, ny, global.using_map.overmap_z) - x = nx - y = ny if(!map_z[1]) - log_and_message_admins("Could not create empty sector at [nx], [ny]. No available z levels to allocate.") + log_and_message_admins("Could not create empty sector at [x], [y]. No available z levels to allocate.") return INITIALIZE_HINT_QDEL - - map_sectors["[map_z[1]]"] = src - testing("Temporary sector at [x],[y] was created, corresponding zlevel is [map_z[1]].") ->>>>>>> 51f5290fa1a... Fixes temp sector initialization (#8325) + testing("Temporary sector at [x],[y],[z] was created, corresponding zlevel is [english_list(map_z)].") /obj/effect/overmap/visitable/sector/temporary/Destroy() for(var/zlevel in map_z) @@ -59,14 +50,10 @@ var/obj/effect/overmap/visitable/sector/temporary/res = locate() in overmap_turf if(istype(res)) return res -<<<<<<< HEAD - return new /obj/effect/overmap/visitable/sector/temporary(overmap_turf) -======= - res = new /obj/effect/overmap/visitable/sector/temporary(x, y) + res = new /obj/effect/overmap/visitable/sector/temporary(overmap_turf) if(QDELETED(res)) res = null return res ->>>>>>> 51f5290fa1a... Fixes temp sector initialization (#8325) /atom/movable/proc/lost_in_space() for(var/atom/movable/AM in contents) diff --git a/vorestation.dme b/vorestation.dme index a31711bb57..cb654dd543 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -4110,4 +4110,4 @@ #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 \ No newline at end of file +// END_INCLUDE From b53316834c94ca326865b1e87c2018edbad0957a Mon Sep 17 00:00:00 2001 From: Heroman Date: Sun, 20 Feb 2022 10:55:32 +1000 Subject: [PATCH 20/26] Fixed version of 8341 --- code/game/turfs/turf.dm | 4 ++-- code/game/turfs/turf_changing.dm | 8 +------- code/modules/turbolift/turbolift.dm | 4 ---- 3 files changed, 3 insertions(+), 13 deletions(-) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index f893aaf80e..66376f4431 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -43,7 +43,7 @@ //Lighting related set_luminosity(!(dynamic_lighting)) - + if(opacity) directional_opacity = ALL_CARDINALS @@ -60,7 +60,7 @@ /turf/Destroy() if (!changing_turf) - crash_with("Improper turf qdel. Do not qdel turfs directly.") + stack_trace("Improper turf qdel. Do not qdel turfs directly.") changing_turf = FALSE cleanbot_reserved_turfs -= src if(connections) diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index 58068c3011..72cb432e1b 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -43,7 +43,6 @@ var/old_dangerous_objects = dangerous_objects var/old_dynamic_lumcount = dynamic_lumcount -<<<<<<< HEAD var/turf/Ab = GetAbove(src) if(Ab) Ab.multiz_turf_del(src, DOWN) @@ -62,16 +61,11 @@ cut_overlays(TRUE) RemoveElement(/datum/element/turf_z_transparency) - - if(ispath(N, /turf/simulated/floor)) - var/turf/simulated/W = new N( locate(src.x, src.y, src.z) ) -======= changing_turf = TRUE qdel(src) var/turf/W = new N( locate(src.x, src.y, src.z) ) - if(istype(W, /turf/simulated/floor)) ->>>>>>> a7877d86e50... Merge pull request #8341 from MistakeNot4892/qdel + if(ispath(N, /turf/simulated/floor)) if(old_fire) W.fire = old_fire W.RemoveLattice() diff --git a/code/modules/turbolift/turbolift.dm b/code/modules/turbolift/turbolift.dm index da2745bffc..78fb4084cd 100644 --- a/code/modules/turbolift/turbolift.dm +++ b/code/modules/turbolift/turbolift.dm @@ -195,11 +195,7 @@ if(istype(AM, /mob/living) && !(AM.is_incorporeal())) var/mob/living/M = AM M.gib() -<<<<<<< HEAD else if(AM.simulated && !(istype(AM, /mob/observer)) && !(AM.is_incorporeal())) -======= - else if(istype(AM, /mob/zshadow) || (AM.simulated && !(istype(AM, /mob/observer)))) ->>>>>>> a7877d86e50... Merge pull request #8341 from MistakeNot4892/qdel qdel(AM) origin.move_contents_to(destination) From ed8c68e74adbfbb0dfc977f6f77501cf28281611 Mon Sep 17 00:00:00 2001 From: VerySoft Date: Sat, 19 Feb 2022 20:23:42 -0500 Subject: [PATCH 21/26] Item Bank - Do not store things crafted from material stacks The item bank doesn't store what such things are made out of, and so, such things will not be correct when retrieved. This does not block things from being stored when made from the common crafting menu though, since those things spawn a defined item type instead of setting up material properties. --- code/game/objects/items/stacks/stack.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 2ea9ad0667..b6ad543e6a 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -212,7 +212,11 @@ O.set_dir(user.dir) O.add_fingerprint(user) - + //VOREStation Addition Start - Let's not store things that get crafted with materials like this, they won't spawn correctly when retrieved. + if (isobj(O)) + var/obj/P = O + P.persist_storable = FALSE + //VOREStation Addition End if (istype(O, /obj/item/stack)) var/obj/item/stack/S = O S.amount = produced From 8155a5bb6b185a52fb7774903dcc36176b41df93 Mon Sep 17 00:00:00 2001 From: Hatterhat Date: Sun, 20 Feb 2022 00:09:26 -0600 Subject: [PATCH 22/26] numerical order? what's that? --- code/game/jobs/job/civilian.dm | 4 ++-- code/game/jobs/job/exploration_vr.dm | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index b80257fee5..add113dca2 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -97,8 +97,8 @@ supervisors = "the Head of Personnel" selection_color = "#9b633e" economic_modifier = 5 - access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) - minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) + access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_RC_announce) + minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_RC_announce) banned_job_species = list("digital", SPECIES_PROMETHEAN) ideal_character_age = 40 diff --git a/code/game/jobs/job/exploration_vr.dm b/code/game/jobs/job/exploration_vr.dm index 80b32adb37..69e69c15d8 100644 --- a/code/game/jobs/job/exploration_vr.dm +++ b/code/game/jobs/job/exploration_vr.dm @@ -43,8 +43,8 @@ pto_type = PTO_EXPLORATION dept_time_required = 20 - access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot, access_explorer, access_gateway, access_pathfinder) - minimal_access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot, access_explorer, access_gateway, access_pathfinder) + access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot, access_explorer, access_gateway, access_pathfinder, access_RC_announce) + minimal_access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot, access_explorer, access_gateway, access_pathfinder, access_RC_announce) outfit_type = /decl/hierarchy/outfit/job/pathfinder job_description = "The Pathfinder's job is to lead and manage expeditions, and is the primary authority on all off-station expeditions." alt_titles = list("Expedition Lead" = /datum/alt_title/expedition_lead, "Exploration Manager" = /datum/alt_title/exploration_manager) From fb8b8b7f5c18b04f254b9f364cd8959fdc36962d Mon Sep 17 00:00:00 2001 From: Hatterhat Date: Sun, 20 Feb 2022 01:05:01 -0600 Subject: [PATCH 23/26] what's my name? dunkaccino --- code/modules/clothing/spacesuits/rig/rig.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 5292209807..780895db22 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -482,6 +482,12 @@ var/efficiency = 1 - H.get_pressure_weakness(environment.return_pressure()) // You need to have a good seal for effective cooling var/env_temp = get_environment_temperature() //wont save you from a fire var/temp_adj = min(H.bodytemperature - max(thermostat, env_temp), max_cooling) + var/thermal_protection = H.get_heat_protection(env_temp) // ... unless you've got a good suit. + + if(thermal_protection < 0.99) //For some reason, < 1 returns false if the value is 1. + temp_adj = min(H.bodytemperature - max(thermostat, env_temp), max_cooling) + else + temp_adj = min(H.bodytemperature - thermostat, max_cooling) if (temp_adj < 0.5) //only cools, doesn't heat, also we don't need extreme precision return From 4b80c293ad0b9893cb593ae434edcccd275e8b31 Mon Sep 17 00:00:00 2001 From: VerySoft Date: Sun, 20 Feb 2022 07:15:56 -0500 Subject: [PATCH 24/26] Attempt to reduce sound based lag So, I am not sure how much this will help or hurt. We have noticed that, there is a lot of lag that happens under heavy radio use, and Ascian noted that the playsound proc was seriously overloaded during those times. Notably, presently every radio in the game uses playsound to play the radio sound any time anything sends a radio message, even if the radio in question doesn't have the channel the message was sent to. And if you are unaware, playsound figures out who's in range of every source of sound and their distance from its source to adjust the sounds so that it sounds like it's coming from the right place in the world. Problem is, if the server's decently busy, that's possibly a hundred things doing that work every time any message comes over a radio. I thought it would be better if, since the radio systems are ALREADY doing the work of figuring out who can see the radio message, that playsound doesn't actually need to do that work again for tons of different sources. ADDITIONALLY, the thing to determine if the sound should be played based on preferences is also a part of playsound, meaning that it STILL RUNS PLAYSOUND EVEN IF THE PREFERENCE IS OFF So! I used byond's direct sound thing which, I THINK just makes your client play the sound and ought to use next to no extra server resources for it. The only downside is that we lose pitch shifting on the radio sounds, and we lose the sense of 'audio presence' for the sounds in the world. In short, this means that the radio sound will just, always sound the same no matter where it is in relation to your character. If you receive a radio message, the sound will play on your client. The sound should also only ever play once for you per message, rather than stacking like it does when lots of people/radios are in the same place. ASSUMING THIS WORKS HOW I THINK IT DOES, this should reduce a lot of computer work for playsound on busy shifts. (And ideally, increase performance) This change does also use and respect the same preference that already exists for radio sounds, so there will be no change in how that works. --- code/game/machinery/telecomms/broadcaster.dm | 10 ++++++++++ code/game/objects/items/devices/radio/headset.dm | 4 ++-- sound/effects/radio_common_quieter.ogg | Bin 0 -> 5190 bytes 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 sound/effects/radio_common_quieter.ogg diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 6cf3d624c7..549546b388 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -511,27 +511,37 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept if(length(heard_masked)) for (var/mob/R in heard_masked) R.hear_radio(message_pieces, verbage, part_a, part_b, part_c, M, 0, name) + if(R.is_preference_enabled(/datum/client_preference/radio_sounds)) + R << 'sound/effects/radio_common_quieter.ogg' /* --- Process all the mobs that heard the voice normally (understood) --- */ if(length(heard_normal)) for (var/mob/R in heard_normal) R.hear_radio(message_pieces, verbage, part_a, part_b, part_c, M, 0, realname) + if(R.is_preference_enabled(/datum/client_preference/radio_sounds)) + R << 'sound/effects/radio_common_quieter.ogg' /* --- Process all the mobs that heard the voice normally (did not understand) --- */ if(length(heard_voice)) for (var/mob/R in heard_voice) R.hear_radio(message_pieces, verbage, part_a, part_b, part_c, M,0, vname) + if(R.is_preference_enabled(/datum/client_preference/radio_sounds)) + R << 'sound/effects/radio_common_quieter.ogg' /* --- Process all the mobs that heard a garbled voice (did not understand) --- */ // Displays garbled message (ie "f*c* **u, **i*er!") if(length(heard_garbled)) for (var/mob/R in heard_garbled) R.hear_radio(message_pieces, verbage, part_a, part_b, part_c, M, 1, vname) + if(R.is_preference_enabled(/datum/client_preference/radio_sounds)) + R << 'sound/effects/radio_common_quieter.ogg' /* --- Complete gibberish. Usually happens when there's a compressed message --- */ if(length(heard_gibberish)) for (var/mob/R in heard_gibberish) R.hear_radio(message_pieces, verbage, part_a, part_b, part_c, M, 1) + if(R.is_preference_enabled(/datum/client_preference/radio_sounds)) + R << 'sound/effects/radio_common_quieter.ogg' return 1 diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index a7ba535c3b..e456f22b26 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -62,12 +62,12 @@ /obj/item/device/radio/headset/receive_range(freq, level, aiOverride = 0) if (aiOverride) - playsound(loc, 'sound/effects/radio_common.ogg', 20, 1, 1, preference = /datum/client_preference/radio_sounds) + //playsound(loc, 'sound/effects/radio_common.ogg', 20, 1, 1, preference = /datum/client_preference/radio_sounds) return ..(freq, level) if(ishuman(src.loc)) var/mob/living/carbon/human/H = src.loc if(H.l_ear == src || H.r_ear == src) - playsound(loc, 'sound/effects/radio_common.ogg', 20, 1, 1, preference = /datum/client_preference/radio_sounds) + //playsound(loc, 'sound/effects/radio_common.ogg', 20, 1, 1, preference = /datum/client_preference/radio_sounds) return ..(freq, level) return -1 diff --git a/sound/effects/radio_common_quieter.ogg b/sound/effects/radio_common_quieter.ogg new file mode 100644 index 0000000000000000000000000000000000000000..b4686b58ea6decd8660c5c364505d09f7aa087bd GIT binary patch literal 5190 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 literal 0 HcmV?d00001 From 1c55755e8e2e50dd6ee77183f3134b3eca42084d Mon Sep 17 00:00:00 2001 From: VerySoft Date: Sun, 20 Feb 2022 07:39:34 -0500 Subject: [PATCH 25/26] 2/20/22 Back to tether It's sunday --- vorestation.dme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vorestation.dme b/vorestation.dme index cb654dd543..503cc2fb3c 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -4099,7 +4099,6 @@ #include "maps\southern_cross\loadout\loadout_suit.dm" #include "maps\southern_cross\loadout\loadout_uniform.dm" #include "maps\southern_cross\loadout\loadout_vr.dm" -#include "maps\stellardelight\stellar_delight.dm" #include "maps\submaps\_helpers.dm" #include "maps\submaps\_readme.dm" #include "maps\submaps\engine_submaps\engine.dm" @@ -4109,5 +4108,6 @@ #include "maps\submaps\space_submaps\debrisfield\debrisfield.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness_areas.dm" +#include "maps\tether\tether.dm" #include "maps\~map_system\maps.dm" // END_INCLUDE From aed1d9726d56e4aec0c4c92aea4c792d5a79699d Mon Sep 17 00:00:00 2001 From: VerySoft Date: Sun, 20 Feb 2022 14:43:14 -0500 Subject: [PATCH 26/26] Also replaces all the re-pathed sofas all over --- maps/cynosure/cynosure-1.dmm | 4 +- maps/cynosure/cynosure-3.dmm | 4 +- maps/cynosure/submaps/16x11/OldDorms.dmm | 6 +- .../aerostat/aerostat_science_outpost.dmm | 12 ++-- maps/gateway_vr/eggnogtown.dmm | 56 +++++++++---------- maps/gateway_vr/eggnogtownunderground.dmm | 8 +-- maps/gateway_vr/variable/arynthilake_a.dmm | 8 +-- maps/gateway_vr/variable/arynthilake_b.dmm | 8 +-- .../variable/honlethhighlands_a.dmm | 8 +-- .../variable/honlethhighlands_b.dmm | 8 +-- maps/offmap_vr/om_ships/curashuttle.dmm | 4 +- maps/offmap_vr/om_ships/itglight.dmm | 10 ++-- maps/om_adventure/pois/cabin1.dmm | 6 +- maps/om_adventure/pois/cabin2.dmm | 8 +-- maps/om_adventure/pois/medicalcenter.dmm | 6 +- maps/southern_cross/southern_cross-1.dmm | 4 +- .../mountains/speakeasy_vr.dmm | 6 +- .../surface_submaps/plains/emptycabin.dmm | 4 +- .../surface_submaps/plains/lonehome.dmm | 8 +-- .../surface_submaps/plains/lonehome_vr.dmm | 8 +-- .../surface_submaps/plains/oldhotel.dmm | 6 +- maps/tether/tether-01-surface1.dmm | 6 +- 22 files changed, 99 insertions(+), 99 deletions(-) diff --git a/maps/cynosure/cynosure-1.dmm b/maps/cynosure/cynosure-1.dmm index 48a0b40a9a..4b0fbde3b8 100644 --- a/maps/cynosure/cynosure-1.dmm +++ b/maps/cynosure/cynosure-1.dmm @@ -11831,7 +11831,7 @@ "zw" = ( /obj/effect/floor_decal/borderfloorwhite, /obj/effect/floor_decal/corner/purple/border, -/obj/structure/bed/chair/sofa/beige/left{ +/obj/structure/bed/chair/sofa/left/beige{ dir = 1 }, /obj/structure/extinguisher_cabinet{ @@ -12128,7 +12128,7 @@ }, /obj/effect/floor_decal/borderfloorwhite, /obj/effect/floor_decal/corner/purple/border, -/obj/structure/bed/chair/sofa/beige/right{ +/obj/structure/bed/chair/sofa/right/beige{ dir = 1 }, /turf/simulated/floor/tiled/neutral, diff --git a/maps/cynosure/cynosure-3.dmm b/maps/cynosure/cynosure-3.dmm index d4942804fa..9853cf2bdb 100644 --- a/maps/cynosure/cynosure-3.dmm +++ b/maps/cynosure/cynosure-3.dmm @@ -8712,7 +8712,7 @@ /turf/simulated/floor/plating, /area/surface/station/rnd/lab) "fOa" = ( -/obj/structure/bed/chair/sofa/brown/right{ +/obj/structure/bed/chair/sofa/right/brown{ dir = 4 }, /obj/effect/landmark/start{ @@ -26926,7 +26926,7 @@ /turf/simulated/floor/tiled/white, /area/surface/station/rnd/research) "rLU" = ( -/obj/structure/bed/chair/sofa/brown/left{ +/obj/structure/bed/chair/sofa/left/brown{ dir = 4 }, /obj/effect/landmark/start{ diff --git a/maps/cynosure/submaps/16x11/OldDorms.dmm b/maps/cynosure/submaps/16x11/OldDorms.dmm index 42598f0135..445e2357b9 100644 --- a/maps/cynosure/submaps/16x11/OldDorms.dmm +++ b/maps/cynosure/submaps/16x11/OldDorms.dmm @@ -2,7 +2,7 @@ "aK" = (/turf/simulated/floor/tiled/freezer,/area/template_noop) "bo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/stack/tile/floor,/turf/simulated/floor/plating,/area/template_noop) "bt" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/light{dir = 4},/turf/simulated/floor/plating,/area/template_noop) -"bx" = (/obj/structure/bed/chair/sofa/beige/right{dir = 4},/turf/simulated/floor/wood/broken,/area/template_noop) +"bx" = (/obj/structure/bed/chair/sofa/right/beige{dir = 4},/turf/simulated/floor/wood/broken,/area/template_noop) "bI" = (/obj/machinery/vending/snack{dir = 4},/turf/simulated/floor/tiled/dark,/area/template_noop) "cy" = (/obj/structure/closet/wardrobe/pjs,/turf/simulated/floor/tiled/dark,/area/template_noop) "cD" = (/obj/item/weapon/camera_assembly,/turf/simulated/floor/tiled,/area/template_noop) @@ -66,7 +66,7 @@ "MG" = (/obj/machinery/vending/cola{dir = 4},/turf/simulated/floor/tiled/dark,/area/template_noop) "MI" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1},/turf/simulated/floor/wood,/area/template_noop) "NW" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1},/turf/simulated/floor/plating,/area/template_noop) -"Od" = (/obj/structure/bed/chair/sofa/beige/right{dir = 4},/obj/item/frame/apc,/turf/simulated/floor/wood,/area/template_noop) +"Od" = (/obj/structure/bed/chair/sofa/right/beige{dir = 4},/obj/item/frame/apc,/turf/simulated/floor/wood,/area/template_noop) "QN" = (/turf/simulated/wall,/area/template_noop) "QT" = (/obj/structure/table/standard,/obj/machinery/light_construct{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 8},/turf/simulated/floor/wood,/area/template_noop) "Rm" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/floor/tiled/dark,/area/template_noop) @@ -75,7 +75,7 @@ "Td" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/freezer,/area/template_noop) "TQ" = (/obj/structure/table/standard,/obj/item/weapon/coin/silver,/obj/item/clothing/head/soft/grey{pixel_x = -2; pixel_y = 3},/turf/simulated/floor/plating,/area/template_noop) "Ul" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/template_noop) -"Vt" = (/obj/structure/bed/chair/sofa/beige/left{dir = 4},/turf/simulated/floor/wood,/area/template_noop) +"Vt" = (/obj/structure/bed/chair/sofa/left/beige{dir = 4},/turf/simulated/floor/wood,/area/template_noop) "Xg" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled/dark,/area/template_noop) "Xi" = (/obj/structure/table/standard,/obj/item/frame,/turf/simulated/floor/plating,/area/template_noop) "Xz" = (/obj/item/frame/extinguisher_cabinet,/turf/simulated/floor/tiled/dark,/area/template_noop) diff --git a/maps/expedition_vr/aerostat/aerostat_science_outpost.dmm b/maps/expedition_vr/aerostat/aerostat_science_outpost.dmm index 49d0f2963b..c1d7fe3f7c 100644 --- a/maps/expedition_vr/aerostat/aerostat_science_outpost.dmm +++ b/maps/expedition_vr/aerostat/aerostat_science_outpost.dmm @@ -1060,7 +1060,7 @@ /turf/simulated/floor/tiled, /area/offmap/aerostat/inside/drillstorage) "cR" = ( -/obj/structure/bed/chair/sofa/purp/left, +/obj/structure/bed/chair/sofa/left/purp, /obj/structure/sign/painting/public{ pixel_y = 30 }, @@ -1696,7 +1696,7 @@ /turf/simulated/floor/tiled/white, /area/offmap/aerostat/inside/firingrange) "eE" = ( -/obj/structure/bed/chair/sofa/purp/right, +/obj/structure/bed/chair/sofa/right/purp, /obj/structure/sign/painting/public{ pixel_y = 30 }, @@ -1752,7 +1752,7 @@ /obj/machinery/camera/network/research_outpost{ dir = 4 }, -/obj/structure/bed/chair/sofa/purp/left{ +/obj/structure/bed/chair/sofa/left/purp{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -1796,7 +1796,7 @@ /obj/structure/sign/painting/public{ pixel_x = -30 }, -/obj/structure/bed/chair/sofa/purp/right{ +/obj/structure/bed/chair/sofa/right/purp{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -3190,7 +3190,7 @@ /obj/machinery/camera/network/research_outpost{ dir = 8 }, -/obj/structure/bed/chair/sofa/purp/right{ +/obj/structure/bed/chair/sofa/right/purp{ dir = 8 }, /turf/simulated/floor/tiled/dark, @@ -4662,7 +4662,7 @@ /obj/structure/cable{ icon_state = "2-8" }, -/obj/structure/bed/chair/sofa/purp/left{ +/obj/structure/bed/chair/sofa/left/purp{ dir = 8 }, /turf/simulated/floor/tiled/dark, diff --git a/maps/gateway_vr/eggnogtown.dmm b/maps/gateway_vr/eggnogtown.dmm index de787f7cab..eda19d994e 100644 --- a/maps/gateway_vr/eggnogtown.dmm +++ b/maps/gateway_vr/eggnogtown.dmm @@ -586,7 +586,7 @@ /turf/simulated/floor/wood, /area/gateway/eggnogtown/kitchihome/den) "bU" = ( -/obj/structure/bed/chair/sofa/beige/right{ +/obj/structure/bed/chair/sofa/right/beige{ dir = 8 }, /turf/simulated/floor/wood{ @@ -610,7 +610,7 @@ /turf/simulated/floor/bmarble, /area/gateway/eggnogtown/hall/north) "ca" = ( -/obj/structure/bed/chair/sofa/beige/corner{ +/obj/structure/bed/chair/sofa/corner/beige{ dir = 1 }, /turf/simulated/floor/wmarble, @@ -619,7 +619,7 @@ /turf/simulated/wall/wood, /area/gateway/eggnogtown/cavehome/office) "cn" = ( -/obj/structure/bed/chair/sofa/black/right{ +/obj/structure/bed/chair/sofa/right/black{ dir = 4 }, /turf/simulated/floor/wood, @@ -729,7 +729,7 @@ /turf/simulated/open, /area/gateway/eggnogtown/storage) "do" = ( -/obj/structure/bed/chair/sofa/black/right{ +/obj/structure/bed/chair/sofa/right/black{ dir = 8 }, /turf/simulated/floor/wood{ @@ -790,7 +790,7 @@ /turf/simulated/floor/outdoors/grass/forest, /area/gateway/eggnogtown/greenhouse) "dM" = ( -/obj/structure/bed/chair/sofa/beige/left{ +/obj/structure/bed/chair/sofa/left/beige{ dir = 8 }, /turf/simulated/floor/wood{ @@ -867,7 +867,7 @@ /turf/simulated/floor/wood, /area/gateway/eggnogtown/kitchihome) "ez" = ( -/obj/structure/bed/chair/sofa/beige/left{ +/obj/structure/bed/chair/sofa/left/beige{ dir = 8 }, /turf/simulated/floor/wood{ @@ -896,7 +896,7 @@ }, /area/gateway/eggnogtown/cavehome) "eO" = ( -/obj/structure/bed/chair/sofa/beige/right{ +/obj/structure/bed/chair/sofa/right/beige{ dir = 8 }, /turf/simulated/floor/wood{ @@ -1377,7 +1377,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/gateway/eggnogtown/dining) "lS" = ( -/obj/structure/bed/chair/sofa/black/right{ +/obj/structure/bed/chair/sofa/right/black{ dir = 1 }, /turf/simulated/floor/wood, @@ -1428,7 +1428,7 @@ }, /area/gateway/eggnogtown/stokeswashere) "mv" = ( -/obj/structure/bed/chair/sofa/black/corner, +/obj/structure/bed/chair/sofa/corner/black, /turf/simulated/floor/wood, /area/gateway/eggnogtown/hall/south) "mw" = ( @@ -1853,7 +1853,7 @@ /turf/simulated/wall/iron, /area/gateway/eggnogtown/alipad/bedroom) "sE" = ( -/obj/structure/bed/chair/sofa/black/left{ +/obj/structure/bed/chair/sofa/left/black{ dir = 8 }, /turf/simulated/floor/wood{ @@ -1861,7 +1861,7 @@ }, /area/gateway/eggnogtown/eastcaveland) "sF" = ( -/obj/structure/bed/chair/sofa/black/right{ +/obj/structure/bed/chair/sofa/right/black{ dir = 1 }, /turf/simulated/floor/wood{ @@ -2204,7 +2204,7 @@ /turf/simulated/floor/wood, /area/gateway/eggnogtown/hall/south) "wR" = ( -/obj/structure/bed/chair/sofa/black/right{ +/obj/structure/bed/chair/sofa/right/black{ dir = 4 }, /turf/simulated/floor/wood{ @@ -2230,7 +2230,7 @@ /turf/simulated/floor/carpet/bcarpet, /area/gateway/eggnogtown/loniabode) "xq" = ( -/obj/structure/bed/chair/sofa/beige/corner{ +/obj/structure/bed/chair/sofa/corner/beige{ dir = 8 }, /turf/simulated/floor/wmarble, @@ -2282,7 +2282,7 @@ /turf/simulated/floor/wood, /area/gateway/eggnogtown/bar) "ys" = ( -/obj/structure/bed/chair/sofa/beige/corner, +/obj/structure/bed/chair/sofa/corner/beige, /turf/simulated/floor/wmarble, /area/gateway/eggnogtown/arturoswolfden) "yt" = ( @@ -2340,7 +2340,7 @@ }, /area/gateway/eggnogtown/sigloo) "zr" = ( -/obj/structure/bed/chair/sofa/black/right, +/obj/structure/bed/chair/sofa/right/black, /turf/simulated/floor/wood{ temperature = 258.15 }, @@ -2376,7 +2376,7 @@ /turf/simulated/floor/wood, /area/gateway/eggnogtown/visitorlounge) "zU" = ( -/obj/structure/bed/chair/sofa/black/left{ +/obj/structure/bed/chair/sofa/left/black{ dir = 4 }, /turf/simulated/floor/carpet/bcarpet, @@ -2603,7 +2603,7 @@ /turf/simulated/floor/wood, /area/gateway/eggnogtown/kitchihome/bedroom) "CP" = ( -/obj/structure/bed/chair/sofa/black/left{ +/obj/structure/bed/chair/sofa/left/black{ dir = 1 }, /turf/simulated/floor/wood, @@ -2655,7 +2655,7 @@ /turf/simulated/floor/wood, /area/gateway/eggnogtown/visitorlounge/room2) "DR" = ( -/obj/structure/bed/chair/sofa/black/left{ +/obj/structure/bed/chair/sofa/left/black{ dir = 8 }, /turf/simulated/floor/wood, @@ -2712,7 +2712,7 @@ /turf/simulated/floor/reinforced, /area/gateway/eggnogtown/hall) "ES" = ( -/obj/structure/bed/chair/sofa/black/left, +/obj/structure/bed/chair/sofa/left/black, /turf/simulated/floor/wood{ temperature = 258.15 }, @@ -2766,7 +2766,7 @@ }, /area/gateway/eggnogtown/stokeswashere) "FL" = ( -/obj/structure/bed/chair/sofa/black/left{ +/obj/structure/bed/chair/sofa/left/black{ dir = 4 }, /turf/simulated/floor/wood{ @@ -2988,7 +2988,7 @@ /turf/simulated/floor/wood, /area/gateway/eggnogtown/arturoswolfden) "IW" = ( -/obj/structure/bed/chair/sofa/black/left, +/obj/structure/bed/chair/sofa/left/black, /turf/simulated/floor/wood, /area/gateway/eggnogtown/hall/south) "Jc" = ( @@ -3107,7 +3107,7 @@ /turf/simulated/floor/wood, /area/gateway/eggnogtown/hall/south) "KI" = ( -/obj/structure/bed/chair/sofa/black/left{ +/obj/structure/bed/chair/sofa/left/black{ dir = 1 }, /obj/item/weapon/card/id{ @@ -3266,7 +3266,7 @@ /turf/simulated/floor/wood, /area/gateway/eggnogtown/kitchihome/diningroom) "MI" = ( -/obj/structure/bed/chair/sofa/black/right, +/obj/structure/bed/chair/sofa/right/black, /turf/simulated/floor/wood, /area/gateway/eggnogtown/hall/south) "MN" = ( @@ -3365,7 +3365,7 @@ /turf/simulated/floor/wood, /area/gateway/eggnogtown/kitchihome) "Oq" = ( -/obj/structure/bed/chair/sofa/black/right{ +/obj/structure/bed/chair/sofa/right/black{ dir = 4 }, /turf/simulated/floor/carpet/bcarpet, @@ -3763,7 +3763,7 @@ /turf/simulated/floor/carpet/bcarpet, /area/gateway/eggnogtown/loniabode) "TH" = ( -/obj/structure/bed/chair/sofa/black/right, +/obj/structure/bed/chair/sofa/right/black, /turf/simulated/floor/wood{ temperature = 258.15 }, @@ -3991,7 +3991,7 @@ /turf/simulated/wall/wood, /area/gateway/eggnogtown/loniabode) "Xm" = ( -/obj/structure/bed/chair/sofa/black/left, +/obj/structure/bed/chair/sofa/left/black, /turf/simulated/floor/wood{ temperature = 258.15 }, @@ -4117,7 +4117,7 @@ }, /area/gateway/eggnogtown/cavehome) "YD" = ( -/obj/structure/bed/chair/sofa/black/corner{ +/obj/structure/bed/chair/sofa/corner/black{ dir = 1 }, /turf/simulated/floor/wood, @@ -4129,7 +4129,7 @@ /turf/simulated/floor/reinforced, /area/gateway/eggnogtown) "YP" = ( -/obj/structure/bed/chair/sofa/beige/corner{ +/obj/structure/bed/chair/sofa/corner/beige{ dir = 4 }, /turf/simulated/floor/wmarble, diff --git a/maps/gateway_vr/eggnogtownunderground.dmm b/maps/gateway_vr/eggnogtownunderground.dmm index d7ea90b144..7da812dcca 100644 --- a/maps/gateway_vr/eggnogtownunderground.dmm +++ b/maps/gateway_vr/eggnogtownunderground.dmm @@ -326,7 +326,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/gateway/eggnogtown/hotsprings) "kS" = ( -/obj/structure/bed/chair/sofa/black/right, +/obj/structure/bed/chair/sofa/right/black, /turf/simulated/floor/plating/eris/under{ temperature = 258.15 }, @@ -369,7 +369,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/gateway/eggnogtown/hotspring) "nh" = ( -/obj/structure/bed/chair/sofa/black/corner, +/obj/structure/bed/chair/sofa/corner/black, /turf/simulated/floor/plating/eris/under{ temperature = 258.15 }, @@ -578,7 +578,7 @@ }, /area/gateway/eggnogtown/vibeout) "Aw" = ( -/obj/structure/bed/chair/sofa/black/corner{ +/obj/structure/bed/chair/sofa/corner/black{ dir = 8 }, /turf/simulated/floor/plating/eris/under{ @@ -906,7 +906,7 @@ }, /area/gateway/eggnogtown/hotsprings) "ZR" = ( -/obj/structure/bed/chair/sofa/black/left{ +/obj/structure/bed/chair/sofa/left/black{ dir = 1 }, /turf/simulated/floor/plating/eris/under{ diff --git a/maps/gateway_vr/variable/arynthilake_a.dmm b/maps/gateway_vr/variable/arynthilake_a.dmm index 42f3f1b517..ccf5fd4fe0 100644 --- a/maps/gateway_vr/variable/arynthilake_a.dmm +++ b/maps/gateway_vr/variable/arynthilake_a.dmm @@ -1414,7 +1414,7 @@ }, /area/gateway/arynthilake/dome) "yl" = ( -/obj/structure/bed/chair/sofa/brown/right{ +/obj/structure/bed/chair/sofa/right/brown{ dir = 4 }, /turf/simulated/floor/carpet, @@ -1528,7 +1528,7 @@ /turf/simulated/floor/carpet/purcarpet, /area/gateway/arynthilake/dome) "BX" = ( -/obj/structure/bed/chair/sofa/brown/corner, +/obj/structure/bed/chair/sofa/corner/brown, /turf/simulated/floor/carpet, /area/gateway/arynthilake/dome) "Cl" = ( @@ -1719,7 +1719,7 @@ /turf/simulated/floor/carpet/sblucarpet, /area/gateway/arynthilake/dome) "Hp" = ( -/obj/structure/bed/chair/sofa/brown/corner{ +/obj/structure/bed/chair/sofa/corner/brown{ dir = 1 }, /obj/effect/landmark/mcguffin_spawner, @@ -1736,7 +1736,7 @@ /turf/simulated/floor/outdoors/newdirt, /area/gateway/arynthilake) "HR" = ( -/obj/structure/bed/chair/sofa/brown/left{ +/obj/structure/bed/chair/sofa/left/brown{ dir = 8 }, /turf/simulated/floor/carpet, diff --git a/maps/gateway_vr/variable/arynthilake_b.dmm b/maps/gateway_vr/variable/arynthilake_b.dmm index 612294d96b..a7e041b07f 100644 --- a/maps/gateway_vr/variable/arynthilake_b.dmm +++ b/maps/gateway_vr/variable/arynthilake_b.dmm @@ -553,7 +553,7 @@ /turf/simulated/floor/tiled/eris/white/brown_platform, /area/gateway/arynthilake/dome) "ku" = ( -/obj/structure/bed/chair/sofa/brown/right{ +/obj/structure/bed/chair/sofa/right/brown{ dir = 4 }, /turf/simulated/floor/carpet, @@ -1038,7 +1038,7 @@ /turf/simulated/floor/tiled/eris/steel/techfloor, /area/gateway/arynthilake/dome) "vH" = ( -/obj/structure/bed/chair/sofa/brown/left{ +/obj/structure/bed/chair/sofa/left/brown{ dir = 8 }, /turf/simulated/floor/carpet, @@ -2123,7 +2123,7 @@ }, /area/gateway/arynthilake/dome) "TD" = ( -/obj/structure/bed/chair/sofa/brown/corner{ +/obj/structure/bed/chair/sofa/corner/brown{ dir = 1 }, /turf/simulated/floor/carpet, @@ -2141,7 +2141,7 @@ /area/gateway/arynthilake/engine) "Uj" = ( /obj/effect/landmark/mcguffin_spawner, -/obj/structure/bed/chair/sofa/brown/corner, +/obj/structure/bed/chair/sofa/corner/brown, /turf/simulated/floor/carpet, /area/gateway/arynthilake/dome) "Uk" = ( diff --git a/maps/gateway_vr/variable/honlethhighlands_a.dmm b/maps/gateway_vr/variable/honlethhighlands_a.dmm index db7570d4ef..7bb7359a33 100644 --- a/maps/gateway_vr/variable/honlethhighlands_a.dmm +++ b/maps/gateway_vr/variable/honlethhighlands_a.dmm @@ -573,7 +573,7 @@ /obj/effect/floor_decal/techfloor{ dir = 8 }, -/obj/structure/bed/chair/sofa/brown/left{ +/obj/structure/bed/chair/sofa/left/brown{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -920,7 +920,7 @@ }, /area/gateway/honlethhighlands/caves) "nI" = ( -/obj/structure/bed/chair/sofa/green/left{ +/obj/structure/bed/chair/sofa/left/green{ dir = 4 }, /turf/simulated/floor/wood, @@ -2133,7 +2133,7 @@ }, /area/gateway/honlethhighlands/caves) "HY" = ( -/obj/structure/bed/chair/sofa/green/right{ +/obj/structure/bed/chair/sofa/right/green{ dir = 4 }, /turf/simulated/floor/wood, @@ -2249,7 +2249,7 @@ /obj/effect/floor_decal/techfloor{ dir = 8 }, -/obj/structure/bed/chair/sofa/brown/right{ +/obj/structure/bed/chair/sofa/right/brown{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, diff --git a/maps/gateway_vr/variable/honlethhighlands_b.dmm b/maps/gateway_vr/variable/honlethhighlands_b.dmm index 7de8389bc7..9a62e9b846 100644 --- a/maps/gateway_vr/variable/honlethhighlands_b.dmm +++ b/maps/gateway_vr/variable/honlethhighlands_b.dmm @@ -560,7 +560,7 @@ /obj/effect/floor_decal/techfloor{ dir = 8 }, -/obj/structure/bed/chair/sofa/brown/left{ +/obj/structure/bed/chair/sofa/left/brown{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, @@ -913,7 +913,7 @@ /turf/simulated/floor/tiled/techfloor, /area/gateway/honlethhighlands/gate) "nI" = ( -/obj/structure/bed/chair/sofa/green/left{ +/obj/structure/bed/chair/sofa/left/green{ dir = 4 }, /turf/simulated/floor/wood, @@ -2125,7 +2125,7 @@ }, /area/gateway/honlethhighlands/town/garden) "HY" = ( -/obj/structure/bed/chair/sofa/green/right{ +/obj/structure/bed/chair/sofa/right/green{ dir = 4 }, /turf/simulated/floor/wood, @@ -2249,7 +2249,7 @@ /obj/effect/floor_decal/techfloor{ dir = 8 }, -/obj/structure/bed/chair/sofa/brown/right{ +/obj/structure/bed/chair/sofa/right/brown{ dir = 4 }, /turf/simulated/floor/tiled/techfloor, diff --git a/maps/offmap_vr/om_ships/curashuttle.dmm b/maps/offmap_vr/om_ships/curashuttle.dmm index a09407b77f..b6299d55df 100644 --- a/maps/offmap_vr/om_ships/curashuttle.dmm +++ b/maps/offmap_vr/om_ships/curashuttle.dmm @@ -813,7 +813,7 @@ /turf/simulated/floor/tiled, /area/shuttle/curabitur/curashuttle/med) "bE" = ( -/obj/structure/bed/chair/sofa/teal/left{ +/obj/structure/bed/chair/sofa/left/teal{ dir = 1 }, /obj/structure/cable{ @@ -888,7 +888,7 @@ dir = 1; pixel_y = -29 }, -/obj/structure/bed/chair/sofa/teal/right{ +/obj/structure/bed/chair/sofa/right/teal{ dir = 1 }, /obj/structure/cable{ diff --git a/maps/offmap_vr/om_ships/itglight.dmm b/maps/offmap_vr/om_ships/itglight.dmm index c422341e98..99c70134b5 100644 --- a/maps/offmap_vr/om_ships/itglight.dmm +++ b/maps/offmap_vr/om_ships/itglight.dmm @@ -1148,7 +1148,7 @@ /turf/simulated/floor/carpet/sblucarpet, /area/itglight/captain) "gS" = ( -/obj/structure/bed/chair/sofa/brown/right, +/obj/structure/bed/chair/sofa/right/brown, /obj/item/device/radio/intercom{ dir = 1; pixel_y = 25 @@ -1177,7 +1177,7 @@ /turf/simulated/floor/tiled/eris/steel/brown_platform, /area/itglight/metingroom) "gX" = ( -/obj/structure/bed/chair/sofa/brown/left, +/obj/structure/bed/chair/sofa/left/brown, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/alarm/angled/hidden{ dir = 8; @@ -6391,7 +6391,7 @@ /turf/simulated/floor/tiled/monotile, /area/itglight/lockers) "MY" = ( -/obj/structure/bed/chair/sofa/brown/right{ +/obj/structure/bed/chair/sofa/right/brown{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -6623,7 +6623,7 @@ /turf/simulated/floor/airless, /area/itglight/portsolars) "Ol" = ( -/obj/structure/bed/chair/sofa/brown/corner{ +/obj/structure/bed/chair/sofa/corner/brown{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -8501,7 +8501,7 @@ }, /area/itglight/shuttlebay) "Zs" = ( -/obj/structure/bed/chair/sofa/brown/left, +/obj/structure/bed/chair/sofa/left/brown, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, diff --git a/maps/om_adventure/pois/cabin1.dmm b/maps/om_adventure/pois/cabin1.dmm index 0adc084576..289930ef77 100644 --- a/maps/om_adventure/pois/cabin1.dmm +++ b/maps/om_adventure/pois/cabin1.dmm @@ -83,7 +83,7 @@ /turf/simulated/floor/outdoors/newdirt, /area/om_adventure/poi/cabin1) "C" = ( -/obj/structure/bed/chair/sofa/brown/corner, +/obj/structure/bed/chair/sofa/corner/brown, /turf/simulated/floor/wood, /area/om_adventure/poi/cabin1) "D" = ( @@ -116,13 +116,13 @@ /turf/simulated/wall/log, /area/om_adventure/poi/cabin1) "R" = ( -/obj/structure/bed/chair/sofa/brown/left{ +/obj/structure/bed/chair/sofa/left/brown{ dir = 8 }, /turf/simulated/floor/wood, /area/om_adventure/poi/cabin1) "S" = ( -/obj/structure/bed/chair/sofa/brown/right, +/obj/structure/bed/chair/sofa/right/brown, /turf/simulated/floor/wood, /area/om_adventure/poi/cabin1) "T" = ( diff --git a/maps/om_adventure/pois/cabin2.dmm b/maps/om_adventure/pois/cabin2.dmm index 31b9b10e2d..005b5b3a1e 100644 --- a/maps/om_adventure/pois/cabin2.dmm +++ b/maps/om_adventure/pois/cabin2.dmm @@ -53,7 +53,7 @@ /turf/simulated/floor/wood, /area/om_adventure/poi/cabin2) "t" = ( -/obj/structure/bed/chair/sofa/brown/corner, +/obj/structure/bed/chair/sofa/corner/brown, /turf/simulated/floor/carpet/bcarpet, /area/om_adventure/poi/cabin2) "u" = ( @@ -64,7 +64,7 @@ /turf/simulated/floor/tiled/techmaint, /area/om_adventure/poi/cabin2) "v" = ( -/obj/structure/bed/chair/sofa/brown/left{ +/obj/structure/bed/chair/sofa/left/brown{ dir = 8 }, /turf/simulated/floor/carpet/bcarpet, @@ -124,7 +124,7 @@ /turf/simulated/floor/wood, /area/om_adventure/poi/cabin2) "K" = ( -/obj/structure/bed/chair/sofa/brown/right{ +/obj/structure/bed/chair/sofa/right/brown{ dir = 4 }, /turf/simulated/floor/carpet/bcarpet, @@ -149,7 +149,7 @@ /turf/simulated/floor/bmarble, /area/om_adventure/poi/cabin2) "P" = ( -/obj/structure/bed/chair/sofa/brown/corner{ +/obj/structure/bed/chair/sofa/corner/brown{ dir = 1 }, /turf/simulated/floor/carpet/bcarpet, diff --git a/maps/om_adventure/pois/medicalcenter.dmm b/maps/om_adventure/pois/medicalcenter.dmm index aea560a0af..53520a5d26 100644 --- a/maps/om_adventure/pois/medicalcenter.dmm +++ b/maps/om_adventure/pois/medicalcenter.dmm @@ -43,7 +43,7 @@ /turf/simulated/floor/tiled/eris/white/orangecorner, /area/om_adventure/poi/medicalcenter) "z" = ( -/obj/structure/bed/chair/sofa/blue/left{ +/obj/structure/bed/chair/sofa/left/blue{ dir = 8 }, /turf/simulated/floor/tiled/eris/white/orangecorner, @@ -52,7 +52,7 @@ /turf/simulated/wall/eris/r_wall, /area/om_adventure/poi/medicalcenter) "C" = ( -/obj/structure/bed/chair/sofa/blue/right, +/obj/structure/bed/chair/sofa/right/blue, /turf/simulated/floor/tiled/eris/white/orangecorner, /area/om_adventure/poi/medicalcenter) "D" = ( @@ -111,7 +111,7 @@ /turf/simulated/floor/tiled/eris/white/orangecorner, /area/om_adventure/poi/medicalcenter) "Z" = ( -/obj/structure/bed/chair/sofa/blue/corner, +/obj/structure/bed/chair/sofa/corner/blue, /obj/tether_away_spawner/spookyland, /turf/simulated/floor/tiled/eris/white/orangecorner, /area/om_adventure/poi/medicalcenter) diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm index 96d7089303..b5834349cb 100644 --- a/maps/southern_cross/southern_cross-1.dmm +++ b/maps/southern_cross/southern_cross-1.dmm @@ -89784,7 +89784,7 @@ /turf/simulated/floor/wood, /area/library) "dky" = ( -/obj/structure/bed/chair/sofa/brown/right{ +/obj/structure/bed/chair/sofa/right/brown{ dir = 8 }, /turf/simulated/floor/carpet, @@ -90703,7 +90703,7 @@ /turf/simulated/floor/wood, /area/library) "dmi" = ( -/obj/structure/bed/chair/sofa/brown/left{ +/obj/structure/bed/chair/sofa/left/brown{ dir = 8 }, /turf/simulated/floor/carpet, diff --git a/maps/submaps/surface_submaps/mountains/speakeasy_vr.dmm b/maps/submaps/surface_submaps/mountains/speakeasy_vr.dmm index 6d6cc6cdbb..785dc57cc6 100644 --- a/maps/submaps/surface_submaps/mountains/speakeasy_vr.dmm +++ b/maps/submaps/surface_submaps/mountains/speakeasy_vr.dmm @@ -15,10 +15,10 @@ "u" = (/obj/structure/table/gamblingtable,/obj/machinery/light/poi{dir = 4},/turf/simulated/floor/wood,/area/submap/Speakeasy) "v" = (/obj/structure/table/fancyblack,/obj/item/clothing/mask/smokable/cigarette/cigar,/turf/simulated/floor/carpet/turcarpet,/area/submap/Speakeasy) "w" = (/turf/simulated/wall/wood,/area/submap/Speakeasy) -"x" = (/obj/structure/bed/chair/sofa/blue/left{dir = 4},/turf/simulated/floor/wood,/area/submap/Speakeasy) +"x" = (/obj/structure/bed/chair/sofa/left/blue{dir = 4},/turf/simulated/floor/wood,/area/submap/Speakeasy) "B" = (/turf/simulated/floor/wood,/area/submap/Speakeasy) "C" = (/turf/simulated/mineral/floor/cave,/area/submap/Speakeasy) -"D" = (/obj/structure/bed/chair/sofa/black/corner{dir = 4},/turf/simulated/floor/wood,/area/submap/Speakeasy) +"D" = (/obj/structure/bed/chair/sofa/corner/black{dir = 4},/turf/simulated/floor/wood,/area/submap/Speakeasy) "E" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/carpet/turcarpet,/area/submap/Speakeasy) "H" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor/wood,/area/submap/Speakeasy) "I" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/turf/simulated/floor/wood,/area/submap/Speakeasy) @@ -28,7 +28,7 @@ "N" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/submap/Speakeasy) "O" = (/obj/machinery/light/poi{dir = 1},/turf/simulated/floor/wood,/area/submap/Speakeasy) "R" = (/obj/structure/bed/chair/sofa/black{dir = 1},/turf/simulated/floor/wood,/area/submap/Speakeasy) -"U" = (/obj/structure/bed/chair/sofa/blue/right{dir = 1},/turf/simulated/floor/wood,/area/submap/Speakeasy) +"U" = (/obj/structure/bed/chair/sofa/right/blue{dir = 1},/turf/simulated/floor/wood,/area/submap/Speakeasy) "V" = (/obj/structure/table/woodentable,/obj/machinery/chemical_dispenser/bar_soft/full{dir = 1},/turf/simulated/floor/wood,/area/submap/Speakeasy) "W" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/submap/Speakeasy) "X" = (/obj/structure/table/woodentable,/obj/machinery/chemical_dispenser/bar_alc/full,/turf/simulated/floor/wood,/area/submap/Speakeasy) diff --git a/maps/submaps/surface_submaps/plains/emptycabin.dmm b/maps/submaps/surface_submaps/plains/emptycabin.dmm index 35cbfa4e1b..9627dc4b9b 100644 --- a/maps/submaps/surface_submaps/plains/emptycabin.dmm +++ b/maps/submaps/surface_submaps/plains/emptycabin.dmm @@ -35,7 +35,7 @@ /turf/simulated/floor/wood/sif/virgo3b, /area/submap/EmptyCabin) "i" = ( -/obj/structure/bed/chair/sofa/blue/left{ +/obj/structure/bed/chair/sofa/left/blue{ dir = 1 }, /turf/simulated/floor/wood/sif/virgo3b, @@ -135,7 +135,7 @@ /turf/simulated/floor/wood/sif/virgo3b, /area/submap/EmptyCabin) "J" = ( -/obj/structure/bed/chair/sofa/blue/right{ +/obj/structure/bed/chair/sofa/right/blue{ dir = 1 }, /turf/simulated/floor/wood/sif/virgo3b, diff --git a/maps/submaps/surface_submaps/plains/lonehome.dmm b/maps/submaps/surface_submaps/plains/lonehome.dmm index 49d75bc624..2b0fca5b59 100644 --- a/maps/submaps/surface_submaps/plains/lonehome.dmm +++ b/maps/submaps/surface_submaps/plains/lonehome.dmm @@ -1,4 +1,4 @@ -"at" = (/obj/structure/bed/chair/sofa/black/right{dir = 1},/turf/simulated/floor/wood,/area/submap/lonehome) +"at" = (/obj/structure/bed/chair/sofa/right/black{dir = 1},/turf/simulated/floor/wood,/area/submap/lonehome) "au" = (/obj/item/organ/internal/lungs/vox,/obj/item/weapon/beartrap/hunting{anchored = 1; deployed = 1},/obj/structure/curtain/black,/obj/random/junk,/obj/random/junk,/obj/random/junk,/turf/simulated/floor,/area/submap/lonehome) "aw" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/lonehome) "aI" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/flora/pottedplant/fern{pixel_y = 12},/obj/structure/table/bench/wooden,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/lonehome) @@ -46,7 +46,7 @@ "nT" = (/obj/item/stack/cable_coil,/turf/simulated/floor/wood/broken,/area/submap/lonehome) "ox" = (/obj/structure/closet/cabinet,/obj/item/weapon/storage/wallet/random,/obj/item/weapon/towel/random,/obj/item/weapon/melee/umbrella/random,/obj/random/ammo,/obj/random/cigarettes,/obj/random/contraband,/obj/random/junk,/obj/random/maintenance/security,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/floor/wood,/area/submap/lonehome) "oS" = (/obj/structure/closet/cabinet,/obj/random/tech_supply/component,/obj/random/tech_supply/component,/obj/random/tech_supply/component,/obj/random/tech_supply/component,/obj/random/tech_supply/component,/obj/random/toolbox,/obj/random/toolbox,/turf/simulated/floor/wood,/area/submap/lonehome) -"oZ" = (/obj/structure/bed/chair/sofa/black/left,/turf/simulated/floor/wood,/area/submap/lonehome) +"oZ" = (/obj/structure/bed/chair/sofa/left/black,/turf/simulated/floor/wood,/area/submap/lonehome) "pb" = (/obj/structure/fence/cut/large{dir = 8},/turf/template_noop,/area/submap/lonehome) "po" = (/obj/structure/sign/periodic,/turf/simulated/wall/wood,/area/submap/lonehome) "pX" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood/broken,/area/submap/lonehome) @@ -78,7 +78,7 @@ "xM" = (/obj/structure/fence/cut/large{dir = 8},/turf/simulated/floor/outdoors/grass/heavy,/area/submap/lonehome) "xO" = (/obj/item/clothing/suit/straight_jacket,/turf/simulated/floor,/area/submap/lonehome) "yh" = (/turf/simulated/floor/outdoors/dirt,/area/submap/lonehome) -"yn" = (/obj/structure/window/reinforced/polarized{dir = 8; id = "h_living"},/obj/structure/bed/chair/sofa/black/corner{dir = 1},/turf/simulated/floor/wood,/area/submap/lonehome) +"yn" = (/obj/structure/window/reinforced/polarized{dir = 8; id = "h_living"},/obj/structure/bed/chair/sofa/corner/black{dir = 1},/turf/simulated/floor/wood,/area/submap/lonehome) "yr" = (/obj/item/weapon/reagent_containers/blood,/obj/item/weapon/pack/cardemon,/obj/item/weapon/pack/cardemon,/obj/item/weapon/deck/tarot,/obj/structure/table/wooden_reinforced,/turf/simulated/floor/wood,/area/submap/lonehome) "yt" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/sblucarpet,/area/submap/lonehome) "yF" = (/obj/structure/bed/chair/sofa/black{dir = 1},/turf/simulated/floor/wood,/area/submap/lonehome) @@ -147,7 +147,7 @@ "Wf" = (/obj/structure/bed/padded,/obj/random/trash,/obj/random/trash,/obj/random/trash,/obj/random/trash,/obj/random/trash,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/item/weapon/bedsheet/ian,/turf/simulated/floor/wood,/area/submap/lonehome) "Wj" = (/obj/machinery/gibber/autogibber{emagged = 1},/turf/simulated/floor,/area/submap/lonehome) "Wn" = (/obj/structure/fence/cut/medium{dir = 4},/turf/template_noop,/area/submap/lonehome) -"WQ" = (/obj/structure/window/reinforced/polarized{dir = 8; id = "h_living"},/obj/structure/bed/chair/sofa/black/corner{dir = 4},/turf/simulated/floor/wood,/area/submap/lonehome) +"WQ" = (/obj/structure/window/reinforced/polarized{dir = 8; id = "h_living"},/obj/structure/bed/chair/sofa/corner/black{dir = 4},/turf/simulated/floor/wood,/area/submap/lonehome) "Xc" = (/obj/item/weapon/module/power_control,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/lonehome) "Xz" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/lonehome) "Ys" = (/obj/item/weapon/pen/fountain,/turf/simulated/floor/wood,/area/submap/lonehome) diff --git a/maps/submaps/surface_submaps/plains/lonehome_vr.dmm b/maps/submaps/surface_submaps/plains/lonehome_vr.dmm index 117d531273..776d5a25a2 100644 --- a/maps/submaps/surface_submaps/plains/lonehome_vr.dmm +++ b/maps/submaps/surface_submaps/plains/lonehome_vr.dmm @@ -187,7 +187,7 @@ dir = 8; id = "h_living" }, -/obj/structure/bed/chair/sofa/black/corner{ +/obj/structure/bed/chair/sofa/corner/black{ dir = 1 }, /turf/simulated/floor/wood/virgo3b, @@ -197,7 +197,7 @@ /turf/simulated/floor/wood/virgo3b, /area/submap/lonehome) "aE" = ( -/obj/structure/bed/chair/sofa/black/left, +/obj/structure/bed/chair/sofa/left/black, /turf/simulated/floor/wood/virgo3b, /area/submap/lonehome) "aF" = ( @@ -371,7 +371,7 @@ dir = 8; id = "h_living" }, -/obj/structure/bed/chair/sofa/black/corner{ +/obj/structure/bed/chair/sofa/corner/black{ dir = 4 }, /turf/simulated/floor/wood/virgo3b, @@ -383,7 +383,7 @@ /turf/simulated/floor/wood/virgo3b, /area/submap/lonehome) "bi" = ( -/obj/structure/bed/chair/sofa/black/right{ +/obj/structure/bed/chair/sofa/right/black{ dir = 1 }, /turf/simulated/floor/wood/virgo3b, diff --git a/maps/submaps/surface_submaps/plains/oldhotel.dmm b/maps/submaps/surface_submaps/plains/oldhotel.dmm index febe52a0ce..92e7accd62 100644 --- a/maps/submaps/surface_submaps/plains/oldhotel.dmm +++ b/maps/submaps/surface_submaps/plains/oldhotel.dmm @@ -36,7 +36,7 @@ /turf/simulated/floor/carpet/sblucarpet/virgo3b, /area/submap/oldhotel) "da" = ( -/obj/structure/bed/chair/sofa/teal/right, +/obj/structure/bed/chair/sofa/right/teal, /turf/simulated/floor/carpet/sblucarpet/virgo3b, /area/submap/oldhotel) "dn" = ( @@ -94,7 +94,7 @@ /turf/simulated/wall/wood, /area/submap/oldhotel) "if" = ( -/obj/structure/bed/chair/sofa/teal/left{ +/obj/structure/bed/chair/sofa/left/teal{ dir = 8 }, /turf/simulated/floor/carpet/sblucarpet/virgo3b, @@ -275,7 +275,7 @@ /turf/simulated/floor/wood/virgo3b, /area/submap/oldhotel) "vh" = ( -/obj/structure/bed/chair/sofa/teal/corner, +/obj/structure/bed/chair/sofa/corner/teal, /turf/simulated/floor/carpet/sblucarpet/virgo3b, /area/submap/oldhotel) "vA" = ( diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm index f658a6da07..a92c25c064 100644 --- a/maps/tether/tether-01-surface1.dmm +++ b/maps/tether/tether-01-surface1.dmm @@ -19614,7 +19614,7 @@ /turf/simulated/floor/tiled, /area/rnd/hallway) "aGr" = ( -/obj/structure/bed/chair/sofa/brown/right, +/obj/structure/bed/chair/sofa/right/brown, /obj/effect/floor_decal/borderfloor{ dir = 1 }, @@ -19630,7 +19630,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/cargostore/office) "aGs" = ( -/obj/structure/bed/chair/sofa/brown/corner, +/obj/structure/bed/chair/sofa/corner/brown, /obj/effect/landmark/start{ name = "Cargo Technician" }, @@ -19951,7 +19951,7 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/cargostore/office) "aGU" = ( -/obj/structure/bed/chair/sofa/brown/left{ +/obj/structure/bed/chair/sofa/left/brown{ dir = 8 }, /obj/effect/floor_decal/borderfloor{