From 069f6875fb7af15c1181ece2c44ffade2513bf45 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Thu, 3 Oct 2024 20:36:59 -0400 Subject: [PATCH 01/31] Description, vars --- code/modules/station_goals/bluespace_tap.dm | 22 ++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index d4c3a9509013..d98a3d36cfd5 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -8,9 +8,9 @@ Another research station has developed a device called a Bluespace Harvester. It reaches through bluespace into other dimensions to shift through them for interesting objects.
Due to unforseen circumstances the large-scale test of the prototype could not be completed on the original research station. It will instead be carried out on your station. - Acquire the circuit board, construct the device over a wire knot and feed it enough power to generate [goal] mining points by shift end. + Acquire the circuit board, construct the device over a wire knot and feed it enough power to strike a motherlode of objects, located [goal] points deep.

- Be advised that the device is experimental and might act in slightly unforseen ways if sufficiently powered. + Be advised that the device is experimental and might act in slightly unforseen ways if sufficiently powered. It may also require maintenance irregularly.
Nanotrasen Science Directorate"} @@ -222,6 +222,16 @@ var/points = 0 /// The total points earned by this machine so far, for tracking station goal and highscore var/total_points = 0 + /// The point interval where the machine will automatically spawn a clothing item + var/clothing_interval = 5000 + /// The point interval where the machine will automatically spawn a food item + var/food_interval = 6000 + /// The point interval where the machine will automatically spawn a cultural item + var/cultural_interval = 10000 + /// The point interval where the machine will automatically spawn an organic item + var/organic_interval = 15000 + /// The point interval where the machine will strike a motherlode + var/motherlode_interval = 45000 /// How much power the machine needs per processing tick at the current level. var/actual_power_usage = 0 @@ -243,8 +253,14 @@ var/stabilizer_power = 0 /// Amount of overhead in levels. Each level of overhead allows stabilizing 15+overhead. var/overhead = 0 - /// When event triggers this will hold references to all portals so we can fix the sprite after they're broken + /// When portal event triggers this will hold references to all portals so we can fix the sprite after they're broken var/list/active_nether_portals = list() + /// When a filth event triggers, this will stop the operation until it is cleaned + var/dirty = FALSE + /// When a chemical event triggers, this will stop operation until the chemical is fed to the machine + var/chemical_block = FALSE + /// When a chemical event triggers, this will contain the needed chemical to start progress again + var/chemical_needed = "Water" /obj/machinery/power/bluespace_tap/Initialize(mapload) . = ..() From 052bda63c8c69705eca17c0216f5c552915e69e9 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sun, 3 Nov 2024 17:34:13 -0500 Subject: [PATCH 02/31] Lootpools and item spawning --- .../objects/items/weapons/storage/belt.dm | 8 + code/modules/station_goals/bluespace_tap.dm | 190 ++++-------- .../station_goals/bluespace_tap_lootpools.dm | 281 ++++++++++++++++++ paradise.dme | 1 + 4 files changed, 347 insertions(+), 133 deletions(-) create mode 100644 code/modules/station_goals/bluespace_tap_lootpools.dm diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index bfb2ad7f8690..3911886d3dd6 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -135,6 +135,14 @@ new /obj/item/extinguisher/mini(src) update_icon() +/obj/item/storage/belt/utility/brass/populate_contents() + new /obj/item/wrench/brass(src) + new /obj/item/crowbar/brass(src) + new /obj/item/screwdriver/brass(src) + new /obj/item/weldingtool/experimental/brass(src) + new /obj/item/wirecutters/brass(src) + update_icon() + /obj/item/storage/belt/utility/chief name = "advanced toolbelt" desc = "Holds tools, looks snazzy, and fits nicely into a bag" diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 424f747e32f2..9ce8d05f6c78 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -32,13 +32,16 @@ //needed for the vending part of it /datum/data/bluespace_tap_product var/product_name = "generic" - var/product_path = null + var/product_path_common = null + var/product_path_uncommon = null + var/product_path_rare = null var/product_cost = 100 //cost in mining points to generate - -/datum/data/bluespace_tap_product/New(name, path, cost) +/datum/data/bluespace_tap_product/New(name, path_common, path_uncommon, path_rare, cost) product_name = name - product_path = path + product_path_common = path_common + product_path_uncommon = path_uncommon + product_path_rare = path_rare product_cost = cost /obj/item/circuitboard/machine/bluespace_tap @@ -50,135 +53,12 @@ /obj/item/stock_parts/capacitor/quadratic = 5,//Probably okay, right? /obj/item/stack/ore/bluespace_crystal = 5) -/obj/effect/spawner/lootdrop/bluespace_tap - name = "bluespace harvester reward spawner" - lootcount = 1 - -/obj/effect/spawner/lootdrop/bluespace_tap/hat - name = "exotic hat" - loot = list( - /obj/item/clothing/head/collectable/chef, //same weighing on all of them - /obj/item/clothing/head/collectable/paper, - /obj/item/clothing/head/collectable/tophat, - /obj/item/clothing/head/collectable/captain, - /obj/item/clothing/head/collectable/beret, - /obj/item/clothing/head/collectable/welding, - /obj/item/clothing/head/collectable/flatcap, - /obj/item/clothing/head/collectable/pirate, - /obj/item/clothing/head/collectable/kitty, - /obj/item/clothing/head/crown/fancy, - /obj/item/clothing/head/collectable/rabbitears, - /obj/item/clothing/head/collectable/wizard, - /obj/item/clothing/head/collectable/hardhat, - /obj/item/clothing/head/collectable/HoS, - /obj/item/clothing/head/collectable/thunderdome, - /obj/item/clothing/head/collectable/swat, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/police, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/xenom, - /obj/item/clothing/head/collectable/petehat - ) - - -/obj/effect/spawner/lootdrop/bluespace_tap/cultural - name = "cultural artifacts" - loot = list( - /obj/vehicle/space/speedbike/red = 10, - /obj/item/grenade/clusterbuster/honk = 10, - /obj/item/toy/katana = 10, - /obj/item/stack/tile/brass/fifty = 20, - /obj/item/stack/sheet/mineral/abductor/fifty = 20, - /obj/item/sord = 20, - /obj/item/toy/syndicateballoon = 15, - /obj/item/lighter/zippo/gonzofist = 5, - /obj/item/lighter/zippo/engraved = 5, - /obj/item/lighter/zippo/nt_rep = 5, - /obj/item/gun/projectile/automatic/c20r/toy = 1, - /obj/item/gun/projectile/automatic/l6_saw/toy = 1, - /obj/item/gun/projectile/automatic/toy/pistol = 2, - /obj/item/gun/projectile/automatic/toy/pistol/enforcer = 1, - /obj/item/gun/projectile/shotgun/toy = 1, - /obj/item/gun/projectile/shotgun/toy/crossbow = 1, - /obj/item/gun/projectile/shotgun/toy/tommygun = 1, - /obj/item/gun/projectile/automatic/sniper_rifle/toy = 1, - /obj/item/dualsaber/toy = 5, - /obj/machinery/snow_machine = 10, - /obj/item/clothing/head/kitty = 5, - /obj/item/coin/antagtoken = 5, - /obj/item/toy/prizeball/figure = 15, - /obj/item/toy/prizeball/therapy = 10, - /obj/item/bedsheet/patriot = 2, - /obj/item/bedsheet/rainbow = 2, - /obj/item/bedsheet/captain = 2, - /obj/item/bedsheet/centcom = 1, //mythic rare rarity - /obj/item/bedsheet/syndie = 2, - /obj/item/bedsheet/cult = 2, - /obj/item/bedsheet/wiz = 2, - /obj/item/stack/sheet/mineral/tranquillite/fifty = 3, - /obj/item/clothing/gloves/combat = 5, - /obj/item/blank_tarot_card = 5, - /obj/item/tarot_card_pack = 5, - /obj/item/tarot_card_pack/jumbo = 3, - /obj/item/tarot_card_pack/mega = 2 - ) - -/obj/effect/spawner/lootdrop/bluespace_tap/organic - name = "organic objects" - loot = list( - /obj/item/seeds/random/labelled = 50, - /obj/item/guardiancreator/biological = 5, - /obj/item/organ/internal/vocal_cords/adamantine = 15, - /obj/item/storage/pill_bottle/random_meds/labelled = 25, - /obj/item/reagent_containers/glass/bottle/reagent/omnizine = 15, - /obj/item/dnainjector/telemut = 5, - /obj/item/dnainjector/small_size = 5, - /obj/item/dnainjector/morph = 5, - /obj/item/dnainjector/regenerate = 5, - /mob/living/simple_animal/pet/dog/corgi/ = 5, - /mob/living/simple_animal/pet/cat = 5, - /mob/living/simple_animal/pet/dog/fox/ = 5, - /mob/living/simple_animal/pet/penguin/baby = 5, - /mob/living/simple_animal/pig = 5, - /obj/item/slimepotion/sentience = 5, - /obj/item/clothing/mask/cigarette/cigar/havana = 3, - /obj/item/stack/sheet/mineral/bananium/fifty = 2, //bananas are organic, clearly. - /obj/item/storage/box/monkeycubes = 5, - /obj/item/stack/tile/carpet/twenty = 10, - /obj/item/stack/tile/carpet/black/twenty = 10, - /obj/item/soap/deluxe = 5 - ) - -/obj/effect/spawner/lootdrop/bluespace_tap/food - name = "fancy food" - lootcount = 3 - loot = list( - /obj/item/food/wingfangchu, - /obj/item/food/hotdog, - /obj/item/food/sliceable/turkey, - /obj/item/food/plumphelmetbiscuit, - /obj/item/food/appletart, - /obj/item/food/sliceable/cheesecake, - /obj/item/food/sliceable/bananacake, - /obj/item/food/sliceable/chocolatecake, - /obj/item/food/soup/meatballsoup, - /obj/item/food/soup/mysterysoup, - /obj/item/food/soup/stew, - /obj/item/food/soup/hotchili, - /obj/item/food/burrito, - /obj/item/food/fishburger, - /obj/item/food/cubancarp, - /obj/item/food/fishandchips, - /obj/item/food/meatpie, - /obj/item/pizzabox/hawaiian, //it ONLY gives hawaiian. MUHAHAHA - /obj/item/food/sliceable/xenomeatbread //maybe add some dangerous/special food here, ie robobuger? - ) - /// Points generated per cycle for each Watt of power consumption #define POINTS_PER_W 4e-6 /// Amount of points generated per cycle per 50KW for the first 500KW #define BASE_POINTS 2 + /** * # Bluespace Harvester * @@ -203,10 +83,26 @@ /// list of possible products var/static/product_list = list( - new /datum/data/bluespace_tap_product("Unknown Exotic Hat", /obj/effect/spawner/lootdrop/bluespace_tap/hat, 5000), - new /datum/data/bluespace_tap_product("Unknown Snack", /obj/effect/spawner/lootdrop/bluespace_tap/food, 6000), - new /datum/data/bluespace_tap_product("Unknown Cultural Artifact", /obj/effect/spawner/lootdrop/bluespace_tap/cultural, 15000), - new /datum/data/bluespace_tap_product("Unknown Biological Artifact", /obj/effect/spawner/lootdrop/bluespace_tap/organic, 20000) + new /datum/data/bluespace_tap_product("Unknown Exotic Clothing", + /obj/effect/spawner/lootdrop/bluespace_tap/clothes_common, + /obj/effect/spawner/lootdrop/bluespace_tap/clothes_uncommon, + /obj/effect/spawner/lootdrop/bluespace_tap/clothes_rare, + 5000), + new /datum/data/bluespace_tap_product("Unknown Food", + /obj/effect/spawner/lootdrop/bluespace_tap/food_common, + /obj/effect/spawner/lootdrop/bluespace_tap/food_uncommon, + /obj/effect/spawner/lootdrop/bluespace_tap/food_rare, + 6000), + new /datum/data/bluespace_tap_product("Unknown Cultural Artifact", + /obj/effect/spawner/lootdrop/bluespace_tap/cultural_common, + /obj/effect/spawner/lootdrop/bluespace_tap/cultural_uncommon, + /obj/effect/spawner/lootdrop/bluespace_tap/cultural_rare, + 15000), + new /datum/data/bluespace_tap_product("Unknown Biological Artifact", + /obj/effect/spawner/lootdrop/bluespace_tap/organic_common, + /obj/effect/spawner/lootdrop/bluespace_tap/organic_uncommon, + /obj/effect/spawner/lootdrop/bluespace_tap/organic_rare, + 20000) ) /// The amount of power being used for mining at the moment (Watts) @@ -488,7 +384,35 @@ A.product_cost = round(1.2 * A.product_cost, 1) playsound(src, 'sound/magic/blink.ogg', 50) do_sparks(2, FALSE, src) - new A.product_path(get_turf(src)) + var/selected_rarity = pick(1, 10) + var/selected_path = null + if(selected_rarity < 7) + selected_path = A.product_path_common + if(selected_rarity < 10 && selected_rarity > 6) + selected_path = A.product_path_uncommon + if(selected_rarity > 9) + selected_path = A.product_path_rare + spawn_item(selected_path, get_turf(src)) + if(pick(1, 4) == 4) + // Spawn second item in random spot on station - places it where NADs can respawn + var/random_turf = null + var/list/possible_spawns = GLOB.nukedisc_respawn + while(length(possible_spawns)) + var/turf/current_spawn = pick_n_take(possible_spawns) + if(!current_spawn.density) + spawn_item(selected_path, current_spawn) + return + // Someone built a wall over it, check the surroundings + var/list/open_turfs = current_spawn.AdjacentTurfs(open_only = TRUE) + if(length(open_turfs)) + spawn_item(selected_path, pick(open_turfs)) + return + +/obj/machinery/power/bluespace_tap/proc/spawn_item(product_path, turf) + var/obj/effect/portal/tap_portal = new /obj/effect/portal(turf, null, src, 10) + tap_portal.name = "Bluespace Harvester Portal" + playsound(src, 'sound/magic/blink.ogg', 50) + new product_path(turf) flick_overlay_view(image(icon, src, "flash", FLY_LAYER)) //UI stuff below diff --git a/code/modules/station_goals/bluespace_tap_lootpools.dm b/code/modules/station_goals/bluespace_tap_lootpools.dm new file mode 100644 index 000000000000..02417357c151 --- /dev/null +++ b/code/modules/station_goals/bluespace_tap_lootpools.dm @@ -0,0 +1,281 @@ +/obj/effect/spawner/lootdrop/bluespace_tap + name = "bluespace harvester reward spawner" + lootcount = 1 + +/obj/effect/spawner/lootdrop/bluespace_tap/clothes_common + name = "exotic common clothing" + loot = list( + /obj/item/clothing/head/collectable/chef, + /obj/item/clothing/head/collectable/paper, + /obj/item/clothing/head/collectable/tophat, + /obj/item/clothing/head/collectable/captain, + /obj/item/clothing/head/collectable/beret, + /obj/item/clothing/head/collectable/welding, + /obj/item/clothing/head/collectable/flatcap, + /obj/item/clothing/head/collectable/pirate, + /obj/item/clothing/head/crown/fancy, + /obj/item/clothing/head/collectable/wizard, + /obj/item/clothing/head/collectable/hardhat, + /obj/item/clothing/head/collectable/HoS, + /obj/item/clothing/head/collectable/thunderdome, + /obj/item/clothing/head/collectable/swat, + /obj/item/clothing/head/collectable/slime, + /obj/item/clothing/head/collectable/police, + /obj/item/clothing/head/collectable/slime, + /obj/item/clothing/head/collectable/xenom, + /obj/item/clothing/head/collectable/petehat, + /obj/item/clothing/under/retro/medical, + /obj/item/clothing/under/retro/engineering, + /obj/item/clothing/under/retro/science, + /obj/item/clothing/under/retro/security, + /obj/item/clothing/under/costume/captain_fly, + /obj/item/clothing/under/costume/mankini, + /obj/item/clothing/under/costume/janimaid, + /obj/item/clothing/under/costume/psyjump + ) + +/obj/effect/spawner/lootdrop/bluespace_tap/clothes_uncommon + name = "exotic uncommon clothing" + loot = list( + /obj/item/clothing/head/collectable/kitty, + /obj/item/clothing/head/collectable/rabbitears, + /obj/item/clothing/suit/armor/vest, + /obj/item/clothing/suit/armor/vest/bloody, + /obj/item/clothing/suit/armor/riot, + /obj/item/clothing/suit/armor/riot/knight, + /obj/item/clothing/suit/armor/vest/durathread, + /obj/item/clothing/suit/armor/bulletproof, + /obj/item/clothing/suit/storage/iaa/blackjacket/armored, + /obj/item/clothing/suit/hooded/goliath, + /obj/item/clothing/suit/armor/bone, + /obj/item/clothing/under/chameleon, + /obj/item/clothing/glasses/chameleon, + /obj/item/clothing/gloves/chameleon, + /obj/item/clothing/head/chameleon, + /obj/item/clothing/mask/chameleon, + /obj/item/clothing/mask/chameleon/voice_change, + /obj/item/clothing/shoes/chameleon, + /obj/item/clothing/shoes/chameleon/noslip, + /obj/item/storage/belt/chameleon, + /obj/item/clothing/head/helmet, + /obj/item/clothing/head/helmet/riot, + /obj/item/clothing/head/helmet/riot/knight, + /obj/item/clothing/head/helmet/alt + ) + + +/obj/effect/spawner/lootdrop/bluespace_tap/clothes_rare + name = "exotic rare clothing" + loot = list( + /obj/item/clothing/suit/armor/swat, + /obj/item/clothing/suit/armor/laserproof, + /obj/item/clothing/suit/hooded/drake, + /obj/item/clothing/glasses/chameleon/night, + /obj/item/clothing/head/helmet/meson, + /obj/item/clothing/head/helmet/justice, + /obj/item/clothing/head/helmet/swat, + /obj/item/mod/control/pre_equipped/standard, + /obj/item/mod/control/pre_equipped/engineering, + /obj/item/mod/control/pre_equipped/atmospheric, + /obj/item/mod/control/pre_equipped/loader, + /obj/item/mod/control/pre_equipped/mining, + /obj/item/mod/control/pre_equipped/rescue, + /obj/item/mod/control/pre_equipped/security, + /obj/item/mod/control/pre_equipped/cosmohonk + ) + + +/obj/effect/spawner/lootdrop/bluespace_tap/cultural_common + name = "common cultural artifacts" + loot = list( + /obj/item/grenade/clusterbuster/honk, + /obj/item/stack/sheet/mineral/abductor/fifty , + /obj/item/toy/syndicateballoon, + /obj/item/lighter/zippo/gonzofist, + /obj/item/lighter/zippo/engraved, + /obj/item/gun/projectile/automatic/toy/pistol, + /obj/item/gun/projectile/shotgun/toy, + /obj/item/gun/projectile/shotgun/toy/crossbow, + /obj/item/gun/projectile/shotgun/toy/tommygun, + /obj/machinery/snow_machine, + /obj/item/clothing/head/kitty, + /obj/item/coin/antagtoken, + /obj/item/bedsheet/patriot, + /obj/item/bedsheet/rainbow, + /obj/item/bedsheet/captain, + /obj/item/bikehorn/golden, + /obj/item/salvage/ruin/brick, + /obj/item/toy/sword, + /obj/item/toy/windup_toolbox, + /obj/item/toy/foamblade, + /obj/item/toy/redbutton, + /obj/item/toy/figure/crew/ce, + /obj/item/toy/figure/crew/syndie + ) + +/obj/effect/spawner/lootdrop/bluespace_tap/cultural_uncommon + name = "uncommon cultural artifacts" + loot = list( + /obj/item/gun/projectile/automatic/c20r/toy, + /obj/item/dualsaber/toy, + /obj/item/gun/projectile/automatic/toy/pistol/enforcer, + /obj/item/bedsheet/syndie, + /obj/item/bedsheet/wiz, + /obj/item/stack/sheet/mineral/tranquillite/fifty, + /obj/item/clothing/gloves/combat, + /obj/item/blank_tarot_card, + /obj/item/tarot_card_pack, + /obj/item/storage/box/syndie_kit/space, + /obj/item/wrench/brass, + /obj/item/crowbar/brass, + /obj/item/screwdriver/brass, + /obj/item/weldingtool/experimental/brass, + /obj/item/wirecutters/brass + ) + +/obj/effect/spawner/lootdrop/bluespace_tap/cultural_rare + name = "rare cultural artifacts" + loot = list( + /obj/vehicle/space/speedbike/red, + /obj/item/gun/projectile/automatic/l6_saw/toy, + /obj/item/gun/projectile/automatic/sniper_rifle/toy, + /obj/item/bedsheet/centcom, + /obj/item/tarot_card_pack/jumbo, + /obj/item/tarot_card_pack/mega, + /obj/item/clothing/mask/holo_cigar, + /obj/item/melee/baseball_bat/homerun, + /obj/item/mod/module/dispenser, + /obj/item/storage/box/enforcer_rubber, + /obj/item/storage/belt/utility/brass + ) + +/obj/effect/spawner/lootdrop/bluespace_tap/organic_common + name = "common organic objects" + loot = list( + /obj/item/soap/syndie, + /obj/item/dnainjector/telemut, + /obj/item/dnainjector/small_size, + /obj/item/dnainjector/morph, + /obj/item/dnainjector/regenerate, + /obj/item/dnainjector/firemut, + /obj/item/dnainjector/nobreath, + /obj/item/dnainjector/remoteview, + /obj/item/dnainjector/insulation, + /obj/item/dnainjector/eatmut, + /obj/item/dnainjector/noprints, + /obj/item/dnainjector/comic, + /obj/item/seeds/random/labelled, + /obj/item/organ/internal/regenerative_core + ) + +/obj/effect/spawner/lootdrop/bluespace_tap/organic_uncommon + name = "uncommon organic objects" + loot = list( + /obj/item/storage/pill_bottle/random_meds/labelled, + /obj/item/dnainjector/hulkmut, + /obj/item/organ/internal/alien/plasmavessel, + /obj/item/organ/internal/alien/acidgland, + /obj/item/organ/internal/alien/hivenode, + /obj/item/organ/internal/alien/neurotoxin, + /obj/item/organ/internal/alien/resinspinner, + /obj/item/organ/internal/alien/eggsac, + /obj/item/organ/internal/heart/gland/heals, + /obj/item/organ/internal/heart/gland/ventcrawling, + /obj/item/organ/internal/heart/gland/egg + ) + +/obj/effect/spawner/lootdrop/bluespace_tap/organic_rare + name = "rare organic objects" + loot = list( + /obj/item/guardiancreator/biological, + /obj/item/organ/internal/vocal_cords/adamantine, + /obj/item/food/grown/shell/gatfruit, + /obj/item/food/grown/cherry_bomb + ) + +/obj/effect/spawner/lootdrop/bluespace_tap/food_common + name = "common fancy food" + lootcount = 1 + loot = list( + /obj/item/food/wingfangchu, + /obj/item/food/hotdog, + /obj/item/food/cookie + /obj/item/food/plumphelmetbiscuit, + /obj/item/food/appletart, + /obj/item/food/soup/meatballsoup, + /obj/item/food/soup/mysterysoup, + /obj/item/food/soup/stew, + /obj/item/food/soup/hotchili, + /obj/item/food/burrito, + /obj/item/food/fishburger, + /obj/item/food/cubancarp, + /obj/item/food/fishandchips, + /obj/item/food/meatpie, + /obj/item/pizzabox/hawaiian, + /obj/item/food/fortunecookie, + /obj/item/food/sugarcookie, + /obj/item/food/pie, + /obj/item/food/donut/sprinkles, + /obj/item/food/chinese/rice, + /obj/item/food/pancake, + /obj/item/food/chawanmushi, + /obj/item/food/syntikebab, + /obj/item/food/salad/citrusdelight, + /obj/item/food/donkpocket, + /obj/item/food/onionrings, + /obj/item/food/tatortot, + /obj/item/food/stuffing, + /obj/item/food/waffles + ) + +/obj/effect/spawner/lootdrop/bluespace_tap/food_uncommon + name = "uncommon fancy food" + lootcount = 1 + loot = list( + /obj/item/food/sliceable/cheesecake, + /obj/item/food/sliceable/bananacake, + /obj/item/food/sliceable/chocolatecake, + /obj/item/food/sliceable/turkey, + /obj/item/food/sliceable/xenomeatbread, + /obj/item/food/amanita_pie, + /obj/item/food/xemeatpie, + /obj/item/food/sliceable/pumpkinpie, + /obj/item/food/donut/chaos, + /obj/item/food/syndidonkpocket, + /obj/item/pizzabox/meat, + /obj/item/pizzabox/pepperoni, + /obj/item/pizzabox/firecracker, + /obj/item/pizzabox/garlic, + /obj/item/food/burger/xeno, + /obj/item/food/burger/spell, + /obj/item/food/burger/superbite, + /obj/item/food/burger/crazy, + /obj/item/food/burger/ppatty/white, + /obj/item/food/burger/ppatty/red, + /obj/item/food/burger/ppatty/orange, + /obj/item/food/burger/ppatty/yellow, + /obj/item/food/burger/ppatty/green, + /obj/item/food/burger/ppatty/blue, + /obj/item/food/burger/ppatty/purple, + /obj/item/food/baguette, + /obj/item/food/rofflewaffles + ) + +/obj/effect/spawner/lootdrop/bluespace_tap/food_rare + name = "rare fancy food" + lootcount = 1 + loot = list( + /obj/item/food/monkeysdelight, + /obj/item/food/dionaroast, + /obj/item/food/boiledslimecore, + /obj/item/food/burger/brain, + /obj/item/food/liquidfood, + /obj/item/food/burger/ghost, + /obj/item/food/burger/hamborger, + /obj/item/food/burger/ppatty/rainbow, + /obj/item/food/burger/elec, + /obj/item/food/notasandwich, + /obj/item/food/peanut_butter_jelly, + /obj/item/food/soylentviridians, + /obj/item/food/baguette/combat + ) diff --git a/paradise.dme b/paradise.dme index 9039bff0f310..1a00fd55e21e 100644 --- a/paradise.dme +++ b/paradise.dme @@ -2803,6 +2803,7 @@ #include "code\modules\space_management\space_transition.dm" #include "code\modules\space_management\zlevel_manager.dm" #include "code\modules\station_goals\bluespace_tap.dm" +#include "code\modules\station_goals\bluespace_tap_lootpools.dm" #include "code\modules\station_goals\bsa.dm" #include "code\modules\station_goals\dna_vault.dm" #include "code\modules\station_goals\shield.dm" From 3f8fa7709bdf198776241da258df4c87b384363f Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Fri, 8 Nov 2024 03:27:09 -0500 Subject: [PATCH 03/31] Automatic spawning, Motherlode --- code/modules/station_goals/bluespace_tap.dm | 141 +++++++++++++----- .../station_goals/bluespace_tap_lootpools.dm | 2 +- 2 files changed, 107 insertions(+), 36 deletions(-) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 9ce8d05f6c78..4f7e66845bf1 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -151,6 +151,8 @@ var/chemical_block = FALSE /// When a chemical event triggers, this will contain the needed chemical to start progress again var/chemical_needed = "Water" + /// Internal radio to handle announcements over engineering + var/obj/item/radio/radio /obj/machinery/power/bluespace_tap/Initialize(mapload) . = ..() @@ -167,6 +169,14 @@ list(1, MACH_CENTER, 1), list(1, 0, 1), )) + radio = new(src) + radio.listening = FALSE + radio.follow_target = src + radio.config(list("Engineering" = 0)) + +/obj/machinery/power/bluespace_tap/cleaning_act(mob/user, atom/cleaner, cleanspeed, text_verb, text_description, text_targetname) + . = ..() + dirty = FALSE /obj/machinery/power/bluespace_tap/update_icon_state() . = ..() @@ -293,10 +303,44 @@ consume_direct_power(mining_power + stabilizer_power) // 2 points per 50 KW up to 20 and 4 points per MW (or 5 when emmaged). - mined_points = min(BASE_POINTS * (mining_power / (50 KW)) , 20) + mining_power * (POINTS_PER_W + emagged / (1 MW)) - points += mined_points - total_points += mined_points - update_icon() + // A dirty machine does not produce points + if(!dirty) + mined_points = min(BASE_POINTS * (mining_power / (50 KW)) , 20) + mining_power * (POINTS_PER_W + emagged / (1 MW)) + points += mined_points + total_points += mined_points + update_icon() + // Machine gets dirty. Always remains at 2% regardless of power draw. + if(prob(0.02)) + radio.autosay("Bluespace harvester malfunction detected: filth contaminants have jammed [src]'s bluespace receiver!", name, "Engineering") + dirty = TRUE + + // Handle automatic spawning of loot. Extra loot spawns in maints if stabilizers are off to incentivise risk taking + if(total_points > clothing_interval) + produce(product_list[1], FALSE, !stabilizers) + radio.autosay("Bluespace harvester progress detected: [src] has produced some clothes!", name, "Engineering") + clothing_interval += 5000 + + if(total_points > food_interval) + produce(product_list[2], FALSE, !stabilizers) + radio.autosay("Bluespace harvester progress detected: [src] has produced some food!", name, "Engineering") + food_interval += 6000 + + if(total_points > cultural_interval) + produce(product_list[3], FALSE, !stabilizers) + radio.autosay("Bluespace harvester progress detected: [src] has produced something with culture!", name, "Engineering") + cultural_interval += 10000 + + if(total_points > organic_interval) + produce(product_list[4], FALSE, !stabilizers) + radio.autosay("Bluespace harvester progress detected: [src] has produced something organic!", name, "Engineering") + organic_interval += 15000 + + if(total_points > motherlode_interval) + produce_motherlode() + motherlode_interval += 45000 + + + /* * Portal chance is 0.1% per cycle per difference of 1MW between the stabilizer and mining power * This should translate to portals spawning every 33:20 minutes for 1 difference of 1MW @@ -341,6 +385,7 @@ data["powerUse"] = mining_power + stabilizer_power data["availablePower"] = get_surplus() data["emagged"] = emagged + data["dirty"] = dirty data["autoShutown"] = auto_shutdown data["stabilizers"] = stabilizers data["stabilizerPower"] = stabilizer_power @@ -372,48 +417,72 @@ /** * Produces the product with the desired key and increases product cost accordingly */ -/obj/machinery/power/bluespace_tap/proc/produce(key) - if(key <= 0 || key > length(product_list)) //invalid key +/obj/machinery/power/bluespace_tap/proc/produce(var/datum/data/bluespace_tap_product/product, purchased = FALSE, double_chance = FALSE) + if(!product) return - var/datum/data/bluespace_tap_product/A = product_list[key] - if(!A) - return - if(A.product_cost > points) - return - points -= A.product_cost - A.product_cost = round(1.2 * A.product_cost, 1) + if(purchased) + if(product.product_cost > points) + return + points -= product.product_cost + product.product_cost = round(1.2 * product.product_cost, 1) playsound(src, 'sound/magic/blink.ogg', 50) do_sparks(2, FALSE, src) + + var/spawn_location = find_spawn_location() + spawn_item(product, spawn_location) + + if(prob(0.25) && double_chance) + // Spawn second item in random spot on station - places it where NADs can respawn + spawn_location = find_spawn_location(TRUE) + spawn_item(product, spawn_location) + +/// Handles a motherlode - each product is spawned 5 times at both the machine and around the station +/obj/machinery/power/bluespace_tap/proc/produce_motherlode() + // Announce lootsplosion + GLOB.major_announcement.Announce("Power spike detected during Bluespace Harvester Operation. Large bluespace payload inbound.", "Bluespace Harvester Motherlode", 'sound/AI/attention.ogg') + // Spawn lootsplosion + for(var/datum/data/bluespace_tap_product/product in product_list) + for(var/i in 1 to 5) + var/spawn_location = find_spawn_location() + spawn_item(product, spawn_location) + spawn_location = find_spawn_location(TRUE) + spawn_item(product, spawn_location) + +/obj/machinery/power/bluespace_tap/proc/find_spawn_location(random = FALSE) + var/list/possible_spawns = list() + if(random) + possible_spawns = GLOB.nukedisc_respawn + else + // Build list of spawn positions + for(var/turf/current_target_turf in view(3, src)) + possible_spawns.Add(current_target_turf) + + while(length(possible_spawns)) + var/turf/current_spawn = pick_n_take(possible_spawns) + if(!current_spawn.density) + return current_spawn + // Someone built a wall over it, check the surroundings + var/list/open_turfs = current_spawn.AdjacentTurfs(open_only = TRUE) + if(length(open_turfs)) + return pick(open_turfs) + +/obj/machinery/power/bluespace_tap/proc/spawn_item(var/datum/data/bluespace_tap_product/product, turf) + if(!product) + return var/selected_rarity = pick(1, 10) - var/selected_path = null + var/product_path = null if(selected_rarity < 7) - selected_path = A.product_path_common + product_path = product.product_path_common if(selected_rarity < 10 && selected_rarity > 6) - selected_path = A.product_path_uncommon + product_path = product.product_path_uncommon if(selected_rarity > 9) - selected_path = A.product_path_rare - spawn_item(selected_path, get_turf(src)) - if(pick(1, 4) == 4) - // Spawn second item in random spot on station - places it where NADs can respawn - var/random_turf = null - var/list/possible_spawns = GLOB.nukedisc_respawn - while(length(possible_spawns)) - var/turf/current_spawn = pick_n_take(possible_spawns) - if(!current_spawn.density) - spawn_item(selected_path, current_spawn) - return - // Someone built a wall over it, check the surroundings - var/list/open_turfs = current_spawn.AdjacentTurfs(open_only = TRUE) - if(length(open_turfs)) - spawn_item(selected_path, pick(open_turfs)) - return - -/obj/machinery/power/bluespace_tap/proc/spawn_item(product_path, turf) + product_path = product.product_path_rare var/obj/effect/portal/tap_portal = new /obj/effect/portal(turf, null, src, 10) tap_portal.name = "Bluespace Harvester Portal" playsound(src, 'sound/magic/blink.ogg', 50) new product_path(turf) flick_overlay_view(image(icon, src, "flash", FLY_LAYER)) + log_game("Bluespace harvester product spawned at [turf.loc_name]") //UI stuff below @@ -426,7 +495,9 @@ set_power(text2num(params["set_power"])) if("vend")//it's not really vending as producing, but eh var/key = text2num(params["target"]) - produce(key) + if(key <= 0 || key > length(product_list)) //invalid key + return + produce(product_list[key], TRUE, TRUE) if("auto_shutdown") auto_shutdown = !auto_shutdown if("stabilizers") diff --git a/code/modules/station_goals/bluespace_tap_lootpools.dm b/code/modules/station_goals/bluespace_tap_lootpools.dm index 02417357c151..29971dceb708 100644 --- a/code/modules/station_goals/bluespace_tap_lootpools.dm +++ b/code/modules/station_goals/bluespace_tap_lootpools.dm @@ -199,7 +199,7 @@ loot = list( /obj/item/food/wingfangchu, /obj/item/food/hotdog, - /obj/item/food/cookie + /obj/item/food/cookie, /obj/item/food/plumphelmetbiscuit, /obj/item/food/appletart, /obj/item/food/soup/meatballsoup, From 919735883b5a63ad3d9cbbc4a34913042ab2c8eb Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sat, 9 Nov 2024 16:40:13 -0500 Subject: [PATCH 04/31] PBJ Bag, Proper dirty probability --- code/game/objects/items/weapons/storage/boxes.dm | 8 ++++++++ code/modules/station_goals/bluespace_tap.dm | 8 +++----- code/modules/station_goals/bluespace_tap_lootpools.dm | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 31e29968b4d0..8e57dd0da856 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -1023,6 +1023,14 @@ return return ..() +/obj/item/storage/box/papersack/pbj_lunch + name = "peanut butter and jelly lunch" + desc = "A paper sack filled with enough sandwiches to feed a department." + +/obj/item/storage/box/papersack/pbj_lunch/populate_contents() + for(i in 1 to 10) + new /obj/item/food/peanut_butter_jelly(src) + /obj/item/storage/box/relay_kit name = "telecommunications relay kit" desc = "Contains everything you need to set up your own telecommunications array!" diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 4f7e66845bf1..42410aa5e12c 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -310,7 +310,7 @@ total_points += mined_points update_icon() // Machine gets dirty. Always remains at 2% regardless of power draw. - if(prob(0.02)) + if(prob(2)) radio.autosay("Bluespace harvester malfunction detected: filth contaminants have jammed [src]'s bluespace receiver!", name, "Engineering") dirty = TRUE @@ -339,8 +339,6 @@ produce_motherlode() motherlode_interval += 45000 - - /* * Portal chance is 0.1% per cycle per difference of 1MW between the stabilizer and mining power * This should translate to portals spawning every 33:20 minutes for 1 difference of 1MW @@ -431,7 +429,7 @@ var/spawn_location = find_spawn_location() spawn_item(product, spawn_location) - if(prob(0.25) && double_chance) + if(prob(25) && double_chance) // Spawn second item in random spot on station - places it where NADs can respawn spawn_location = find_spawn_location(TRUE) spawn_item(product, spawn_location) @@ -482,7 +480,7 @@ playsound(src, 'sound/magic/blink.ogg', 50) new product_path(turf) flick_overlay_view(image(icon, src, "flash", FLY_LAYER)) - log_game("Bluespace harvester product spawned at [turf.loc_name]") + log_game("Bluespace harvester product spawned at [turf]") //UI stuff below diff --git a/code/modules/station_goals/bluespace_tap_lootpools.dm b/code/modules/station_goals/bluespace_tap_lootpools.dm index 29971dceb708..cc97e1fa672e 100644 --- a/code/modules/station_goals/bluespace_tap_lootpools.dm +++ b/code/modules/station_goals/bluespace_tap_lootpools.dm @@ -275,7 +275,7 @@ /obj/item/food/burger/ppatty/rainbow, /obj/item/food/burger/elec, /obj/item/food/notasandwich, - /obj/item/food/peanut_butter_jelly, + /obj/item/storage/box/papersack/pbj_lunch, /obj/item/food/soylentviridians, /obj/item/food/baguette/combat ) From 56d0da10d9c89607511c02fe976517449e7b3a21 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sat, 9 Nov 2024 16:58:17 -0500 Subject: [PATCH 05/31] Added more items to organic lootpool --- .../station_goals/bluespace_tap_lootpools.dm | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/code/modules/station_goals/bluespace_tap_lootpools.dm b/code/modules/station_goals/bluespace_tap_lootpools.dm index cc97e1fa672e..865f5cbb60b9 100644 --- a/code/modules/station_goals/bluespace_tap_lootpools.dm +++ b/code/modules/station_goals/bluespace_tap_lootpools.dm @@ -165,7 +165,9 @@ /obj/item/dnainjector/noprints, /obj/item/dnainjector/comic, /obj/item/seeds/random/labelled, - /obj/item/organ/internal/regenerative_core + /obj/item/organ/internal/regenerative_core, + /obj/item/reagent_containers/glass/bottle/reagent/omnizine, + /obj/item/reagent_containers/glass/bottle/reagent/lazarus_reagent ) /obj/effect/spawner/lootdrop/bluespace_tap/organic_uncommon @@ -181,7 +183,9 @@ /obj/item/organ/internal/alien/eggsac, /obj/item/organ/internal/heart/gland/heals, /obj/item/organ/internal/heart/gland/ventcrawling, - /obj/item/organ/internal/heart/gland/egg + /obj/item/organ/internal/heart/gland/egg, + /obj/item/slimepotion/fireproof, + /obj/item/slimepotion/oil_slick ) /obj/effect/spawner/lootdrop/bluespace_tap/organic_rare @@ -190,7 +194,10 @@ /obj/item/guardiancreator/biological, /obj/item/organ/internal/vocal_cords/adamantine, /obj/item/food/grown/shell/gatfruit, - /obj/item/food/grown/cherry_bomb + /obj/item/food/grown/cherry_bomb, + /obj/item/bio_chip_implanter/storage, + /obj/item/slimepotion/sentience, + /obj/item/slimepotion/transference ) /obj/effect/spawner/lootdrop/bluespace_tap/food_common From 0fd60c71fd98729bebfc7b69954d9513c465f3f7 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sat, 23 Nov 2024 05:08:07 -0500 Subject: [PATCH 06/31] BSH Events --- .../objects/items/weapons/storage/boxes.dm | 2 +- code/modules/station_goals/bluespace_tap.dm | 54 ++++-- .../station_goals/bluespace_tap_events.dm | 157 ++++++++++++++++++ icons/obj/machines/bluespace_tap.dmi | Bin 28981 -> 73966 bytes paradise.dme | 1 + 5 files changed, 200 insertions(+), 14 deletions(-) create mode 100644 code/modules/station_goals/bluespace_tap_events.dm diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 8e57dd0da856..b2bfead67644 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -1028,7 +1028,7 @@ desc = "A paper sack filled with enough sandwiches to feed a department." /obj/item/storage/box/papersack/pbj_lunch/populate_contents() - for(i in 1 to 10) + for(var/i in 1 to 10) new /obj/item/food/peanut_butter_jelly(src) /obj/item/storage/box/relay_kit diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 42410aa5e12c..35083102bd28 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -105,6 +105,9 @@ 20000) ) + /// list of possible events + var/static/event_list + /// The amount of power being used for mining at the moment (Watts) var/mining_power = 0 /// The power you WANT the machine to use for mining. It will try to match this. (Watts) @@ -116,13 +119,13 @@ /// The total points earned by this machine so far, for tracking station goal and highscore var/total_points = 0 /// The point interval where the machine will automatically spawn a clothing item - var/clothing_interval = 5000 + var/clothing_interval = 7500 /// The point interval where the machine will automatically spawn a food item - var/food_interval = 6000 + var/food_interval = 10000 /// The point interval where the machine will automatically spawn a cultural item - var/cultural_interval = 10000 + var/cultural_interval = 15000 /// The point interval where the machine will automatically spawn an organic item - var/organic_interval = 15000 + var/organic_interval = 20000 /// The point interval where the machine will strike a motherlode var/motherlode_interval = 45000 /// How much power the machine needs per processing tick at the current level. @@ -147,10 +150,6 @@ var/spawning = 0 /// When a filth event triggers, this will stop the operation until it is cleaned var/dirty = FALSE - /// When a chemical event triggers, this will stop operation until the chemical is fed to the machine - var/chemical_block = FALSE - /// When a chemical event triggers, this will contain the needed chemical to start progress again - var/chemical_needed = "Water" /// Internal radio to handle announcements over engineering var/obj/item/radio/radio @@ -169,6 +168,19 @@ list(1, MACH_CENTER, 1), list(1, 0, 1), )) + event_list = list( + new /datum/bluespace_tap_event/dirty(src), + new /datum/bluespace_tap_event/electric_arc(src), + new /datum/bluespace_tap_event/electric_arc/mass(src), + new /datum/bluespace_tap_event/radiation(src), + new /datum/bluespace_tap_event/gas/nitrogen(src), + new /datum/bluespace_tap_event/gas/carbon_dioxide(src), + new /datum/bluespace_tap_event/gas/oxygen(src), + new /datum/bluespace_tap_event/gas/plasma(src), + new /datum/bluespace_tap_event/gas/agent_b(src), + new /datum/bluespace_tap_event/gas/sleeping_gas(src) + ) + radio = new(src) radio.listening = FALSE radio.follow_target = src @@ -207,7 +219,10 @@ set_light(1, 1, "#353535") if(get_available_power()) - . += "screen" + if(dirty) + . += "screen_dirty" + else + . += "screen" if(light) underlays += emissive_appearance(icon, "light_mask") @@ -309,10 +324,6 @@ points += mined_points total_points += mined_points update_icon() - // Machine gets dirty. Always remains at 2% regardless of power draw. - if(prob(2)) - radio.autosay("Bluespace harvester malfunction detected: filth contaminants have jammed [src]'s bluespace receiver!", name, "Engineering") - dirty = TRUE // Handle automatic spawning of loot. Extra loot spawns in maints if stabilizers are off to incentivise risk taking if(total_points > clothing_interval) @@ -357,6 +368,7 @@ desired_mining_power = 0 //emergency shutdown unless it is disabled // An extra portal for each 30MW above 15 start_nether_portaling(rand(1 , 3) + round(max((mining_power - 15 MW) / (30 MW) , 0)), TRUE) + try_events() /obj/machinery/power/bluespace_tap/proc/start_nether_portaling(amount, new_incursion = FALSE) if(new_incursion) @@ -482,6 +494,22 @@ flick_overlay_view(image(icon, src, "flash", FLY_LAYER)) log_game("Bluespace harvester product spawned at [turf]") +/obj/machinery/power/bluespace_tap/proc/try_events() + if(!mining_power) + return + if(!prob((mining_power / (10 MW)) + (emagged * 5)))// Calculate prob of event based on mining power. Return if no event. + return + var/datum/bluespace_tap_event/event = pick(event_list) + run_event(event) + +/obj/machinery/power/bluespace_tap/proc/run_event(datum/bluespace_tap_event/event) // mostly admin testing and stuff + if(ispath(event)) + event = new event(src) + if(!istype(event)) + log_debug("Attempted bluespace tap event aborted due to incorrect path. Incorrect path type: [event.type].") + return + event.start_event() + //UI stuff below /obj/machinery/power/bluespace_tap/ui_act(action, params) diff --git a/code/modules/station_goals/bluespace_tap_events.dm b/code/modules/station_goals/bluespace_tap_events.dm new file mode 100644 index 000000000000..0e36b694b76c --- /dev/null +++ b/code/modules/station_goals/bluespace_tap_events.dm @@ -0,0 +1,157 @@ +/datum/bluespace_tap_event + var/name = "Unknown Anomaly (Report this to coders)" + var/obj/machinery/power/bluespace_tap/tap + /// Probability of the event not running, higher tiers being rarer + var/threat_level + var/duration + var/turf/tap_turf + +/datum/bluespace_tap_event/New(obj/machinery/power/bluespace_tap/_tap) + . = ..() + tap = _tap + tap_turf = get_turf(tap) + if(!tap) + stack_trace("a /datum/bluespace_tap_event was called without an involved bluespace tap.") + return + if(!istype(tap)) + stack_trace("a /datum/bluespace_tap_event was called with (name: [tap], type: [tap.type]) instead of a bluespace tap!") + return + +/datum/bluespace_tap_event/proc/start_event() + on_start() + alert_engi() + tap.investigate_log("event [src] has been triggered", "bluespace_tap") + +/datum/bluespace_tap_event/proc/on_start() + return + +/datum/bluespace_tap_event/proc/alert_engi() + return + +// gas events +/datum/bluespace_tap_event/gas + name = "Gas Event" + +/datum/bluespace_tap_event/gas/alert_engi() + tap.radio.autosay("Bluespace harvester has released a class [src] gas pocket!", tap, "Engineering") + +// sleeping gas +/datum/bluespace_tap_event/gas/sleeping_gas + name = "G-1" + +/datum/bluespace_tap_event/gas/sleeping_gas/on_start() + var/datum/gas_mixture/air = new() + air.set_sleeping_agent(200) + air.set_temperature(T20C) + tap_turf.blind_release_air(air) + +// nitrogen +/datum/bluespace_tap_event/gas/nitrogen + name = "G-2" + +/datum/bluespace_tap_event/gas/nitrogen/on_start() + var/datum/gas_mixture/air = new() + air.set_nitrogen(250) + air.set_temperature(T20C) + tap_turf.blind_release_air(air) + +// carbon dioxide +/datum/bluespace_tap_event/gas/carbon_dioxide + name = "G-3" + +/datum/bluespace_tap_event/gas/carbon_dioxide/on_start() + var/datum/gas_mixture/air = new() + air.set_carbon_dioxide(250) + air.set_temperature(T20C) + tap_turf.blind_release_air(air) + +// plasma +/datum/bluespace_tap_event/gas/plasma + name = "G-4" + +/datum/bluespace_tap_event/gas/plasma/on_start() + var/datum/gas_mixture/air = new() + air.set_toxins(250) + air.set_temperature(T20C) + tap_turf.blind_release_air(air) + + +// oxygen +/datum/bluespace_tap_event/gas/oxygen + name = "G-5" + +/datum/bluespace_tap_event/gas/oxygen/on_start() + var/datum/gas_mixture/air = new() + air.set_oxygen(250) + air.set_temperature(T20C) + tap_turf.blind_release_air(air) + +// agent_b +/datum/bluespace_tap_event/gas/agent_b + name = "G-6" + +/datum/bluespace_tap_event/gas/agent_b/on_start() + var/datum/gas_mixture/air = new() + air.set_agent_b(250) + air.set_temperature(T20C) + tap_turf.blind_release_air(air) + +// dirty +/datum/bluespace_tap_event/dirty + name = "F-1" + +/datum/bluespace_tap_event/dirty/alert_engi() + tap.radio.autosay("Bluespace harvester has struck a congealed mass of filth!", tap, "Engineering") + +/datum/bluespace_tap_event/dirty/on_start() + tap.dirty = TRUE + var/list/gunk = list("carbon","flour","blood") + var/datum/reagents/R = new/datum/reagents(50) + R.my_atom = tap + R.add_reagent(pick(gunk), 50) + + var/datum/effect_system/smoke_spread/chem/smoke = new + smoke.set_up(R, tap, TRUE) + playsound(tap.loc, 'sound/effects/smoke.ogg', 50, TRUE, -3) + smoke.start(3) + qdel(R) + +// radiation pulse +/datum/bluespace_tap_event/radiation + name = "R-1" + +/datum/bluespace_tap_event/radiation/alert_engi() + tap.radio.autosay("Bluespace harvester has released a spike of radiation!", tap, "Engineering") + +/datum/bluespace_tap_event/radiation/on_start() + radiation_pulse(tap, 3000, 7) + +// electrical arc +/datum/bluespace_tap_event/electric_arc + name = "E-1" + +/datum/bluespace_tap_event/electric_arc/alert_engi() + tap.radio.autosay("Class [src] power spike detected in bluespace harvester operation!", tap, "Engineering") + +/datum/bluespace_tap_event/electric_arc/on_start() + var/list/shock_mobs = list() + for(var/C in view(tap_turf, 5)) // We only want to shock a single random mob in range, not every one. + if(isliving(C)) + shock_mobs += C + if(length(shock_mobs)) + var/mob/living/L = pick(shock_mobs) + L.electrocute_act(rand(5, 25), "electrical arc") + playsound(get_turf(L), 'sound/effects/eleczap.ogg', 75, TRUE) + tap.Beam(L, icon_state = "lightning[rand(1, 12)]", icon = 'icons/effects/effects.dmi', time = 5) + +// mass electrical arc +/datum/bluespace_tap_event/electric_arc/mass + name = "E-2" + +/datum/bluespace_tap_event/electric_arc/mass/on_start() + for(var/C in view(tap_turf, 5)) // Zap everyone + if(isliving(C)) + var/mob/living/L = C + L.electrocute_act(rand(5, 25), "electrical arc") + playsound(get_turf(L), 'sound/effects/eleczap.ogg', 75, TRUE) + tap.Beam(L, icon_state = "lightning[rand(1, 12)]", icon = 'icons/effects/effects.dmi', time = 5) diff --git a/icons/obj/machines/bluespace_tap.dmi b/icons/obj/machines/bluespace_tap.dmi index 4e6e32afe7cdd0862cdad552058dda4a357f576f..9d156871fcaee14f6c08f9a9361e208f3199dd60 100644 GIT binary patch literal 73966 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 z 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 X&?1m_LgCnX77xq;9_ga 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

q4`>xI3$TU6;{ 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 b`TVCo>p|KT6BG8mAS*px{an^LB{Ts5qAKm9 literal 28981 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 Date: Sat, 23 Nov 2024 13:20:23 -0500 Subject: [PATCH 07/31] Event condensing, product var fix --- code/modules/station_goals/bluespace_tap.dm | 21 +-- .../station_goals/bluespace_tap_events.dm | 120 +++++++----------- 2 files changed, 50 insertions(+), 91 deletions(-) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index b2c0bc965af8..1464419aed73 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -171,16 +171,9 @@ event_list = list( new /datum/bluespace_tap_event/dirty(src), new /datum/bluespace_tap_event/electric_arc(src), - new /datum/bluespace_tap_event/electric_arc/mass(src), new /datum/bluespace_tap_event/radiation(src), - new /datum/bluespace_tap_event/gas/nitrogen(src), - new /datum/bluespace_tap_event/gas/carbon_dioxide(src), - new /datum/bluespace_tap_event/gas/oxygen(src), - new /datum/bluespace_tap_event/gas/plasma(src), - new /datum/bluespace_tap_event/gas/agent_b(src), - new /datum/bluespace_tap_event/gas/sleeping_gas(src) + new /datum/bluespace_tap_event/gas(src) ) - radio = new(src) radio.listening = FALSE radio.follow_target = src @@ -329,22 +322,22 @@ if(total_points > clothing_interval) produce(product_list[1], FALSE, !stabilizers) radio.autosay("Bluespace harvester progress detected: [src] has produced some clothes!", name, "Engineering") - clothing_interval += 5000 + clothing_interval += 7500 if(total_points > food_interval) produce(product_list[2], FALSE, !stabilizers) radio.autosay("Bluespace harvester progress detected: [src] has produced some food!", name, "Engineering") - food_interval += 6000 + food_interval += 10000 if(total_points > cultural_interval) produce(product_list[3], FALSE, !stabilizers) radio.autosay("Bluespace harvester progress detected: [src] has produced something with culture!", name, "Engineering") - cultural_interval += 10000 + cultural_interval += 15000 if(total_points > organic_interval) produce(product_list[4], FALSE, !stabilizers) radio.autosay("Bluespace harvester progress detected: [src] has produced something organic!", name, "Engineering") - organic_interval += 15000 + organic_interval += 20000 if(total_points > motherlode_interval) produce_motherlode() @@ -427,7 +420,7 @@ /** * Produces the product with the desired key and increases product cost accordingly */ -/obj/machinery/power/bluespace_tap/proc/produce(var/datum/data/bluespace_tap_product/product, purchased = FALSE, double_chance = FALSE) +/obj/machinery/power/bluespace_tap/proc/produce(datum/data/bluespace_tap_product/product, purchased = FALSE, double_chance = FALSE) if(!product) return if(purchased) @@ -476,7 +469,7 @@ if(length(open_turfs)) return pick(open_turfs) -/obj/machinery/power/bluespace_tap/proc/spawn_item(var/datum/data/bluespace_tap_product/product, turf) +/obj/machinery/power/bluespace_tap/proc/spawn_item(datum/data/bluespace_tap_product/product, turf) if(!product) return var/selected_rarity = pick(1, 10) diff --git a/code/modules/station_goals/bluespace_tap_events.dm b/code/modules/station_goals/bluespace_tap_events.dm index 0e36b694b76c..812945f8eb12 100644 --- a/code/modules/station_goals/bluespace_tap_events.dm +++ b/code/modules/station_goals/bluespace_tap_events.dm @@ -35,64 +35,29 @@ /datum/bluespace_tap_event/gas/alert_engi() tap.radio.autosay("Bluespace harvester has released a class [src] gas pocket!", tap, "Engineering") -// sleeping gas -/datum/bluespace_tap_event/gas/sleeping_gas - name = "G-1" - -/datum/bluespace_tap_event/gas/sleeping_gas/on_start() - var/datum/gas_mixture/air = new() - air.set_sleeping_agent(200) - air.set_temperature(T20C) - tap_turf.blind_release_air(air) - -// nitrogen -/datum/bluespace_tap_event/gas/nitrogen - name = "G-2" - -/datum/bluespace_tap_event/gas/nitrogen/on_start() - var/datum/gas_mixture/air = new() - air.set_nitrogen(250) - air.set_temperature(T20C) - tap_turf.blind_release_air(air) - -// carbon dioxide -/datum/bluespace_tap_event/gas/carbon_dioxide - name = "G-3" - -/datum/bluespace_tap_event/gas/carbon_dioxide/on_start() - var/datum/gas_mixture/air = new() - air.set_carbon_dioxide(250) - air.set_temperature(T20C) - tap_turf.blind_release_air(air) - -// plasma -/datum/bluespace_tap_event/gas/plasma - name = "G-4" - -/datum/bluespace_tap_event/gas/plasma/on_start() - var/datum/gas_mixture/air = new() - air.set_toxins(250) - air.set_temperature(T20C) - tap_turf.blind_release_air(air) - - -// oxygen -/datum/bluespace_tap_event/gas/oxygen - name = "G-5" - -/datum/bluespace_tap_event/gas/oxygen/on_start() +/datum/bluespace_tap_event/gas/on_start() var/datum/gas_mixture/air = new() - air.set_oxygen(250) - air.set_temperature(T20C) - tap_turf.blind_release_air(air) - -// agent_b -/datum/bluespace_tap_event/gas/agent_b - name = "G-6" + var/picked_gas = pick("N2O", "N2", "O2", "CO2", "Plasma", "Unknown") + switch(picked_gas) + if("N2") + name = "G-1" + air.set_nitrogen(250) + if("O2") + name = "G-2" + air.set_oxygen(250) + if("N2O") + name = "G-3" + air.set_sleeping_agent(200) + if("CO2") + name = "G-4" + air.set_carbon_dioxide(250) + if("Plasma") + name = "G-5" + air.set_toxins(250) + if("Unknown") + name = "G-6" + air.set_agent_b(250) -/datum/bluespace_tap_event/gas/agent_b/on_start() - var/datum/gas_mixture/air = new() - air.set_agent_b(250) air.set_temperature(T20C) tap_turf.blind_release_air(air) @@ -134,24 +99,25 @@ tap.radio.autosay("Class [src] power spike detected in bluespace harvester operation!", tap, "Engineering") /datum/bluespace_tap_event/electric_arc/on_start() - var/list/shock_mobs = list() - for(var/C in view(tap_turf, 5)) // We only want to shock a single random mob in range, not every one. - if(isliving(C)) - shock_mobs += C - if(length(shock_mobs)) - var/mob/living/L = pick(shock_mobs) - L.electrocute_act(rand(5, 25), "electrical arc") - playsound(get_turf(L), 'sound/effects/eleczap.ogg', 75, TRUE) - tap.Beam(L, icon_state = "lightning[rand(1, 12)]", icon = 'icons/effects/effects.dmi', time = 5) - -// mass electrical arc -/datum/bluespace_tap_event/electric_arc/mass - name = "E-2" - -/datum/bluespace_tap_event/electric_arc/mass/on_start() - for(var/C in view(tap_turf, 5)) // Zap everyone - if(isliving(C)) - var/mob/living/L = C - L.electrocute_act(rand(5, 25), "electrical arc") - playsound(get_turf(L), 'sound/effects/eleczap.ogg', 75, TRUE) - tap.Beam(L, icon_state = "lightning[rand(1, 12)]", icon = 'icons/effects/effects.dmi', time = 5) + var/shock_type = pick("single", "mass") + switch(shock_type) + if("single") + var/list/shock_mobs = list() + for(var/C in view(tap_turf, 5)) // We only want to shock a single random mob in range, not every one. + if(isliving(C)) + shock_mobs += C + if(length(shock_mobs)) + var/mob/living/L = pick(shock_mobs) + L.electrocute_act(rand(5, 25), "electrical arc") + playsound(get_turf(L), 'sound/effects/eleczap.ogg', 75, TRUE) + tap.Beam(L, icon_state = "lightning[rand(1, 12)]", icon = 'icons/effects/effects.dmi', time = 5) + if("mass") + name = "E-2" + for(var/C in view(tap_turf, 5)) // Zap everyone + if(isliving(C)) + var/mob/living/L = C + L.electrocute_act(rand(5, 25), "electrical arc") + playsound(get_turf(L), 'sound/effects/eleczap.ogg', 75, TRUE) + tap.Beam(L, icon_state = "lightning[rand(1, 12)]", icon = 'icons/effects/effects.dmi', time = 5) + + From 30e7916aec65752722134bb5121a323bb35debc7 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sat, 23 Nov 2024 13:21:28 -0500 Subject: [PATCH 08/31] Spawn location condensing Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> --- code/modules/station_goals/bluespace_tap.dm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 1464419aed73..7d318d5009b6 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -446,10 +446,8 @@ // Spawn lootsplosion for(var/datum/data/bluespace_tap_product/product in product_list) for(var/i in 1 to 5) - var/spawn_location = find_spawn_location() - spawn_item(product, spawn_location) - spawn_location = find_spawn_location(TRUE) - spawn_item(product, spawn_location) + spawn_item(product, find_spawn_location()) + spawn_item(product, find_spawn_location(random = TRUE)) /obj/machinery/power/bluespace_tap/proc/find_spawn_location(random = FALSE) var/list/possible_spawns = list() From 0b8fa6450607ae0a6e9a2579236162d75d78524d Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sat, 23 Nov 2024 13:22:39 -0500 Subject: [PATCH 09/31] Postclean --- code/modules/station_goals/bluespace_tap.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 1464419aed73..a461d14898ea 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -179,7 +179,7 @@ radio.follow_target = src radio.config(list("Engineering" = 0)) -/obj/machinery/power/bluespace_tap/cleaning_act(mob/user, atom/cleaner, cleanspeed, text_verb, text_description, text_targetname) +/obj/machinery/power/bluespace_tap/post_clean() . = ..() dirty = FALSE From e2656466ce088ecf3cceee2e98cafba49631de43 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sat, 23 Nov 2024 13:28:04 -0500 Subject: [PATCH 10/31] Event list relocation, some announcement changes. --- code/modules/station_goals/bluespace_tap.dm | 23 +++++++++------------ 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index da32c037cb17..67cac503bf65 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -105,9 +105,6 @@ 20000) ) - /// list of possible events - var/static/event_list - /// The amount of power being used for mining at the moment (Watts) var/mining_power = 0 /// The power you WANT the machine to use for mining. It will try to match this. (Watts) @@ -168,12 +165,6 @@ list(1, MACH_CENTER, 1), list(1, 0, 1), )) - event_list = list( - new /datum/bluespace_tap_event/dirty(src), - new /datum/bluespace_tap_event/electric_arc(src), - new /datum/bluespace_tap_event/radiation(src), - new /datum/bluespace_tap_event/gas(src) - ) radio = new(src) radio.listening = FALSE radio.follow_target = src @@ -321,17 +312,17 @@ // Handle automatic spawning of loot. Extra loot spawns in maints if stabilizers are off to incentivise risk taking if(total_points > clothing_interval) produce(product_list[1], FALSE, !stabilizers) - radio.autosay("Bluespace harvester progress detected: [src] has produced some clothes!", name, "Engineering") + radio.autosay("Bluespace harvester progress detected: [src] has produced unknown clothes!", name, "Engineering") clothing_interval += 7500 if(total_points > food_interval) produce(product_list[2], FALSE, !stabilizers) - radio.autosay("Bluespace harvester progress detected: [src] has produced some food!", name, "Engineering") + radio.autosay("Bluespace harvester progress detected: [src] has produced unknown food!", name, "Engineering") food_interval += 10000 if(total_points > cultural_interval) produce(product_list[3], FALSE, !stabilizers) - radio.autosay("Bluespace harvester progress detected: [src] has produced something with culture!", name, "Engineering") + radio.autosay("Bluespace harvester progress detected: [src] has produced something unknown with cultural value!", name, "Engineering") cultural_interval += 15000 if(total_points > organic_interval) @@ -446,7 +437,7 @@ // Spawn lootsplosion for(var/datum/data/bluespace_tap_product/product in product_list) for(var/i in 1 to 5) - spawn_item(product, find_spawn_location()) + spawn_item(product, find_spawn_location()) spawn_item(product, find_spawn_location(random = TRUE)) /obj/machinery/power/bluespace_tap/proc/find_spawn_location(random = FALSE) @@ -490,6 +481,12 @@ return if(!prob((mining_power / (10 MW)) + (emagged * 5)))// Calculate prob of event based on mining power. Return if no event. return + var/static/list/event_list = list( + /datum/bluespace_tap_event/dirty, + /datum/bluespace_tap_event/electric_arc, + /datum/bluespace_tap_event/radiation, + /datum/bluespace_tap_event/gas + ) var/datum/bluespace_tap_event/event = pick(event_list) run_event(event) From af520969cc46b6d96b3fcf9ecb1bbde6260f213d Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sat, 23 Nov 2024 13:29:21 -0500 Subject: [PATCH 11/31] Motherlode announcement over radio instead of announcement --- code/modules/station_goals/bluespace_tap.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 67cac503bf65..794490a828dd 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -433,7 +433,7 @@ /// Handles a motherlode - each product is spawned 5 times at both the machine and around the station /obj/machinery/power/bluespace_tap/proc/produce_motherlode() // Announce lootsplosion - GLOB.major_announcement.Announce("Power spike detected during Bluespace Harvester Operation. Large bluespace payload inbound.", "Bluespace Harvester Motherlode", 'sound/AI/attention.ogg') + radio.autosay("Power spike detected during Bluespace Harvester Operation. Large bluespace payload inbound.", name, "Engineering") // Spawn lootsplosion for(var/datum/data/bluespace_tap_product/product in product_list) for(var/i in 1 to 5) From 1866302a2c44a4b8bef442f326c454f6be1b0754 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sat, 23 Nov 2024 13:46:20 -0500 Subject: [PATCH 12/31] Created parent type for engineering events --- .../engines/supermatter/engineering_event.dm | 22 ++++ .../power/engines/supermatter/supermatter.dm | 20 ++-- .../engines/supermatter/supermatter_event.dm | 112 ++++++++---------- code/modules/station_goals/bluespace_tap.dm | 12 +- .../station_goals/bluespace_tap_events.dm | 44 +++---- paradise.dme | 1 + 6 files changed, 106 insertions(+), 105 deletions(-) create mode 100644 code/modules/power/engines/supermatter/engineering_event.dm diff --git a/code/modules/power/engines/supermatter/engineering_event.dm b/code/modules/power/engines/supermatter/engineering_event.dm new file mode 100644 index 000000000000..e33149e8be81 --- /dev/null +++ b/code/modules/power/engines/supermatter/engineering_event.dm @@ -0,0 +1,22 @@ +/datum/engi_event + var/name = "Unknown Engi Event (Report this to coders)" + var/threat_level + var/duration + +/datum/engi_event/New() + . = ..() + +/datum/engi_event/proc/start_event() + return + +/datum/engi_event/proc/on_start() + on_start() + alert_engi() + if(duration) + addtimer(CALLBACK(src, PROC_REF(on_end)), duration) + +/datum/engi_event/proc/alert_engi() + return + +/datum/engi_event/proc/on_end() + return diff --git a/code/modules/power/engines/supermatter/supermatter.dm b/code/modules/power/engines/supermatter/supermatter.dm index 8e2c20709c0a..08acfe877245 100644 --- a/code/modules/power/engines/supermatter/supermatter.dm +++ b/code/modules/power/engines/supermatter/supermatter.dm @@ -210,7 +210,7 @@ //vars used for supermatter events (Anomalous crystal activityw) /// Do we have an active event? - var/datum/supermatter_event/event_active + var/datum/engi_event/supermatter_event/event_active ///flat multiplies the amount of gas released by the SM. var/gas_multiplier = 1 ///flat multiplies the heat released by the SM @@ -1227,20 +1227,20 @@ return if(event_active) return - var/static/list/events = list(/datum/supermatter_event/delta_tier = 40, - /datum/supermatter_event/charlie_tier = 40, - /datum/supermatter_event/bravo_tier = 15, - /datum/supermatter_event/alpha_tier = 5, - /datum/supermatter_event/sierra_tier = 1) - - var/datum/supermatter_event/event = pick(subtypesof(pickweight(events))) - if(ispath(event, /datum/supermatter_event/sierra_tier) && has_run_sclass) + var/static/list/events = list(/datum/engi_event/supermatter_event/delta_tier = 40, + /datum/engi_event/supermatter_event/charlie_tier = 40, + /datum/engi_event/supermatter_event/bravo_tier = 15, + /datum/engi_event/supermatter_event/alpha_tier = 5, + /datum/engi_event/supermatter_event/sierra_tier = 1) + + var/datum/engi_event/supermatter_event/event = pick(subtypesof(pickweight(events))) + if(ispath(event, /datum/engi_event/supermatter_event/sierra_tier) && has_run_sclass) make_next_event_time() return // We're only gonna have one s-class per round, take a break engineers run_event(event) make_next_event_time() -/obj/machinery/atmospherics/supermatter_crystal/proc/run_event(datum/supermatter_event/event) // mostly admin testing and stuff +/obj/machinery/atmospherics/supermatter_crystal/proc/run_event(datum/engi_event/supermatter_event/event) // mostly admin testing and stuff if(ispath(event)) event = new event(src) if(!istype(event)) diff --git a/code/modules/power/engines/supermatter/supermatter_event.dm b/code/modules/power/engines/supermatter/supermatter_event.dm index f418db3a546a..6ac845464074 100644 --- a/code/modules/power/engines/supermatter/supermatter_event.dm +++ b/code/modules/power/engines/supermatter/supermatter_event.dm @@ -1,37 +1,25 @@ -/datum/supermatter_event - var/name = "Unknown X-K (Report this to coders)" +/datum/engi_event/supermatter_event + name = "Unknown X-K (Report this to coders)" var/obj/machinery/atmospherics/supermatter_crystal/supermatter - /// Probability of the event not running, higher tiers being rarer - var/threat_level - var/duration var/turf/supermatter_turf -/datum/supermatter_event/New(obj/machinery/atmospherics/supermatter_crystal/_supermatter) +/datum/engi_event/supermatter_event/New(obj/machinery/atmospherics/supermatter_crystal/_supermatter) . = ..() supermatter = _supermatter supermatter_turf = get_turf(supermatter) if(!supermatter) - stack_trace("a /datum/supermatter_event was called without an involved supermatter.") + stack_trace("a /datum/engi_event/supermatter_event was called without an involved supermatter.") return if(!istype(supermatter)) - stack_trace("a /datum/supermatter_event was called with (name: [supermatter], type: [supermatter.type]) instead of a supermatter!") + stack_trace("a /datum/engi_event/supermatter_event was called with (name: [supermatter], type: [supermatter.type]) instead of a supermatter!") return -/datum/supermatter_event/proc/start_event() +/datum/engi_event/supermatter_event/start_event() supermatter.event_active = src - on_start() - alert_engi() supermatter.investigate_log("event [src] has been triggered", "supermatter") - if(duration) - addtimer(CALLBACK(src, PROC_REF(on_end)), duration) - -/datum/supermatter_event/proc/on_start() - return - -/datum/supermatter_event/proc/alert_engi() - return + . = ..() -/datum/supermatter_event/proc/on_end() +/datum/engi_event/supermatter_event/on_end() sm_radio_say("Anomalous crystal activity has ended.") supermatter.heat_penalty_threshold = SUPERMATTER_HEAT_PENALTY_THRESHOLD supermatter.gas_multiplier = 1 @@ -39,12 +27,12 @@ supermatter.heat_multiplier = 1 supermatter.event_active = null -/datum/supermatter_event/proc/sm_radio_say(text) +/datum/engi_event/supermatter_event/proc/sm_radio_say(text) if(!text) return supermatter.radio.autosay(text, supermatter.name, "Engineering") -/datum/supermatter_event/proc/general_radio_say(text) +/datum/engi_event/supermatter_event/proc/general_radio_say(text) if(!text) return supermatter.radio.autosay(text, supermatter.name, null) @@ -53,36 +41,36 @@ //D class events -/datum/supermatter_event/delta_tier +/datum/engi_event/supermatter_event/delta_tier threat_level = SM_EVENT_THREAT_D duration = 10 SECONDS -/datum/supermatter_event/delta_tier/alert_engi() +/datum/engi_event/supermatter_event/delta_tier/alert_engi() sm_radio_say("Abnormal crystal activity detected! Activity class: [name].") // sleeping gas -/datum/supermatter_event/delta_tier/sleeping_gas +/datum/engi_event/supermatter_event/delta_tier/sleeping_gas name = "D-1" -/datum/supermatter_event/delta_tier/sleeping_gas/on_start() +/datum/engi_event/supermatter_event/delta_tier/sleeping_gas/on_start() var/datum/gas_mixture/air = new() air.set_sleeping_agent(2000) supermatter_turf.blind_release_air(air) // nitrogen -/datum/supermatter_event/delta_tier/nitrogen +/datum/engi_event/supermatter_event/delta_tier/nitrogen name = "D-2" -/datum/supermatter_event/delta_tier/nitrogen/on_start() +/datum/engi_event/supermatter_event/delta_tier/nitrogen/on_start() var/datum/gas_mixture/air = new() air.set_nitrogen(2000) supermatter_turf.blind_release_air(air) // carbon dioxide -/datum/supermatter_event/delta_tier/carbon_dioxide +/datum/engi_event/supermatter_event/delta_tier/carbon_dioxide name = "D-3" -/datum/supermatter_event/delta_tier/carbon_dioxide/on_start() +/datum/engi_event/supermatter_event/delta_tier/carbon_dioxide/on_start() var/datum/gas_mixture/air = new() air.set_carbon_dioxide(2000) supermatter_turf.blind_release_air(air) @@ -90,131 +78,131 @@ // C class events -/datum/supermatter_event/charlie_tier +/datum/engi_event/supermatter_event/charlie_tier threat_level = SM_EVENT_THREAT_C duration = 15 SECONDS -/datum/supermatter_event/charlie_tier/alert_engi() +/datum/engi_event/supermatter_event/charlie_tier/alert_engi() sm_radio_say("Anomalous crystal activity detected. Activity class: [name]. Operator intervention may be required.") // oxygen -/datum/supermatter_event/charlie_tier/oxygen +/datum/engi_event/supermatter_event/charlie_tier/oxygen name = "C-1" -/datum/supermatter_event/charlie_tier/oxygen/on_start() +/datum/engi_event/supermatter_event/charlie_tier/oxygen/on_start() var/datum/gas_mixture/air = new() air.set_oxygen(2000) supermatter_turf.blind_release_air(air) // plasma -/datum/supermatter_event/charlie_tier/plasma +/datum/engi_event/supermatter_event/charlie_tier/plasma name = "C-2" -/datum/supermatter_event/charlie_tier/plasma/on_start() +/datum/engi_event/supermatter_event/charlie_tier/plasma/on_start() var/datum/gas_mixture/air = new() air.set_toxins(2000) supermatter_turf.blind_release_air(air) // lowers the temp required for the SM to take damage. -/datum/supermatter_event/charlie_tier/heat_penalty_threshold +/datum/engi_event/supermatter_event/charlie_tier/heat_penalty_threshold name = "C-3" duration = 5 MINUTES -/datum/supermatter_event/charlie_tier/heat_penalty_threshold/on_start() +/datum/engi_event/supermatter_event/charlie_tier/heat_penalty_threshold/on_start() supermatter.heat_penalty_threshold -= -173 //Class B events -/datum/supermatter_event/bravo_tier +/datum/engi_event/supermatter_event/bravo_tier threat_level = SM_EVENT_THREAT_B duration = 1 MINUTES -/datum/supermatter_event/bravo_tier/alert_engi() +/datum/engi_event/supermatter_event/bravo_tier/alert_engi() sm_radio_say("Anomalous crystal activity detected! Activity class: [name]. Operator intervention is required!") // more gas -/datum/supermatter_event/bravo_tier/gas_multiply +/datum/engi_event/supermatter_event/bravo_tier/gas_multiply name = "B-1" -/datum/supermatter_event/bravo_tier/gas_multiply/on_start() +/datum/engi_event/supermatter_event/bravo_tier/gas_multiply/on_start() supermatter.gas_multiplier = 3 -/datum/supermatter_event/bravo_tier/heat_multiplier +/datum/engi_event/supermatter_event/bravo_tier/heat_multiplier name = "B-2" -/datum/supermatter_event/bravo_tier/heat_multiplier/on_start() +/datum/engi_event/supermatter_event/bravo_tier/heat_multiplier/on_start() supermatter.heat_multiplier = 3 -/datum/supermatter_event/bravo_tier/power_additive +/datum/engi_event/supermatter_event/bravo_tier/power_additive name = "B-3" -/datum/supermatter_event/bravo_tier/power_additive/on_start() +/datum/engi_event/supermatter_event/bravo_tier/power_additive/on_start() supermatter.power += 3000 duration = 10 SECONDS //A class events -/datum/supermatter_event/alpha_tier +/datum/engi_event/supermatter_event/alpha_tier threat_level = SM_EVENT_THREAT_A duration = 10 SECONDS -/datum/supermatter_event/alpha_tier/alert_engi() +/datum/engi_event/supermatter_event/alpha_tier/alert_engi() sm_radio_say("ALERT: Critical anomalous crystal activity detected! Activity class: [name]. IMMEDIATE Operator intervention is REQUIRED!") -/datum/supermatter_event/alpha_tier/apc_short +/datum/engi_event/supermatter_event/alpha_tier/apc_short name = "A-1" -/datum/supermatter_event/alpha_tier/apc_short/on_start() +/datum/engi_event/supermatter_event/alpha_tier/apc_short/on_start() var/area/current_area = get_area(supermatter) var/obj/machinery/power/apc/A = current_area.get_apc() A.apc_short() -/datum/supermatter_event/alpha_tier/air_siphon +/datum/engi_event/supermatter_event/alpha_tier/air_siphon name = "A-2" -/datum/supermatter_event/alpha_tier/air_siphon/on_start() +/datum/engi_event/supermatter_event/alpha_tier/air_siphon/on_start() var/area/current_area = get_area(supermatter) for(var/obj/machinery/alarm/A in current_area) A.apply_mode(AALARM_MODE_OFF) -/datum/supermatter_event/alpha_tier/gas_multiplier +/datum/engi_event/supermatter_event/alpha_tier/gas_multiplier name = "A-3" duration = 2 MINUTES -/datum/supermatter_event/alpha_tier/gas_multiplier/on_start() +/datum/engi_event/supermatter_event/alpha_tier/gas_multiplier/on_start() supermatter.gas_multiplier = 4 // S-tier events are special. They are very dangerous, but give a 5 minute warning to the engis. -/datum/supermatter_event/sierra_tier +/datum/engi_event/supermatter_event/sierra_tier threat_level = SM_EVENT_THREAT_S duration = 7 MINUTES // 2 MINUTES of s-tier anomaly -/datum/supermatter_event/sierra_tier/alert_engi() +/datum/engi_event/supermatter_event/sierra_tier/alert_engi() general_radio_say("ALERT: Anomalous supermatter state expected in: 5 minutes.") sm_radio_say("EMERGENCY ALERT: 5 MINUTES UNTIL [supermatter] EXHIBITS [name] CLASS ANOMALOUS ACTIVITY!") -/datum/supermatter_event/sierra_tier/on_start() +/datum/engi_event/supermatter_event/sierra_tier/on_start() addtimer(CALLBACK(src, PROC_REF(start_sierra_event)), 5 MINUTES) supermatter.has_run_sclass = TRUE -/datum/supermatter_event/sierra_tier/proc/start_sierra_event() +/datum/engi_event/supermatter_event/sierra_tier/proc/start_sierra_event() general_radio_say("ALERT: ANOMALOUS SUPERMATTER STATE DETECTED!") sm_radio_say("EMERGENCY ALERT: Class [name] anomalous behavior in progress!") //S class events //Arc-type -/datum/supermatter_event/sierra_tier/arc +/datum/engi_event/supermatter_event/sierra_tier/arc name = "S-ARC" -/datum/supermatter_event/sierra_tier/arc/start_sierra_event() +/datum/engi_event/supermatter_event/sierra_tier/arc/start_sierra_event() ..() supermatter.power_additive = 6000 // Laminate type -/datum/supermatter_event/sierra_tier/laminate +/datum/engi_event/supermatter_event/sierra_tier/laminate name = "S-LAMINATE REJECTION" -/datum/supermatter_event/sierra_tier/laminate/start_sierra_event() +/datum/engi_event/supermatter_event/sierra_tier/laminate/start_sierra_event() ..() supermatter.heat_multiplier = 25 supermatter.gas_multiplier = 25 diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 794490a828dd..4fc90ba3d955 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -482,15 +482,15 @@ if(!prob((mining_power / (10 MW)) + (emagged * 5)))// Calculate prob of event based on mining power. Return if no event. return var/static/list/event_list = list( - /datum/bluespace_tap_event/dirty, - /datum/bluespace_tap_event/electric_arc, - /datum/bluespace_tap_event/radiation, - /datum/bluespace_tap_event/gas + /datum/engi_event/bluespace_tap_event/dirty, + /datum/engi_event/bluespace_tap_event/electric_arc, + /datum/engi_event/bluespace_tap_event/radiation, + /datum/engi_event/bluespace_tap_event/gas ) - var/datum/bluespace_tap_event/event = pick(event_list) + var/datum/engi_event/bluespace_tap_event/event = pick(event_list) run_event(event) -/obj/machinery/power/bluespace_tap/proc/run_event(datum/bluespace_tap_event/event) // mostly admin testing and stuff +/obj/machinery/power/bluespace_tap/proc/run_event(datum/engi_event/bluespace_tap_event/event) // mostly admin testing and stuff if(ispath(event)) event = new event(src) if(!istype(event)) diff --git a/code/modules/station_goals/bluespace_tap_events.dm b/code/modules/station_goals/bluespace_tap_events.dm index 812945f8eb12..f468931b6950 100644 --- a/code/modules/station_goals/bluespace_tap_events.dm +++ b/code/modules/station_goals/bluespace_tap_events.dm @@ -1,12 +1,9 @@ -/datum/bluespace_tap_event - var/name = "Unknown Anomaly (Report this to coders)" +/datum/engi_event/bluespace_tap_event + name = "Unknown Anomaly (Report this to coders)" var/obj/machinery/power/bluespace_tap/tap - /// Probability of the event not running, higher tiers being rarer - var/threat_level - var/duration var/turf/tap_turf -/datum/bluespace_tap_event/New(obj/machinery/power/bluespace_tap/_tap) +/datum/engi_event/bluespace_tap_event/New(obj/machinery/power/bluespace_tap/_tap) . = ..() tap = _tap tap_turf = get_turf(tap) @@ -17,25 +14,18 @@ stack_trace("a /datum/bluespace_tap_event was called with (name: [tap], type: [tap.type]) instead of a bluespace tap!") return -/datum/bluespace_tap_event/proc/start_event() - on_start() - alert_engi() +/datum/engi_event/bluespace_tap_event/start_event() tap.investigate_log("event [src] has been triggered", "bluespace_tap") - -/datum/bluespace_tap_event/proc/on_start() - return - -/datum/bluespace_tap_event/proc/alert_engi() - return + . = ..() // gas events -/datum/bluespace_tap_event/gas +/datum/engi_event/bluespace_tap_event/gas name = "Gas Event" -/datum/bluespace_tap_event/gas/alert_engi() +/datum/engi_event/bluespace_tap_event/gas/alert_engi() tap.radio.autosay("Bluespace harvester has released a class [src] gas pocket!", tap, "Engineering") -/datum/bluespace_tap_event/gas/on_start() +/datum/engi_event/bluespace_tap_event/gas/on_start() var/datum/gas_mixture/air = new() var/picked_gas = pick("N2O", "N2", "O2", "CO2", "Plasma", "Unknown") switch(picked_gas) @@ -62,13 +52,13 @@ tap_turf.blind_release_air(air) // dirty -/datum/bluespace_tap_event/dirty +/datum/engi_event/bluespace_tap_event/dirty name = "F-1" -/datum/bluespace_tap_event/dirty/alert_engi() +/datum/engi_event/bluespace_tap_event/dirty/alert_engi() tap.radio.autosay("Bluespace harvester has struck a congealed mass of filth!", tap, "Engineering") -/datum/bluespace_tap_event/dirty/on_start() +/datum/engi_event/bluespace_tap_event/dirty/on_start() tap.dirty = TRUE var/list/gunk = list("carbon","flour","blood") var/datum/reagents/R = new/datum/reagents(50) @@ -82,23 +72,23 @@ qdel(R) // radiation pulse -/datum/bluespace_tap_event/radiation +/datum/engi_event/bluespace_tap_event/radiation name = "R-1" -/datum/bluespace_tap_event/radiation/alert_engi() +/datum/engi_event/bluespace_tap_event/radiation/alert_engi() tap.radio.autosay("Bluespace harvester has released a spike of radiation!", tap, "Engineering") -/datum/bluespace_tap_event/radiation/on_start() +/datum/engi_event/bluespace_tap_event/radiation/on_start() radiation_pulse(tap, 3000, 7) // electrical arc -/datum/bluespace_tap_event/electric_arc +/datum/engi_event/bluespace_tap_event/electric_arc name = "E-1" -/datum/bluespace_tap_event/electric_arc/alert_engi() +/datum/engi_event/bluespace_tap_event/electric_arc/alert_engi() tap.radio.autosay("Class [src] power spike detected in bluespace harvester operation!", tap, "Engineering") -/datum/bluespace_tap_event/electric_arc/on_start() +/datum/engi_event/bluespace_tap_event/electric_arc/on_start() var/shock_type = pick("single", "mass") switch(shock_type) if("single") diff --git a/paradise.dme b/paradise.dme index b13be228000c..60acf6611004 100644 --- a/paradise.dme +++ b/paradise.dme @@ -2612,6 +2612,7 @@ #include "code\modules\power\engines\singularity\particle_accelerator\particle_control.dm" #include "code\modules\power\engines\singularity\particle_accelerator\particle_emitter.dm" #include "code\modules\power\engines\singularity\particle_accelerator\particle_power.dm" +#include "code\modules\power\engines\supermatter\engineering_event.dm" #include "code\modules\power\engines\supermatter\supermatter.dm" #include "code\modules\power\engines\supermatter\supermatter_event.dm" #include "code\modules\power\engines\tesla\coil.dm" From 103a8c645e40ceda9b9465a4dfe43b2a3bc58fdd Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sat, 23 Nov 2024 14:40:28 -0500 Subject: [PATCH 13/31] Motherlode spawn location optimization and turf selection --- code/modules/station_goals/bluespace_tap.dm | 23 +++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 4fc90ba3d955..bcd931307856 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -434,11 +434,30 @@ /obj/machinery/power/bluespace_tap/proc/produce_motherlode() // Announce lootsplosion radio.autosay("Power spike detected during Bluespace Harvester Operation. Large bluespace payload inbound.", name, "Engineering") + // Build location list cache once + var/list/possible_spawns = list() + var/list/random_spawns = GLOB.nukedisc_respawn + // Build list of spawn positions + for(var/turf/current_target_turf in view(3, src)) + possible_spawns.Add(current_target_turf) + // Spawn lootsplosion for(var/datum/data/bluespace_tap_product/product in product_list) for(var/i in 1 to 5) - spawn_item(product, find_spawn_location()) - spawn_item(product, find_spawn_location(random = TRUE)) + var/turf/spawn_location = pick_n_take(possible_spawns) + if(spawn_location.density) + var/list/open_turfs = spawn_location.AdjacentTurfs(open_only = TRUE) + if(length(open_turfs)) + spawn_location = pick(open_turfs) + spawn_item(product, spawn_location) + + spawn_location = pick(random_spawns) + spawn_location = pick(spawn_location.AdjacentTurfs(open_only = TRUE)) + if(spawn_location.density) + var/list/open_turfs = spawn_location.AdjacentTurfs(open_only = TRUE) + if(length(open_turfs)) + spawn_location = pick(open_turfs) + spawn_item(product, spawn_location) /obj/machinery/power/bluespace_tap/proc/find_spawn_location(random = FALSE) var/list/possible_spawns = list() From 2cf7ff6a7e8ee5294eef69feec941f663b6e65ac Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sat, 23 Nov 2024 15:14:37 -0500 Subject: [PATCH 14/31] More efficient rarity picking --- code/modules/station_goals/bluespace_tap.dm | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index bcd931307856..32c744a7347b 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -480,14 +480,12 @@ /obj/machinery/power/bluespace_tap/proc/spawn_item(datum/data/bluespace_tap_product/product, turf) if(!product) return - var/selected_rarity = pick(1, 10) - var/product_path = null - if(selected_rarity < 7) - product_path = product.product_path_common - if(selected_rarity < 10 && selected_rarity > 6) - product_path = product.product_path_uncommon - if(selected_rarity > 9) - product_path = product.product_path_rare + var/list/loot_rarities = list( + product.product_path_common = 60, + product.product_path_uncommon = 30, + product.product_path_rare = 10 + ) + var/obj/effect/spawner/lootdrop/bluespace_tap/product_path = pickweight(loot_rarities) var/obj/effect/portal/tap_portal = new /obj/effect/portal(turf, null, src, 10) tap_portal.name = "Bluespace Harvester Portal" playsound(src, 'sound/magic/blink.ogg', 50) From 10df2db69dafa7c43b86349f077c9505fc1b8738 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sat, 23 Nov 2024 16:34:10 -0500 Subject: [PATCH 15/31] Adjusted lootpool --- code/game/objects/items/stacks/sheets/mineral.dm | 7 +++++++ code/modules/station_goals/bluespace_tap_lootpools.dm | 11 +++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 386eca38fe64..b37109328304 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -393,6 +393,9 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( /obj/item/stack/sheet/mineral/bananium/ten amount = 10 +/obj/item/stack/sheet/mineral/bananium/thirty + amount = 30 + /obj/item/stack/sheet/mineral/bananium/fifty amount = 50 @@ -424,6 +427,10 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( /obj/item/stack/sheet/mineral/tranquillite/ten amount = 10 +/obj/item/stack/sheet/mineral/tranquillite/thirty + amount = 30 + + /obj/item/stack/sheet/mineral/tranquillite/fifty amount = 50 diff --git a/code/modules/station_goals/bluespace_tap_lootpools.dm b/code/modules/station_goals/bluespace_tap_lootpools.dm index 865f5cbb60b9..c0b14cc957b1 100644 --- a/code/modules/station_goals/bluespace_tap_lootpools.dm +++ b/code/modules/station_goals/bluespace_tap_lootpools.dm @@ -89,7 +89,7 @@ name = "common cultural artifacts" loot = list( /obj/item/grenade/clusterbuster/honk, - /obj/item/stack/sheet/mineral/abductor/fifty , + /obj/item/stack/sheet/mineral/abductor/fifty, /obj/item/toy/syndicateballoon, /obj/item/lighter/zippo/gonzofist, /obj/item/lighter/zippo/engraved, @@ -110,7 +110,9 @@ /obj/item/toy/foamblade, /obj/item/toy/redbutton, /obj/item/toy/figure/crew/ce, - /obj/item/toy/figure/crew/syndie + /obj/item/toy/figure/crew/syndie, + /obj/item/stack/sheet/mineral/tranquillite/thirty, + /obj/item/stack/sheet/mineral/bananium/thirty ) /obj/effect/spawner/lootdrop/bluespace_tap/cultural_uncommon @@ -121,10 +123,8 @@ /obj/item/gun/projectile/automatic/toy/pistol/enforcer, /obj/item/bedsheet/syndie, /obj/item/bedsheet/wiz, - /obj/item/stack/sheet/mineral/tranquillite/fifty, /obj/item/clothing/gloves/combat, /obj/item/blank_tarot_card, - /obj/item/tarot_card_pack, /obj/item/storage/box/syndie_kit/space, /obj/item/wrench/brass, /obj/item/crowbar/brass, @@ -140,8 +140,7 @@ /obj/item/gun/projectile/automatic/l6_saw/toy, /obj/item/gun/projectile/automatic/sniper_rifle/toy, /obj/item/bedsheet/centcom, - /obj/item/tarot_card_pack/jumbo, - /obj/item/tarot_card_pack/mega, + /obj/item/tarot_card_pack, /obj/item/clothing/mask/holo_cigar, /obj/item/melee/baseball_bat/homerun, /obj/item/mod/module/dispenser, From 1eafb95ecc7bfb1c8e2d11a9e8d85a970900f26d Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sat, 23 Nov 2024 20:05:47 -0500 Subject: [PATCH 16/31] Adjusted ruins that use BSH loot pools --- _maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm | 8 ++++---- .../RandomRuins/SpaceRuins/telecomns_returns.dmm | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm index 843c105b7498..7a1905dd3ac7 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm @@ -1281,7 +1281,7 @@ /area/ruin/space/deepstorage) "gq" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/bluespace_tap/cultural, +/obj/effect/spawner/lootdrop/bluespace_tap/cultural_rare, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "vault" @@ -2665,7 +2665,7 @@ /obj/item/salvage/ruin/soviet, /obj/structure/rack, /obj/item/stack/spacecash/c500, -/obj/effect/spawner/lootdrop/bluespace_tap/cultural, +/obj/effect/spawner/lootdrop/bluespace_tap/cultural_rare, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "vault" @@ -2675,7 +2675,7 @@ /obj/structure/rack, /obj/effect/turf_decal/delivery/hollow, /obj/item/stack/spacecash/c500, -/obj/effect/spawner/lootdrop/bluespace_tap/organic, +/obj/effect/spawner/lootdrop/bluespace_tap/organic_rare, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "vault" @@ -5480,7 +5480,7 @@ "IR" = ( /obj/effect/turf_decal/delivery/hollow, /obj/structure/rack, -/obj/effect/spawner/lootdrop/bluespace_tap/organic, +/obj/effect/spawner/lootdrop/bluespace_tap/organic_rare, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "vault" diff --git a/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm b/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm index cbcef47c0344..09d059a76db9 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm @@ -670,7 +670,7 @@ /area/space/nearstation/no_teleport) "mD" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/bluespace_tap/organic, +/obj/effect/spawner/lootdrop/bluespace_tap/organic_rare, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) "mH" = ( @@ -788,7 +788,7 @@ pixel_x = 32; pixel_y = 0 }, -/obj/effect/spawner/lootdrop/bluespace_tap/cultural, +/obj/effect/spawner/lootdrop/bluespace_tap/cultural_rare, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) "oe" = ( @@ -2745,7 +2745,7 @@ /area/ruin/space/telecomms/tele) "Qg" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/bluespace_tap/cultural, +/obj/effect/spawner/lootdrop/bluespace_tap/cultural_uncommon, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) "Qx" = ( From dac1581338240e289a80039c925e1b8f0ab2e26a Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sun, 24 Nov 2024 01:34:08 -0500 Subject: [PATCH 17/31] Excess Spacing Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com> Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> --- code/game/objects/items/stacks/sheets/mineral.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index b37109328304..da4ed2645ca3 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -430,7 +430,6 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( /obj/item/stack/sheet/mineral/tranquillite/thirty amount = 30 - /obj/item/stack/sheet/mineral/tranquillite/fifty amount = 50 From 6934190e01e7785fa72f768c7453ce221d6f7465 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sun, 24 Nov 2024 01:34:19 -0500 Subject: [PATCH 18/31] Comment Format Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com> Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> --- code/modules/station_goals/bluespace_tap.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 32c744a7347b..58263695b9c3 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -496,7 +496,7 @@ /obj/machinery/power/bluespace_tap/proc/try_events() if(!mining_power) return - if(!prob((mining_power / (10 MW)) + (emagged * 5)))// Calculate prob of event based on mining power. Return if no event. + if(!prob((mining_power / (10 MW)) + (emagged * 5))) // Calculate prob of event based on mining power. Return if no event. return var/static/list/event_list = list( /datum/engi_event/bluespace_tap_event/dirty, From 7dea0640466f601390c33c9c0c3d54f0c2729ac6 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sun, 24 Nov 2024 01:34:28 -0500 Subject: [PATCH 19/31] Comment Format Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com> Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> --- code/modules/station_goals/bluespace_tap.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 58263695b9c3..89873d2457ef 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -526,7 +526,7 @@ set_power(text2num(params["set_power"])) if("vend")//it's not really vending as producing, but eh var/key = text2num(params["target"]) - if(key <= 0 || key > length(product_list)) //invalid key + if(key <= 0 || key > length(product_list)) // invalid key return produce(product_list[key], TRUE, TRUE) if("auto_shutdown") From eca41479792094bbea65dbdd9c1210de35e0a417 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sun, 24 Nov 2024 01:40:06 -0500 Subject: [PATCH 20/31] Lootpool comments --- .../station_goals/bluespace_tap_lootpools.dm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/code/modules/station_goals/bluespace_tap_lootpools.dm b/code/modules/station_goals/bluespace_tap_lootpools.dm index c0b14cc957b1..e6f2ddda245b 100644 --- a/code/modules/station_goals/bluespace_tap_lootpools.dm +++ b/code/modules/station_goals/bluespace_tap_lootpools.dm @@ -2,6 +2,7 @@ name = "bluespace harvester reward spawner" lootcount = 1 +// Common clothing pool /obj/effect/spawner/lootdrop/bluespace_tap/clothes_common name = "exotic common clothing" loot = list( @@ -34,6 +35,7 @@ /obj/item/clothing/under/costume/psyjump ) +// Uncommon Clothing Pool /obj/effect/spawner/lootdrop/bluespace_tap/clothes_uncommon name = "exotic uncommon clothing" loot = list( @@ -63,7 +65,7 @@ /obj/item/clothing/head/helmet/alt ) - +// Rare clothing pool /obj/effect/spawner/lootdrop/bluespace_tap/clothes_rare name = "exotic rare clothing" loot = list( @@ -84,7 +86,7 @@ /obj/item/mod/control/pre_equipped/cosmohonk ) - +// Common cultural pool /obj/effect/spawner/lootdrop/bluespace_tap/cultural_common name = "common cultural artifacts" loot = list( @@ -115,6 +117,7 @@ /obj/item/stack/sheet/mineral/bananium/thirty ) +// Uncommon cultural pool /obj/effect/spawner/lootdrop/bluespace_tap/cultural_uncommon name = "uncommon cultural artifacts" loot = list( @@ -133,6 +136,7 @@ /obj/item/wirecutters/brass ) +// Rare cultural pool /obj/effect/spawner/lootdrop/bluespace_tap/cultural_rare name = "rare cultural artifacts" loot = list( @@ -148,6 +152,7 @@ /obj/item/storage/belt/utility/brass ) +// Common organic pool /obj/effect/spawner/lootdrop/bluespace_tap/organic_common name = "common organic objects" loot = list( @@ -169,6 +174,7 @@ /obj/item/reagent_containers/glass/bottle/reagent/lazarus_reagent ) +// Uncommon organic pool /obj/effect/spawner/lootdrop/bluespace_tap/organic_uncommon name = "uncommon organic objects" loot = list( @@ -187,6 +193,7 @@ /obj/item/slimepotion/oil_slick ) +// Rare organic pool /obj/effect/spawner/lootdrop/bluespace_tap/organic_rare name = "rare organic objects" loot = list( @@ -199,6 +206,7 @@ /obj/item/slimepotion/transference ) +// Common food pool /obj/effect/spawner/lootdrop/bluespace_tap/food_common name = "common fancy food" lootcount = 1 @@ -234,6 +242,7 @@ /obj/item/food/waffles ) +// Uncommon food pool /obj/effect/spawner/lootdrop/bluespace_tap/food_uncommon name = "uncommon fancy food" lootcount = 1 @@ -267,6 +276,7 @@ /obj/item/food/rofflewaffles ) +// Rare food pool /obj/effect/spawner/lootdrop/bluespace_tap/food_rare name = "rare fancy food" lootcount = 1 From 593e85672efac05ce1e48483ba9c5e69aa0a8044 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sun, 24 Nov 2024 17:10:57 -0500 Subject: [PATCH 21/31] Made syndie donk rare --- code/modules/station_goals/bluespace_tap_lootpools.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/station_goals/bluespace_tap_lootpools.dm b/code/modules/station_goals/bluespace_tap_lootpools.dm index e6f2ddda245b..bd13c67e3710 100644 --- a/code/modules/station_goals/bluespace_tap_lootpools.dm +++ b/code/modules/station_goals/bluespace_tap_lootpools.dm @@ -256,7 +256,6 @@ /obj/item/food/xemeatpie, /obj/item/food/sliceable/pumpkinpie, /obj/item/food/donut/chaos, - /obj/item/food/syndidonkpocket, /obj/item/pizzabox/meat, /obj/item/pizzabox/pepperoni, /obj/item/pizzabox/firecracker, @@ -293,5 +292,6 @@ /obj/item/food/notasandwich, /obj/item/storage/box/papersack/pbj_lunch, /obj/item/food/soylentviridians, + /obj/item/food/syndidonkpocket, /obj/item/food/baguette/combat ) From fa53cbf33c960b29c9ef7eb3b7da09baa5247184 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Fri, 6 Dec 2024 18:03:09 -0500 Subject: [PATCH 22/31] Migrated lootpools --- .../spawners/random/bluespace_tap_spawners.dm | 328 ++++++++++++++---- code/modules/station_goals/bluespace_tap.dm | 26 +- .../station_goals/bluespace_tap_lootpools.dm | 297 ---------------- paradise.dme | 1 - 4 files changed, 264 insertions(+), 388 deletions(-) delete mode 100644 code/modules/station_goals/bluespace_tap_lootpools.dm diff --git a/code/game/objects/effects/spawners/random/bluespace_tap_spawners.dm b/code/game/objects/effects/spawners/random/bluespace_tap_spawners.dm index a2ca9fce872d..77f011d04ab9 100644 --- a/code/game/objects/effects/spawners/random/bluespace_tap_spawners.dm +++ b/code/game/objects/effects/spawners/random/bluespace_tap_spawners.dm @@ -2,10 +2,11 @@ name = "bluespace harvester reward spawner" spawn_loot_count = 1 -/obj/effect/spawner/random/bluespace_tap/hat - name = "exotic hat" +// Common clothing pool +/obj/effect/spawner/random/bluespace_tap/clothes_common + name = "exotic common clothing" loot = list( - /obj/item/clothing/head/collectable/chef, //same weighing on all of them + /obj/item/clothing/head/collectable/chef, /obj/item/clothing/head/collectable/paper, /obj/item/clothing/head/collectable/tophat, /obj/item/clothing/head/collectable/captain, @@ -13,9 +14,7 @@ /obj/item/clothing/head/collectable/welding, /obj/item/clothing/head/collectable/flatcap, /obj/item/clothing/head/collectable/pirate, - /obj/item/clothing/head/collectable/kitty, /obj/item/clothing/head/crown/fancy, - /obj/item/clothing/head/collectable/rabbitears, /obj/item/clothing/head/collectable/wizard, /obj/item/clothing/head/collectable/hardhat, /obj/item/clothing/head/collectable/hos, @@ -25,90 +24,198 @@ /obj/item/clothing/head/collectable/police, /obj/item/clothing/head/collectable/slime, /obj/item/clothing/head/collectable/xenom, - /obj/item/clothing/head/collectable/petehat + /obj/item/clothing/head/collectable/petehat, + /obj/item/clothing/under/retro/medical, + /obj/item/clothing/under/retro/engineering, + /obj/item/clothing/under/retro/science, + /obj/item/clothing/under/retro/security, + /obj/item/clothing/under/costume/captain_fly, + /obj/item/clothing/under/costume/mankini, + /obj/item/clothing/under/costume/janimaid, + /obj/item/clothing/under/costume/psyjump + ) + +// Uncommon Clothing Pool +/obj/effect/spawner/random/bluespace_tap/clothes_uncommon + name = "exotic uncommon clothing" + loot = list( + /obj/item/clothing/head/collectable/kitty, + /obj/item/clothing/head/collectable/rabbitears, + /obj/item/clothing/suit/armor/vest, + /obj/item/clothing/suit/armor/vest/bloody, + /obj/item/clothing/suit/armor/riot, + /obj/item/clothing/suit/armor/riot/knight, + /obj/item/clothing/suit/armor/vest/durathread, + /obj/item/clothing/suit/armor/bulletproof, + /obj/item/clothing/suit/storage/iaa/blackjacket/armored, + /obj/item/clothing/suit/hooded/goliath, + /obj/item/clothing/suit/armor/bone, + /obj/item/clothing/under/chameleon, + /obj/item/clothing/glasses/chameleon, + /obj/item/clothing/gloves/chameleon, + /obj/item/clothing/head/chameleon, + /obj/item/clothing/mask/chameleon, + /obj/item/clothing/mask/chameleon/voice_change, + /obj/item/clothing/shoes/chameleon, + /obj/item/clothing/shoes/chameleon/noslip, + /obj/item/storage/belt/chameleon, + /obj/item/clothing/head/helmet, + /obj/item/clothing/head/helmet/riot, + /obj/item/clothing/head/helmet/riot/knight, + /obj/item/clothing/head/helmet/alt + ) + +// Rare clothing pool +/obj/effect/spawner/random/bluespace_tap/clothes_rare + name = "exotic rare clothing" + loot = list( + /obj/item/clothing/suit/armor/swat, + /obj/item/clothing/suit/armor/laserproof, + /obj/item/clothing/suit/hooded/drake, + /obj/item/clothing/glasses/chameleon/night, + /obj/item/clothing/head/helmet/meson, + /obj/item/clothing/head/helmet/justice, + /obj/item/clothing/head/helmet/swat, + /obj/item/mod/control/pre_equipped/standard, + /obj/item/mod/control/pre_equipped/engineering, + /obj/item/mod/control/pre_equipped/atmospheric, + /obj/item/mod/control/pre_equipped/loader, + /obj/item/mod/control/pre_equipped/mining, + /obj/item/mod/control/pre_equipped/rescue, + /obj/item/mod/control/pre_equipped/security, + /obj/item/mod/control/pre_equipped/cosmohonk + ) + +// Common cultural pool +/obj/effect/spawner/random/bluespace_tap/cultural_common + name = "common cultural artifacts" + loot = list( + /obj/item/grenade/clusterbuster/honk, + /obj/item/stack/sheet/mineral/abductor/fifty, + /obj/item/toy/syndicateballoon, + /obj/item/lighter/zippo/gonzofist, + /obj/item/lighter/zippo/engraved, + /obj/item/gun/projectile/automatic/toy/pistol, + /obj/item/gun/projectile/shotgun/toy, + /obj/item/gun/projectile/shotgun/toy/crossbow, + /obj/item/gun/projectile/shotgun/toy/tommygun, + /obj/machinery/snow_machine, + /obj/item/clothing/head/kitty, + /obj/item/coin/antagtoken, + /obj/item/bedsheet/patriot, + /obj/item/bedsheet/rainbow, + /obj/item/bedsheet/captain, + /obj/item/bikehorn/golden, + /obj/item/salvage/ruin/brick, + /obj/item/toy/sword, + /obj/item/toy/windup_toolbox, + /obj/item/toy/foamblade, + /obj/item/toy/redbutton, + /obj/item/toy/figure/crew/ce, + /obj/item/toy/figure/crew/syndie, + /obj/item/stack/sheet/mineral/tranquillite/thirty, + /obj/item/stack/sheet/mineral/bananium/thirty + ) + +// Uncommon cultural pool +/obj/effect/spawner/random/bluespace_tap/cultural_uncommon + name = "uncommon cultural artifacts" + loot = list( + /obj/item/gun/projectile/automatic/c20r/toy, + /obj/item/dualsaber/toy, + /obj/item/gun/projectile/automatic/toy/pistol/enforcer, + /obj/item/bedsheet/syndie, + /obj/item/bedsheet/wiz, + /obj/item/clothing/gloves/combat, + /obj/item/blank_tarot_card, + /obj/item/storage/box/syndie_kit/space, + /obj/item/wrench/brass, + /obj/item/crowbar/brass, + /obj/item/screwdriver/brass, + /obj/item/weldingtool/experimental/brass, + /obj/item/wirecutters/brass + ) + +// Rare cultural pool +/obj/effect/spawner/random/bluespace_tap/cultural_rare + name = "rare cultural artifacts" + loot = list( + /obj/vehicle/space/speedbike/red, + /obj/item/gun/projectile/automatic/l6_saw/toy, + /obj/item/gun/projectile/automatic/sniper_rifle/toy, + /obj/item/bedsheet/centcom, + /obj/item/tarot_card_pack, + /obj/item/clothing/mask/holo_cigar, + /obj/item/melee/baseball_bat/homerun, + /obj/item/mod/module/dispenser, + /obj/item/storage/box/enforcer_rubber, + /obj/item/storage/belt/utility/brass ) +// Common organic pool +/obj/effect/spawner/random/bluespace_tap/organic_common + name = "common organic objects" + loot = list( + /obj/item/soap/syndie, + /obj/item/dnainjector/telemut, + /obj/item/dnainjector/small_size, + /obj/item/dnainjector/morph, + /obj/item/dnainjector/regenerate, + /obj/item/dnainjector/firemut, + /obj/item/dnainjector/nobreath, + /obj/item/dnainjector/remoteview, + /obj/item/dnainjector/insulation, + /obj/item/dnainjector/eatmut, + /obj/item/dnainjector/noprints, + /obj/item/dnainjector/comic, + /obj/item/seeds/random/labelled, + /obj/item/organ/internal/regenerative_core, + /obj/item/reagent_containers/glass/bottle/reagent/omnizine, + /obj/item/reagent_containers/glass/bottle/reagent/lazarus_reagent + ) -/obj/effect/spawner/random/bluespace_tap/cultural - name = "cultural artifacts" +// Uncommon organic pool +/obj/effect/spawner/random/bluespace_tap/organic_uncommon + name = "uncommon organic objects" loot = list( - /obj/vehicle/space/speedbike/red = 10, - /obj/item/grenade/clusterbuster/honk = 10, - /obj/item/toy/katana = 10, - /obj/item/stack/tile/brass/fifty = 20, - /obj/item/stack/sheet/mineral/abductor/fifty = 20, - /obj/item/sord = 20, - /obj/item/toy/syndicateballoon = 15, - /obj/item/lighter/zippo/gonzofist = 5, - /obj/item/lighter/zippo/engraved = 5, - /obj/item/lighter/zippo/nt_rep = 5, - /obj/item/gun/projectile/automatic/c20r/toy = 1, - /obj/item/gun/projectile/automatic/l6_saw/toy = 1, - /obj/item/gun/projectile/automatic/toy/pistol = 2, - /obj/item/gun/projectile/automatic/toy/pistol/enforcer = 1, - /obj/item/gun/projectile/shotgun/toy = 1, - /obj/item/gun/projectile/shotgun/toy/crossbow = 1, - /obj/item/gun/projectile/shotgun/toy/tommygun = 1, - /obj/item/gun/projectile/automatic/sniper_rifle/toy = 1, - /obj/item/dualsaber/toy = 5, - /obj/machinery/snow_machine = 10, - /obj/item/clothing/head/kitty = 5, - /obj/item/coin/antagtoken = 5, - /obj/item/toy/prizeball/figure = 15, - /obj/item/toy/prizeball/therapy = 10, - /obj/item/bedsheet/patriot = 2, - /obj/item/bedsheet/rainbow = 2, - /obj/item/bedsheet/captain = 2, - /obj/item/bedsheet/centcom = 1, //mythic rare rarity - /obj/item/bedsheet/syndie = 2, - /obj/item/bedsheet/cult = 2, - /obj/item/bedsheet/wiz = 2, - /obj/item/stack/sheet/mineral/tranquillite/fifty = 3, - /obj/item/clothing/gloves/combat = 5, - /obj/item/blank_tarot_card = 5, - /obj/item/tarot_card_pack = 5, - /obj/item/tarot_card_pack/jumbo = 3, - /obj/item/tarot_card_pack/mega = 2 + /obj/item/storage/pill_bottle/random_meds/labelled, + /obj/item/dnainjector/hulkmut, + /obj/item/organ/internal/alien/plasmavessel, + /obj/item/organ/internal/alien/acidgland, + /obj/item/organ/internal/alien/hivenode, + /obj/item/organ/internal/alien/neurotoxin, + /obj/item/organ/internal/alien/resinspinner, + /obj/item/organ/internal/alien/eggsac, + /obj/item/organ/internal/heart/gland/heals, + /obj/item/organ/internal/heart/gland/ventcrawling, + /obj/item/organ/internal/heart/gland/egg, + /obj/item/slimepotion/fireproof, + /obj/item/slimepotion/oil_slick ) -/obj/effect/spawner/random/bluespace_tap/organic - name = "organic objects" +// Rare organic pool +/obj/effect/spawner/random/bluespace_tap/organic_rare + name = "rare organic objects" loot = list( - /obj/item/seeds/random/labelled = 50, - /obj/item/guardiancreator/biological = 5, - /obj/item/organ/internal/vocal_cords/adamantine = 15, - /obj/item/storage/pill_bottle/random_meds/labelled = 25, - /obj/item/reagent_containers/glass/bottle/reagent/omnizine = 15, - /obj/item/dnainjector/telemut = 5, - /obj/item/dnainjector/small_size = 5, - /obj/item/dnainjector/morph = 5, - /obj/item/dnainjector/regenerate = 5, - /mob/living/simple_animal/pet/dog/corgi/ = 5, - /mob/living/simple_animal/pet/cat = 5, - /mob/living/simple_animal/pet/dog/fox/ = 5, - /mob/living/simple_animal/pet/penguin/baby = 5, - /mob/living/simple_animal/pig = 5, - /obj/item/slimepotion/sentience = 5, - /obj/item/clothing/mask/cigarette/cigar/havana = 3, - /obj/item/stack/sheet/mineral/bananium/fifty = 2, //bananas are organic, clearly. - /obj/item/storage/box/monkeycubes = 5, - /obj/item/stack/tile/carpet/twenty = 10, - /obj/item/stack/tile/carpet/black/twenty = 10, - /obj/item/soap/deluxe = 5 + /obj/item/guardiancreator/biological, + /obj/item/organ/internal/vocal_cords/adamantine, + /obj/item/food/grown/shell/gatfruit, + /obj/item/food/grown/cherry_bomb, + /obj/item/bio_chip_implanter/storage, + /obj/item/slimepotion/sentience, + /obj/item/slimepotion/transference ) -/obj/effect/spawner/random/bluespace_tap/food - name = "fancy food" - spawn_loot_count = 3 +// Common food pool +/obj/effect/spawner/random/bluespace_tap/food_common + name = "common fancy food" + spawn_loot_count = 1 loot = list( /obj/item/food/wingfangchu, /obj/item/food/hotdog, - /obj/item/food/sliceable/turkey, + /obj/item/food/cookie, /obj/item/food/plumphelmetbiscuit, /obj/item/food/appletart, - /obj/item/food/sliceable/cheesecake, - /obj/item/food/sliceable/bananacake, - /obj/item/food/sliceable/chocolatecake, /obj/item/food/soup/meatballsoup, /obj/item/food/soup/mysterysoup, /obj/item/food/soup/stew, @@ -118,6 +225,73 @@ /obj/item/food/cubancarp, /obj/item/food/fishandchips, /obj/item/food/meatpie, - /obj/item/pizzabox/hawaiian, //it ONLY gives hawaiian. MUHAHAHA - /obj/item/food/sliceable/xenomeatbread //maybe add some dangerous/special food here, ie robobuger? + /obj/item/pizzabox/hawaiian, + /obj/item/food/fortunecookie, + /obj/item/food/sugarcookie, + /obj/item/food/pie, + /obj/item/food/donut/sprinkles, + /obj/item/food/chinese/rice, + /obj/item/food/pancake, + /obj/item/food/chawanmushi, + /obj/item/food/syntikebab, + /obj/item/food/salad/citrusdelight, + /obj/item/food/donkpocket, + /obj/item/food/onionrings, + /obj/item/food/tatortot, + /obj/item/food/stuffing, + /obj/item/food/waffles + ) + +// Uncommon food pool +/obj/effect/spawner/random/bluespace_tap/food_uncommon + name = "uncommon fancy food" + spawn_loot_count = 1 + loot = list( + /obj/item/food/sliceable/cheesecake, + /obj/item/food/sliceable/bananacake, + /obj/item/food/sliceable/chocolatecake, + /obj/item/food/sliceable/turkey, + /obj/item/food/sliceable/xenomeatbread, + /obj/item/food/amanita_pie, + /obj/item/food/xemeatpie, + /obj/item/food/sliceable/pumpkinpie, + /obj/item/food/donut/chaos, + /obj/item/pizzabox/meat, + /obj/item/pizzabox/pepperoni, + /obj/item/pizzabox/firecracker, + /obj/item/pizzabox/garlic, + /obj/item/food/burger/xeno, + /obj/item/food/burger/spell, + /obj/item/food/burger/superbite, + /obj/item/food/burger/crazy, + /obj/item/food/burger/ppatty/white, + /obj/item/food/burger/ppatty/red, + /obj/item/food/burger/ppatty/orange, + /obj/item/food/burger/ppatty/yellow, + /obj/item/food/burger/ppatty/green, + /obj/item/food/burger/ppatty/blue, + /obj/item/food/burger/ppatty/purple, + /obj/item/food/baguette, + /obj/item/food/rofflewaffles + ) + +// Rare food pool +/obj/effect/spawner/random/bluespace_tap/food_rare + name = "rare fancy food" + spawn_loot_count = 1 + loot = list( + /obj/item/food/monkeysdelight, + /obj/item/food/dionaroast, + /obj/item/food/boiledslimecore, + /obj/item/food/burger/brain, + /obj/item/food/liquidfood, + /obj/item/food/burger/ghost, + /obj/item/food/burger/hamborger, + /obj/item/food/burger/ppatty/rainbow, + /obj/item/food/burger/elec, + /obj/item/food/notasandwich, + /obj/item/storage/box/papersack/pbj_lunch, + /obj/item/food/soylentviridians, + /obj/item/food/syndidonkpocket, + /obj/item/food/baguette/combat ) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 89873d2457ef..0ac80c400b1f 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -84,24 +84,24 @@ /// list of possible products var/static/product_list = list( new /datum/data/bluespace_tap_product("Unknown Exotic Clothing", - /obj/effect/spawner/lootdrop/bluespace_tap/clothes_common, - /obj/effect/spawner/lootdrop/bluespace_tap/clothes_uncommon, - /obj/effect/spawner/lootdrop/bluespace_tap/clothes_rare, + /obj/effect/spawner/random/bluespace_tap/clothes_common, + /obj/effect/spawner/random/bluespace_tap/clothes_uncommon, + /obj/effect/spawner/random/bluespace_tap/clothes_rare, 5000), new /datum/data/bluespace_tap_product("Unknown Food", - /obj/effect/spawner/lootdrop/bluespace_tap/food_common, - /obj/effect/spawner/lootdrop/bluespace_tap/food_uncommon, - /obj/effect/spawner/lootdrop/bluespace_tap/food_rare, + /obj/effect/spawner/random/bluespace_tap/food_common, + /obj/effect/spawner/random/bluespace_tap/food_uncommon, + /obj/effect/spawner/random/bluespace_tap/food_rare, 6000), new /datum/data/bluespace_tap_product("Unknown Cultural Artifact", - /obj/effect/spawner/lootdrop/bluespace_tap/cultural_common, - /obj/effect/spawner/lootdrop/bluespace_tap/cultural_uncommon, - /obj/effect/spawner/lootdrop/bluespace_tap/cultural_rare, + /obj/effect/spawner/random/bluespace_tap/cultural_common, + /obj/effect/spawner/random/bluespace_tap/cultural_uncommon, + /obj/effect/spawner/random/bluespace_tap/cultural_rare, 15000), new /datum/data/bluespace_tap_product("Unknown Biological Artifact", - /obj/effect/spawner/lootdrop/bluespace_tap/organic_common, - /obj/effect/spawner/lootdrop/bluespace_tap/organic_uncommon, - /obj/effect/spawner/lootdrop/bluespace_tap/organic_rare, + /obj/effect/spawner/random/bluespace_tap/organic_common, + /obj/effect/spawner/random/bluespace_tap/organic_uncommon, + /obj/effect/spawner/random/bluespace_tap/organic_rare, 20000) ) @@ -485,7 +485,7 @@ product.product_path_uncommon = 30, product.product_path_rare = 10 ) - var/obj/effect/spawner/lootdrop/bluespace_tap/product_path = pickweight(loot_rarities) + var/obj/effect/spawner/random/bluespace_tap/product_path = pickweight(loot_rarities) var/obj/effect/portal/tap_portal = new /obj/effect/portal(turf, null, src, 10) tap_portal.name = "Bluespace Harvester Portal" playsound(src, 'sound/magic/blink.ogg', 50) diff --git a/code/modules/station_goals/bluespace_tap_lootpools.dm b/code/modules/station_goals/bluespace_tap_lootpools.dm deleted file mode 100644 index bd13c67e3710..000000000000 --- a/code/modules/station_goals/bluespace_tap_lootpools.dm +++ /dev/null @@ -1,297 +0,0 @@ -/obj/effect/spawner/lootdrop/bluespace_tap - name = "bluespace harvester reward spawner" - lootcount = 1 - -// Common clothing pool -/obj/effect/spawner/lootdrop/bluespace_tap/clothes_common - name = "exotic common clothing" - loot = list( - /obj/item/clothing/head/collectable/chef, - /obj/item/clothing/head/collectable/paper, - /obj/item/clothing/head/collectable/tophat, - /obj/item/clothing/head/collectable/captain, - /obj/item/clothing/head/collectable/beret, - /obj/item/clothing/head/collectable/welding, - /obj/item/clothing/head/collectable/flatcap, - /obj/item/clothing/head/collectable/pirate, - /obj/item/clothing/head/crown/fancy, - /obj/item/clothing/head/collectable/wizard, - /obj/item/clothing/head/collectable/hardhat, - /obj/item/clothing/head/collectable/HoS, - /obj/item/clothing/head/collectable/thunderdome, - /obj/item/clothing/head/collectable/swat, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/police, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/xenom, - /obj/item/clothing/head/collectable/petehat, - /obj/item/clothing/under/retro/medical, - /obj/item/clothing/under/retro/engineering, - /obj/item/clothing/under/retro/science, - /obj/item/clothing/under/retro/security, - /obj/item/clothing/under/costume/captain_fly, - /obj/item/clothing/under/costume/mankini, - /obj/item/clothing/under/costume/janimaid, - /obj/item/clothing/under/costume/psyjump - ) - -// Uncommon Clothing Pool -/obj/effect/spawner/lootdrop/bluespace_tap/clothes_uncommon - name = "exotic uncommon clothing" - loot = list( - /obj/item/clothing/head/collectable/kitty, - /obj/item/clothing/head/collectable/rabbitears, - /obj/item/clothing/suit/armor/vest, - /obj/item/clothing/suit/armor/vest/bloody, - /obj/item/clothing/suit/armor/riot, - /obj/item/clothing/suit/armor/riot/knight, - /obj/item/clothing/suit/armor/vest/durathread, - /obj/item/clothing/suit/armor/bulletproof, - /obj/item/clothing/suit/storage/iaa/blackjacket/armored, - /obj/item/clothing/suit/hooded/goliath, - /obj/item/clothing/suit/armor/bone, - /obj/item/clothing/under/chameleon, - /obj/item/clothing/glasses/chameleon, - /obj/item/clothing/gloves/chameleon, - /obj/item/clothing/head/chameleon, - /obj/item/clothing/mask/chameleon, - /obj/item/clothing/mask/chameleon/voice_change, - /obj/item/clothing/shoes/chameleon, - /obj/item/clothing/shoes/chameleon/noslip, - /obj/item/storage/belt/chameleon, - /obj/item/clothing/head/helmet, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/head/helmet/riot/knight, - /obj/item/clothing/head/helmet/alt - ) - -// Rare clothing pool -/obj/effect/spawner/lootdrop/bluespace_tap/clothes_rare - name = "exotic rare clothing" - loot = list( - /obj/item/clothing/suit/armor/swat, - /obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/hooded/drake, - /obj/item/clothing/glasses/chameleon/night, - /obj/item/clothing/head/helmet/meson, - /obj/item/clothing/head/helmet/justice, - /obj/item/clothing/head/helmet/swat, - /obj/item/mod/control/pre_equipped/standard, - /obj/item/mod/control/pre_equipped/engineering, - /obj/item/mod/control/pre_equipped/atmospheric, - /obj/item/mod/control/pre_equipped/loader, - /obj/item/mod/control/pre_equipped/mining, - /obj/item/mod/control/pre_equipped/rescue, - /obj/item/mod/control/pre_equipped/security, - /obj/item/mod/control/pre_equipped/cosmohonk - ) - -// Common cultural pool -/obj/effect/spawner/lootdrop/bluespace_tap/cultural_common - name = "common cultural artifacts" - loot = list( - /obj/item/grenade/clusterbuster/honk, - /obj/item/stack/sheet/mineral/abductor/fifty, - /obj/item/toy/syndicateballoon, - /obj/item/lighter/zippo/gonzofist, - /obj/item/lighter/zippo/engraved, - /obj/item/gun/projectile/automatic/toy/pistol, - /obj/item/gun/projectile/shotgun/toy, - /obj/item/gun/projectile/shotgun/toy/crossbow, - /obj/item/gun/projectile/shotgun/toy/tommygun, - /obj/machinery/snow_machine, - /obj/item/clothing/head/kitty, - /obj/item/coin/antagtoken, - /obj/item/bedsheet/patriot, - /obj/item/bedsheet/rainbow, - /obj/item/bedsheet/captain, - /obj/item/bikehorn/golden, - /obj/item/salvage/ruin/brick, - /obj/item/toy/sword, - /obj/item/toy/windup_toolbox, - /obj/item/toy/foamblade, - /obj/item/toy/redbutton, - /obj/item/toy/figure/crew/ce, - /obj/item/toy/figure/crew/syndie, - /obj/item/stack/sheet/mineral/tranquillite/thirty, - /obj/item/stack/sheet/mineral/bananium/thirty - ) - -// Uncommon cultural pool -/obj/effect/spawner/lootdrop/bluespace_tap/cultural_uncommon - name = "uncommon cultural artifacts" - loot = list( - /obj/item/gun/projectile/automatic/c20r/toy, - /obj/item/dualsaber/toy, - /obj/item/gun/projectile/automatic/toy/pistol/enforcer, - /obj/item/bedsheet/syndie, - /obj/item/bedsheet/wiz, - /obj/item/clothing/gloves/combat, - /obj/item/blank_tarot_card, - /obj/item/storage/box/syndie_kit/space, - /obj/item/wrench/brass, - /obj/item/crowbar/brass, - /obj/item/screwdriver/brass, - /obj/item/weldingtool/experimental/brass, - /obj/item/wirecutters/brass - ) - -// Rare cultural pool -/obj/effect/spawner/lootdrop/bluespace_tap/cultural_rare - name = "rare cultural artifacts" - loot = list( - /obj/vehicle/space/speedbike/red, - /obj/item/gun/projectile/automatic/l6_saw/toy, - /obj/item/gun/projectile/automatic/sniper_rifle/toy, - /obj/item/bedsheet/centcom, - /obj/item/tarot_card_pack, - /obj/item/clothing/mask/holo_cigar, - /obj/item/melee/baseball_bat/homerun, - /obj/item/mod/module/dispenser, - /obj/item/storage/box/enforcer_rubber, - /obj/item/storage/belt/utility/brass - ) - -// Common organic pool -/obj/effect/spawner/lootdrop/bluespace_tap/organic_common - name = "common organic objects" - loot = list( - /obj/item/soap/syndie, - /obj/item/dnainjector/telemut, - /obj/item/dnainjector/small_size, - /obj/item/dnainjector/morph, - /obj/item/dnainjector/regenerate, - /obj/item/dnainjector/firemut, - /obj/item/dnainjector/nobreath, - /obj/item/dnainjector/remoteview, - /obj/item/dnainjector/insulation, - /obj/item/dnainjector/eatmut, - /obj/item/dnainjector/noprints, - /obj/item/dnainjector/comic, - /obj/item/seeds/random/labelled, - /obj/item/organ/internal/regenerative_core, - /obj/item/reagent_containers/glass/bottle/reagent/omnizine, - /obj/item/reagent_containers/glass/bottle/reagent/lazarus_reagent - ) - -// Uncommon organic pool -/obj/effect/spawner/lootdrop/bluespace_tap/organic_uncommon - name = "uncommon organic objects" - loot = list( - /obj/item/storage/pill_bottle/random_meds/labelled, - /obj/item/dnainjector/hulkmut, - /obj/item/organ/internal/alien/plasmavessel, - /obj/item/organ/internal/alien/acidgland, - /obj/item/organ/internal/alien/hivenode, - /obj/item/organ/internal/alien/neurotoxin, - /obj/item/organ/internal/alien/resinspinner, - /obj/item/organ/internal/alien/eggsac, - /obj/item/organ/internal/heart/gland/heals, - /obj/item/organ/internal/heart/gland/ventcrawling, - /obj/item/organ/internal/heart/gland/egg, - /obj/item/slimepotion/fireproof, - /obj/item/slimepotion/oil_slick - ) - -// Rare organic pool -/obj/effect/spawner/lootdrop/bluespace_tap/organic_rare - name = "rare organic objects" - loot = list( - /obj/item/guardiancreator/biological, - /obj/item/organ/internal/vocal_cords/adamantine, - /obj/item/food/grown/shell/gatfruit, - /obj/item/food/grown/cherry_bomb, - /obj/item/bio_chip_implanter/storage, - /obj/item/slimepotion/sentience, - /obj/item/slimepotion/transference - ) - -// Common food pool -/obj/effect/spawner/lootdrop/bluespace_tap/food_common - name = "common fancy food" - lootcount = 1 - loot = list( - /obj/item/food/wingfangchu, - /obj/item/food/hotdog, - /obj/item/food/cookie, - /obj/item/food/plumphelmetbiscuit, - /obj/item/food/appletart, - /obj/item/food/soup/meatballsoup, - /obj/item/food/soup/mysterysoup, - /obj/item/food/soup/stew, - /obj/item/food/soup/hotchili, - /obj/item/food/burrito, - /obj/item/food/fishburger, - /obj/item/food/cubancarp, - /obj/item/food/fishandchips, - /obj/item/food/meatpie, - /obj/item/pizzabox/hawaiian, - /obj/item/food/fortunecookie, - /obj/item/food/sugarcookie, - /obj/item/food/pie, - /obj/item/food/donut/sprinkles, - /obj/item/food/chinese/rice, - /obj/item/food/pancake, - /obj/item/food/chawanmushi, - /obj/item/food/syntikebab, - /obj/item/food/salad/citrusdelight, - /obj/item/food/donkpocket, - /obj/item/food/onionrings, - /obj/item/food/tatortot, - /obj/item/food/stuffing, - /obj/item/food/waffles - ) - -// Uncommon food pool -/obj/effect/spawner/lootdrop/bluespace_tap/food_uncommon - name = "uncommon fancy food" - lootcount = 1 - loot = list( - /obj/item/food/sliceable/cheesecake, - /obj/item/food/sliceable/bananacake, - /obj/item/food/sliceable/chocolatecake, - /obj/item/food/sliceable/turkey, - /obj/item/food/sliceable/xenomeatbread, - /obj/item/food/amanita_pie, - /obj/item/food/xemeatpie, - /obj/item/food/sliceable/pumpkinpie, - /obj/item/food/donut/chaos, - /obj/item/pizzabox/meat, - /obj/item/pizzabox/pepperoni, - /obj/item/pizzabox/firecracker, - /obj/item/pizzabox/garlic, - /obj/item/food/burger/xeno, - /obj/item/food/burger/spell, - /obj/item/food/burger/superbite, - /obj/item/food/burger/crazy, - /obj/item/food/burger/ppatty/white, - /obj/item/food/burger/ppatty/red, - /obj/item/food/burger/ppatty/orange, - /obj/item/food/burger/ppatty/yellow, - /obj/item/food/burger/ppatty/green, - /obj/item/food/burger/ppatty/blue, - /obj/item/food/burger/ppatty/purple, - /obj/item/food/baguette, - /obj/item/food/rofflewaffles - ) - -// Rare food pool -/obj/effect/spawner/lootdrop/bluespace_tap/food_rare - name = "rare fancy food" - lootcount = 1 - loot = list( - /obj/item/food/monkeysdelight, - /obj/item/food/dionaroast, - /obj/item/food/boiledslimecore, - /obj/item/food/burger/brain, - /obj/item/food/liquidfood, - /obj/item/food/burger/ghost, - /obj/item/food/burger/hamborger, - /obj/item/food/burger/ppatty/rainbow, - /obj/item/food/burger/elec, - /obj/item/food/notasandwich, - /obj/item/storage/box/papersack/pbj_lunch, - /obj/item/food/soylentviridians, - /obj/item/food/syndidonkpocket, - /obj/item/food/baguette/combat - ) diff --git a/paradise.dme b/paradise.dme index fcffbd5ec1f9..ff7768ee0f82 100644 --- a/paradise.dme +++ b/paradise.dme @@ -2832,7 +2832,6 @@ #include "code\modules\space_management\zlevel_manager.dm" #include "code\modules\station_goals\bluespace_tap.dm" #include "code\modules\station_goals\bluespace_tap_events.dm" -#include "code\modules\station_goals\bluespace_tap_lootpools.dm" #include "code\modules\station_goals\bsa.dm" #include "code\modules\station_goals\dna_vault.dm" #include "code\modules\station_goals\shield.dm" From 42ae47b1fc996d46df47ab64978bed16266b13e0 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Fri, 6 Dec 2024 18:06:48 -0500 Subject: [PATCH 23/31] Map fixes --- _maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm | 8 ++++---- .../RandomRuins/SpaceRuins/telecomns_returns.dmm | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm index 7a1905dd3ac7..e93fa6b8204e 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm @@ -1281,7 +1281,7 @@ /area/ruin/space/deepstorage) "gq" = ( /obj/structure/rack, -/obj/effect/spawner/lootdrop/bluespace_tap/cultural_rare, +/obj/effect/spawner/random/bluespace_tap/cultural_rare, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "vault" @@ -2665,7 +2665,7 @@ /obj/item/salvage/ruin/soviet, /obj/structure/rack, /obj/item/stack/spacecash/c500, -/obj/effect/spawner/lootdrop/bluespace_tap/cultural_rare, +/obj/effect/spawner/random/bluespace_tap/cultural_rare, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "vault" @@ -2675,7 +2675,7 @@ /obj/structure/rack, /obj/effect/turf_decal/delivery/hollow, /obj/item/stack/spacecash/c500, -/obj/effect/spawner/lootdrop/bluespace_tap/organic_rare, +/obj/effect/spawner/random/bluespace_tap/organic_rare, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "vault" @@ -5480,7 +5480,7 @@ "IR" = ( /obj/effect/turf_decal/delivery/hollow, /obj/structure/rack, -/obj/effect/spawner/lootdrop/bluespace_tap/organic_rare, +/obj/effect/spawner/random/bluespace_tap/organic_rare, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "vault" diff --git a/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm b/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm index 09d059a76db9..fbc307b56605 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm @@ -670,7 +670,7 @@ /area/space/nearstation/no_teleport) "mD" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/bluespace_tap/organic_rare, +/obj/effect/spawner/random/bluespace_tap/organic_rare, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) "mH" = ( @@ -788,7 +788,7 @@ pixel_x = 32; pixel_y = 0 }, -/obj/effect/spawner/lootdrop/bluespace_tap/cultural_rare, +/obj/effect/spawner/random/bluespace_tap/cultural_rare, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) "oe" = ( @@ -2745,7 +2745,7 @@ /area/ruin/space/telecomms/tele) "Qg" = ( /obj/structure/table, -/obj/effect/spawner/lootdrop/bluespace_tap/cultural_uncommon, +/obj/effect/spawner/random/bluespace_tap/cultural_uncommon, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) "Qx" = ( From b526b4c8debf6bea7878f706f13066a84c24d74b Mon Sep 17 00:00:00 2001 From: warriorstar-orion Date: Fri, 6 Dec 2024 19:46:42 -0500 Subject: [PATCH 24/31] fix up maps --- .../RandomRuins/SpaceRuins/deepstorage.dmm | 513 +- .../SpaceRuins/telecomns_returns.dmm | 7396 ++++++----------- 2 files changed, 2861 insertions(+), 5048 deletions(-) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm index e93fa6b8204e..b90406f23bdc 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm @@ -88,7 +88,6 @@ /area/ruin/space/deepstorage) "ap" = ( /obj/structure/cable{ - d2 = 2; icon_state = "0-2" }, /obj/machinery/power/terminal{ @@ -143,8 +142,6 @@ "ax" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /turf/simulated/floor/plasteel, @@ -306,7 +303,6 @@ /area/ruin/space/deepstorage) "aV" = ( /obj/structure/cable{ - d2 = 2; icon_state = "0-2" }, /obj/machinery/computer/monitor, @@ -481,9 +477,7 @@ dir = 6 }, /obj/structure/table, -/obj/item/storage/firstaid/regular{ - pixel_y = 0 - }, +/obj/item/storage/firstaid/regular, /turf/simulated/floor/catwalk/airless, /area/ruin/space/unpowered) "bv" = ( @@ -982,7 +976,7 @@ }, /area/ruin/space/deepstorage) "dR" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/machine_frame, /turf/simulated/floor/catwalk, /area/ruin/space/deepstorage) "dT" = ( @@ -2005,8 +1999,6 @@ /area/ruin/space/unpowered) "kR" = ( /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /obj/effect/decal/cleanable/dirt, @@ -2782,7 +2774,7 @@ /area/ruin/space/deepstorage) "qn" = ( /turf/template_noop, -/area/space) +/area/template_noop) "qp" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, @@ -3541,8 +3533,6 @@ "vt" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/structure/cable/yellow{ @@ -3947,13 +3937,9 @@ /area/ruin/space/deepstorage) "yf" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /obj/effect/decal/cleanable/dirt, @@ -4475,7 +4461,7 @@ /area/ruin/space/deepstorage) "Br" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/machine_frame, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "black" @@ -4702,7 +4688,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/constructable_frame, +/obj/structure/machine_frame, /turf/simulated/floor/mineral/titanium, /area/ruin/space/deepstorage) "CD" = ( @@ -4831,9 +4817,9 @@ dir = 1 }, /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/item/reagent_containers/iv_bag/blood/OMinus, +/obj/item/reagent_containers/iv_bag/blood/o_minus, +/obj/item/reagent_containers/iv_bag/blood/o_minus, +/obj/item/reagent_containers/iv_bag/blood/o_minus, /obj/item/reagent_containers/iv_bag/blood/random, /obj/item/reagent_containers/iv_bag/blood/random, /obj/item/reagent_containers/iv_bag/blood/random, @@ -7111,8 +7097,6 @@ /area/ruin/space/deepstorage) "UO" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/plasteel, @@ -7316,7 +7300,6 @@ pixel_x = -32 }, /obj/structure/cable{ - d2 = 4; icon_state = "0-4" }, /obj/machinery/power/smes{ @@ -7931,6 +7914,78 @@ qn qn qn qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +"} +(2,1,1) = {" +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn ab qn qn @@ -7989,8 +8044,10 @@ qn qn qn qn +qn "} -(2,1,1) = {" +(3,1,1) = {" +qn qn qn qn @@ -8058,8 +8115,10 @@ qn qn qn qn +qn "} -(3,1,1) = {" +(4,1,1) = {" +qn qn qn qn @@ -8127,8 +8186,10 @@ qn qn qn qn +qn "} -(4,1,1) = {" +(5,1,1) = {" +qn qn qn qn @@ -8196,8 +8257,10 @@ qn qn qn qn +qn "} -(5,1,1) = {" +(6,1,1) = {" +qn qn qn qn @@ -8265,8 +8328,10 @@ ab qn qn qn +qn "} -(6,1,1) = {" +(7,1,1) = {" +qn qn qn qn @@ -8334,8 +8399,10 @@ qn qn qn qn +qn "} -(7,1,1) = {" +(8,1,1) = {" +qn qn ab qn @@ -8403,8 +8470,10 @@ qn qn qn qn +qn "} -(8,1,1) = {" +(9,1,1) = {" +qn qn qn qn @@ -8472,8 +8541,10 @@ ab qn qn qn +qn "} -(9,1,1) = {" +(10,1,1) = {" +qn qn qn qn @@ -8541,8 +8612,10 @@ ab ab qn qn +qn "} -(10,1,1) = {" +(11,1,1) = {" +qn qn qn ab @@ -8610,8 +8683,10 @@ ab qn qn qn +qn "} -(11,1,1) = {" +(12,1,1) = {" +qn qn ab ab @@ -8679,8 +8754,10 @@ ab qn ab qn +qn "} -(12,1,1) = {" +(13,1,1) = {" +qn ab ab ab @@ -8748,8 +8825,10 @@ ab qn qn ab +qn "} -(13,1,1) = {" +(14,1,1) = {" +qn ab ab jB @@ -8817,8 +8896,10 @@ ab qn qn qn +qn "} -(14,1,1) = {" +(15,1,1) = {" +qn ab ab jB @@ -8886,8 +8967,10 @@ ab qn ab qn +qn "} -(15,1,1) = {" +(16,1,1) = {" +qn qn ab jB @@ -8955,8 +9038,10 @@ aM ab qn qn +qn "} -(16,1,1) = {" +(17,1,1) = {" +qn ab ab jB @@ -9024,8 +9109,10 @@ ab qn qn qn +qn "} -(17,1,1) = {" +(18,1,1) = {" +qn ab ab jB @@ -9093,8 +9180,10 @@ iZ ab qn qn +qn "} -(18,1,1) = {" +(19,1,1) = {" +qn ab ab jB @@ -9162,8 +9251,10 @@ iZ iZ qn qn +qn "} -(19,1,1) = {" +(20,1,1) = {" +qn qn ab ab @@ -9231,8 +9322,10 @@ ab ab qn qn +qn "} -(20,1,1) = {" +(21,1,1) = {" +qn qn ab ab @@ -9300,8 +9393,10 @@ ab ab qn qn +qn "} -(21,1,1) = {" +(22,1,1) = {" +qn qn ab jB @@ -9369,8 +9464,10 @@ qn ab qn qn +qn "} -(22,1,1) = {" +(23,1,1) = {" +qn ab ab jB @@ -9438,8 +9535,10 @@ qn qn qn qn +qn "} -(23,1,1) = {" +(24,1,1) = {" +qn ab jB jB @@ -9507,8 +9606,10 @@ ab qn qn qn +qn "} -(24,1,1) = {" +(25,1,1) = {" +qn ab jB hH @@ -9576,8 +9677,10 @@ qn qn ab qn +qn "} -(25,1,1) = {" +(26,1,1) = {" +qn ab jB Nv @@ -9645,8 +9748,10 @@ qn qn qn qn +qn "} -(26,1,1) = {" +(27,1,1) = {" +qn ab jB jB @@ -9714,8 +9819,10 @@ ab qn qn qn +qn "} -(27,1,1) = {" +(28,1,1) = {" +qn ab jB Ej @@ -9783,8 +9890,10 @@ ab ab qn qn +qn "} -(28,1,1) = {" +(29,1,1) = {" +qn ab jB BL @@ -9852,8 +9961,10 @@ iZ ab qn qn +qn "} -(29,1,1) = {" +(30,1,1) = {" +qn ab jB lg @@ -9921,8 +10032,10 @@ iZ iZ qn qn +qn "} -(30,1,1) = {" +(31,1,1) = {" +qn ab jB vX @@ -9990,8 +10103,10 @@ ab iZ qn ab +qn "} -(31,1,1) = {" +(32,1,1) = {" +qn ab jB jB @@ -10059,8 +10174,10 @@ ab qn qn qn +qn "} -(32,1,1) = {" +(33,1,1) = {" +qn ab jB QD @@ -10128,8 +10245,10 @@ Id qn qn qn +qn "} -(33,1,1) = {" +(34,1,1) = {" +qn ab jB nG @@ -10197,8 +10316,10 @@ bM bM bM qn +qn "} -(34,1,1) = {" +(35,1,1) = {" +qn ab jB nQ @@ -10266,8 +10387,10 @@ hn hn qn qn +qn "} -(35,1,1) = {" +(36,1,1) = {" +qn ab jB zd @@ -10335,8 +10458,10 @@ ab qn qn qn +qn "} -(36,1,1) = {" +(37,1,1) = {" +qn ab jB jB @@ -10404,8 +10529,10 @@ ab qn qn ab +qn "} -(37,1,1) = {" +(38,1,1) = {" +qn ab ab ab @@ -10473,8 +10600,10 @@ ab qn iZ iZ +qn "} -(38,1,1) = {" +(39,1,1) = {" +qn qn ab ab @@ -10542,8 +10671,10 @@ qn qn ab iZ +qn "} -(39,1,1) = {" +(40,1,1) = {" +qn qn ab ab @@ -10611,8 +10742,10 @@ qn qn ab qn +qn "} -(40,1,1) = {" +(41,1,1) = {" +qn qn qn ab @@ -10680,8 +10813,10 @@ qn qn qn qn +qn "} -(41,1,1) = {" +(42,1,1) = {" +qn qn ab qn @@ -10749,8 +10884,10 @@ qn ab qn qn +qn "} -(42,1,1) = {" +(43,1,1) = {" +qn qn qn qn @@ -10818,8 +10955,10 @@ qn qn qn qn +qn "} -(43,1,1) = {" +(44,1,1) = {" +qn qn qn qn @@ -10887,8 +11026,10 @@ qn qn ab qn +qn "} -(44,1,1) = {" +(45,1,1) = {" +qn qn qn ab @@ -10956,8 +11097,10 @@ qn qn qn qn +qn "} -(45,1,1) = {" +(46,1,1) = {" +qn qn qn qn @@ -11025,8 +11168,10 @@ ab qn qn qn +qn "} -(46,1,1) = {" +(47,1,1) = {" +qn qn ab qn @@ -11094,8 +11239,10 @@ ab ab qn qn +qn "} -(47,1,1) = {" +(48,1,1) = {" +qn qn qn qn @@ -11163,8 +11310,10 @@ iZ iZ ab qn +qn "} -(48,1,1) = {" +(49,1,1) = {" +qn qn qn qn @@ -11232,8 +11381,10 @@ iZ iZ iZ qn +qn "} -(49,1,1) = {" +(50,1,1) = {" +qn qn ab qn @@ -11301,8 +11452,10 @@ ab ab ab qn +qn "} -(50,1,1) = {" +(51,1,1) = {" +qn qn qn qn @@ -11370,8 +11523,10 @@ bD ab ab qn +qn "} -(51,1,1) = {" +(52,1,1) = {" +qn qn qn qn @@ -11439,8 +11594,10 @@ ab ab ab qn +qn "} -(52,1,1) = {" +(53,1,1) = {" +qn qn qn ab @@ -11508,8 +11665,10 @@ ab ab qn qn +qn "} -(53,1,1) = {" +(54,1,1) = {" +qn qn qn ab @@ -11577,8 +11736,10 @@ ab iZ qn qn +qn "} -(54,1,1) = {" +(55,1,1) = {" +qn qn ab ab @@ -11646,8 +11807,10 @@ ab ab ab qn +qn "} -(55,1,1) = {" +(56,1,1) = {" +qn qn ab ab @@ -11715,8 +11878,10 @@ jB ab ab qn +qn "} -(56,1,1) = {" +(57,1,1) = {" +qn qn ab ab @@ -11784,8 +11949,10 @@ jB ab ab qn +qn "} -(57,1,1) = {" +(58,1,1) = {" +qn qn ab ab @@ -11853,8 +12020,10 @@ jB ab ab ab +qn "} -(58,1,1) = {" +(59,1,1) = {" +qn qn ab ab @@ -11922,8 +12091,10 @@ jB ab iZ iZ +qn "} -(59,1,1) = {" +(60,1,1) = {" +qn qn qn ab @@ -11991,8 +12162,10 @@ jB ab ab iZ +qn "} -(60,1,1) = {" +(61,1,1) = {" +qn qn ab ab @@ -12060,8 +12233,10 @@ jB ab ab ab +qn "} -(61,1,1) = {" +(62,1,1) = {" +qn qn ab ab @@ -12129,8 +12304,10 @@ jB ab ab ab +qn "} -(62,1,1) = {" +(63,1,1) = {" +qn qn ab ab @@ -12198,8 +12375,10 @@ jB ab ab qn +qn "} -(63,1,1) = {" +(64,1,1) = {" +qn qn qn ab @@ -12267,8 +12446,10 @@ jB ab qn qn +qn "} -(64,1,1) = {" +(65,1,1) = {" +qn qn qn ab @@ -12336,8 +12517,10 @@ jB ab ab qn +qn "} -(65,1,1) = {" +(66,1,1) = {" +qn qn ab ab @@ -12405,8 +12588,10 @@ jB iZ ab qn +qn "} -(66,1,1) = {" +(67,1,1) = {" +qn qn qn ab @@ -12474,8 +12659,10 @@ jB ab qn qn +qn "} -(67,1,1) = {" +(68,1,1) = {" +qn qn ab ab @@ -12543,8 +12730,10 @@ jB ab ab qn +qn "} -(68,1,1) = {" +(69,1,1) = {" +qn qn ab ab @@ -12612,8 +12801,10 @@ jB ab ab qn +qn "} -(69,1,1) = {" +(70,1,1) = {" +qn qn ab ab @@ -12681,8 +12872,10 @@ jB ab ab qn +qn "} -(70,1,1) = {" +(71,1,1) = {" +qn qn ab ab @@ -12750,8 +12943,10 @@ jB ab ab qn +qn "} -(71,1,1) = {" +(72,1,1) = {" +qn qn ab ab @@ -12819,8 +13014,10 @@ jB ab ab ab +qn "} -(72,1,1) = {" +(73,1,1) = {" +qn qn qn ab @@ -12888,8 +13085,10 @@ jB ab ab ab +qn "} -(73,1,1) = {" +(74,1,1) = {" +qn qn qn ab @@ -12957,8 +13156,10 @@ jB ab ab ab +qn "} -(74,1,1) = {" +(75,1,1) = {" +qn qn qn qn @@ -13026,8 +13227,10 @@ jB ab ab qn +qn "} -(75,1,1) = {" +(76,1,1) = {" +qn qn ab qn @@ -13095,8 +13298,10 @@ jB ab ab qn +qn "} -(76,1,1) = {" +(77,1,1) = {" +qn qn qn qn @@ -13164,8 +13369,10 @@ jB ab ab qn +qn "} -(77,1,1) = {" +(78,1,1) = {" +qn qn qn qn @@ -13233,8 +13440,10 @@ ab ab qn ab +qn "} -(78,1,1) = {" +(79,1,1) = {" +qn qn qn ab @@ -13302,8 +13511,10 @@ ab ab qn qn +qn "} -(79,1,1) = {" +(80,1,1) = {" +qn qn qn qn @@ -13371,8 +13582,10 @@ ab qn qn qn +qn "} -(80,1,1) = {" +(81,1,1) = {" +qn qn qn qn @@ -13440,8 +13653,10 @@ ab qn qn qn +qn "} -(81,1,1) = {" +(82,1,1) = {" +qn qn qn qn @@ -13509,8 +13724,10 @@ ab qn ab qn +qn "} -(82,1,1) = {" +(83,1,1) = {" +qn qn qn qn @@ -13578,8 +13795,10 @@ ab qn qn qn +qn "} -(83,1,1) = {" +(84,1,1) = {" +qn qn qn qn @@ -13647,8 +13866,10 @@ ab ab qn ab +qn "} -(84,1,1) = {" +(85,1,1) = {" +qn qn qn qn @@ -13716,8 +13937,10 @@ ab qn qn qn +qn "} -(85,1,1) = {" +(86,1,1) = {" +qn qn qn qn @@ -13785,4 +14008,76 @@ qn qn ab qn +qn +"} +(87,1,1) = {" +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn +qn "} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm b/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm index fbc307b56605..9263dfe5d4c7 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm @@ -1,8 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/machinery/floodlight, @@ -14,25 +12,29 @@ }, /area/ruin/space/telecomms/chamber) "an" = ( -/mob/living/simple_animal/hostile/malf_drone, -/turf/space, -/area/space/no_teleport) -"ax" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, /obj/structure/lattice, -/obj/structure/grille/broken, -/turf/space, +/obj/effect/abstract/cheese_trap, +/turf/template_noop, /area/space/nearstation/no_teleport) +"ax" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/lattice, +/obj/machinery/light, +/turf/template_noop, +/area/ruin/space/telecomms) "aN" = ( /obj/machinery/light/small{ dir = 8 }, /obj/structure/sign/vacuum{ - pixel_x = 0; pixel_y = 32 }, /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /mob/living/simple_animal/hostile/malf_drone, @@ -45,9 +47,14 @@ /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) "bE" = ( -/obj/machinery/light, -/turf/space, -/area/ruin/space/telecomms) +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/template_noop, +/area/space/nearstation/no_teleport) "bI" = ( /obj/structure/window/plasmareinforced{ dir = 8 @@ -77,7 +84,7 @@ }, /area/ruin/space/telecomms/chamber) "bP" = ( -/obj/effect/spawner/lootdrop/telecomms_core_table, +/obj/effect/spawner/random/telecomms_core_table, /obj/machinery/ai_slipper, /obj/structure/table/glass/reinforced/plastitanium, /turf/simulated/floor/plasteel{ @@ -95,16 +102,12 @@ }, /obj/structure/grille, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/plating/airless, /area/space/nearstation/no_teleport) "ca" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/catwalk, @@ -122,18 +125,12 @@ /area/ruin/space/telecomms/chamber) "cH" = ( /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -141,13 +138,9 @@ /area/ruin/space/telecomms/tele) "cJ" = ( /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /turf/simulated/floor/catwalk/airless, @@ -167,8 +160,6 @@ /area/ruin/space/telecomms/chamber) "du" = ( /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /turf/simulated/floor/catwalk/airless, @@ -183,12 +174,9 @@ "dB" = ( /obj/machinery/power/smes{ charge = 2.5e+006; - input_attempt = 1; - input_level = 200000; - inputting = 1 + input_level = 200000 }, /obj/structure/cable{ - d2 = 4; icon_state = "0-4" }, /turf/simulated/floor/catwalk, @@ -203,7 +191,6 @@ /area/ruin/space/telecomms/tele) "dR" = ( /obj/structure/cable{ - d2 = 8; icon_state = "0-8" }, /obj/machinery/power/apc/directional/east{ @@ -216,8 +203,7 @@ /area/ruin/space/telecomms/computer) "eb" = ( /obj/structure/cable{ - icon_state = "0-4"; - d2 = 4 + icon_state = "0-4" }, /obj/machinery/power/apc/directional/north{ malfhack = 1; @@ -257,8 +243,7 @@ /obj/structure/sign/securearea{ desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; - pixel_x = -32; - pixel_y = 0 + pixel_x = -32 }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/foyer) @@ -268,17 +253,13 @@ /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/computer) "fa" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 +/obj/machinery/camera/tracking_head/dvorak{ + dir = 8 }, -/obj/structure/lattice, -/turf/space, -/area/space/nearstation/no_teleport) +/turf/template_noop, +/area/space/no_teleport) "fc" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/machine_frame, /turf/simulated/floor/bluegrid{ icon_state = "dark"; name = "Mainframe Floor"; @@ -300,10 +281,10 @@ /area/ruin/space/telecomms/chamber) "fs" = ( /obj/structure/window/reinforced{ - dir = 8 + dir = 4 }, /obj/structure/window/reinforced, -/turf/space, +/turf/template_noop, /area/space/nearstation/no_teleport) "fv" = ( /obj/structure/window/reinforced{ @@ -318,13 +299,8 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4; - initialize_directions = 11; - level = 1 - }, /obj/structure/lattice, -/turf/space, +/turf/template_noop, /area/space/nearstation/no_teleport) "gi" = ( /obj/item/radio/intercom{ @@ -339,41 +315,31 @@ /area/ruin/space/telecomms/chamber) "gm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - level = 1 + dir = 4 }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) "gr" = ( /obj/structure/grille, /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /turf/simulated/floor/catwalk/airless, /area/space/nearstation/no_teleport) "gw" = ( /obj/structure/window/reinforced{ - dir = 4 + dir = 8 }, -/obj/machinery/camera/tracking_head/dvorak, -/turf/space, -/area/space/no_teleport) +/turf/template_noop, +/area/space/nearstation/no_teleport) "gG" = ( /obj/structure/cable{ - d2 = 8; icon_state = "0-8" }, /obj/machinery/shieldwallgen/telecomms, @@ -388,8 +354,6 @@ /area/ruin/space/telecomms/chamber) "gJ" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, @@ -406,19 +370,17 @@ dir = 4 }, /obj/item/radio/intercom{ - name = "station intercom (General)"; - pixel_x = 29; - pixel_y = 0 + pixel_x = 29 }, /obj/effect/spawner/random/maintenance, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) "hq" = ( /obj/structure/window/reinforced{ - dir = 4 + dir = 1 }, -/obj/structure/window/reinforced, -/turf/space, +/obj/structure/lattice, +/turf/template_noop, /area/space/nearstation/no_teleport) "hU" = ( /obj/machinery/computer/teleporter, @@ -458,15 +420,13 @@ /turf/simulated/wall/indestructible/riveted, /area/ruin/space/telecomms/computer) "iZ" = ( -/obj/machinery/camera/tracking_head/dvorak{ +/obj/structure/window/reinforced{ dir = 4 }, -/turf/space, -/area/space/no_teleport) +/turf/template_noop, +/area/space/nearstation/no_teleport) "jo" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; icon_state = "4-8" }, /turf/simulated/floor/catwalk, @@ -483,13 +443,9 @@ /area/ruin/space/telecomms/computer) "kr" = ( /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/catwalk/airless, @@ -500,13 +456,10 @@ name = "Telecoms Power Control" }, /obj/structure/cable{ - d1 = 4; - d2 = 8; icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - level = 1 + dir = 4 }, /obj/machinery/door/firedoor, /turf/simulated/floor/catwalk, @@ -526,8 +479,6 @@ /area/ruin/space/telecomms) "kT" = ( /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /turf/simulated/floor/bluegrid{ @@ -538,33 +489,25 @@ }, /area/ruin/space/telecomms/chamber) "kU" = ( -/obj/structure/closet/malf/suits, +/obj/structure/closet/malf_suits, /obj/effect/spawner/random/cobweb/left/frequent, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) "kV" = ( /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /turf/simulated/floor/catwalk/airless, /area/space/nearstation/no_teleport) "li" = ( /obj/machinery/power/solar, /obj/structure/cable{ - d2 = 8; icon_state = "0-8" }, /turf/simulated/floor/plasteel/airless{ @@ -572,34 +515,26 @@ }, /area/space/nearstation/no_teleport) "lo" = ( +/obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 1 }, -/obj/structure/lattice, -/obj/machinery/light, -/turf/space, -/area/ruin/space/telecomms) +/turf/template_noop, +/area/space/nearstation/no_teleport) "lp" = ( /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - level = 1 + dir = 4 }, /turf/simulated/floor/catwalk, /area/ruin/space/telecomms/powercontrol) "lr" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; icon_state = "4-8" }, /obj/effect/spawner/random/oil/often, @@ -611,8 +546,6 @@ }, /obj/structure/window/reinforced, /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /turf/simulated/floor/catwalk, @@ -627,16 +560,12 @@ /obj/structure/lattice, /obj/structure/grille, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/plating/airless, /area/space/nearstation/no_teleport) "mb" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/structure/closet/crate, @@ -662,15 +591,13 @@ /area/ruin/space/telecomms/tele) "mh" = ( /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /turf/simulated/floor/catwalk/airless, /area/space/nearstation/no_teleport) "mD" = ( /obj/structure/table, -/obj/effect/spawner/random/bluespace_tap/organic_rare, +/obj/effect/spawner/random/bluespace_tap/organic_uncommon, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) "mH" = ( @@ -686,10 +613,7 @@ /area/ruin/space/telecomms) "mO" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/structure/grille, /turf/simulated/floor/catwalk/airless, @@ -711,7 +635,6 @@ /area/ruin/space/telecomms/chamber) "nh" = ( /obj/structure/cable{ - d2 = 4; icon_state = "0-4" }, /obj/machinery/shieldwallgen/telecomms, @@ -726,10 +649,7 @@ /area/ruin/space/telecomms/chamber) "np" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/computer) @@ -764,14 +684,10 @@ /area/ruin/space/telecomms) "nQ" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/machinery/light, /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /obj/effect/map_effect/marker_helper/mapmanip/submap/edge, @@ -785,21 +701,16 @@ "nS" = ( /obj/structure/table, /obj/machinery/status_display{ - pixel_x = 32; - pixel_y = 0 + pixel_x = 32 }, /obj/effect/spawner/random/bluespace_tap/cultural_rare, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) "oe" = ( /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /turf/simulated/floor/catwalk/airless, @@ -813,8 +724,6 @@ /area/ruin/space/telecomms/powercontrol) "ou" = ( /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -826,9 +735,7 @@ "oz" = ( /obj/machinery/atmospherics/unary/vent_pump{ dir = 1; - external_pressure_bound = 101.325; - on = 1; - pressure_checks = 1 + on = 1 }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/foyer) @@ -840,26 +747,18 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5; - level = 1 + dir = 5 }, /turf/simulated/floor/catwalk, /area/ruin/space/telecomms) "oE" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, /obj/structure/lattice, -/turf/space, +/obj/effect/abstract/cheese_trap, +/turf/template_noop, /area/space/nearstation/no_teleport) "oG" = ( /obj/structure/cable{ - icon_state = "0-4"; - d2 = 4 + icon_state = "0-4" }, /obj/effect/spawner/window/reinforced/grilled, /obj/machinery/door/firedoor/heavy, @@ -867,7 +766,6 @@ /area/ruin/space/telecomms/tele) "oW" = ( /obj/structure/cable{ - d2 = 8; icon_state = "0-8" }, /obj/effect/spawner/window/reinforced/grilled, @@ -878,8 +776,7 @@ /obj/machinery/power/solar, /obj/structure/cable{ icon_state = "0-2"; - pixel_y = 1; - d2 = 2 + pixel_y = 1 }, /turf/simulated/floor/plasteel/airless{ icon_state = "solarpanel" @@ -897,14 +794,11 @@ /area/ruin/space/telecomms/chamber) "ph" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4; - initialize_directions = 11; - level = 1 + initialize_directions = 11 }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/foyer) @@ -914,17 +808,15 @@ /turf/simulated/floor/engine, /area/ruin/space/telecomms/computer) "pS" = ( -/obj/structure/lattice, -/obj/structure/grille/broken, -/mob/living/simple_animal/hostile/malf_drone, -/turf/space, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/template_noop, /area/space/nearstation/no_teleport) "pU" = ( /obj/structure/lattice, /obj/structure/grille, /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /turf/simulated/floor/plating/airless, @@ -935,10 +827,7 @@ /area/ruin/space/telecomms/computer) "qe" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /turf/simulated/floor/bluegrid{ name = "Mainframe Base"; @@ -982,9 +871,7 @@ /obj/item/storage/toolbox/mechanical, /obj/machinery/atmospherics/unary/vent_pump{ dir = 1; - external_pressure_bound = 101.325; - on = 1; - pressure_checks = 1 + on = 1 }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) @@ -998,8 +885,6 @@ /area/ruin/space/telecomms) "qO" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -1008,13 +893,9 @@ /area/ruin/space/telecomms/tele) "qP" = ( /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /turf/simulated/floor/catwalk/airless, @@ -1025,8 +906,6 @@ /area/ruin/space/telecomms/computer) "rD" = ( /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /turf/simulated/floor/catwalk/airless, @@ -1071,8 +950,6 @@ /area/ruin/space/telecomms/computer) "sn" = ( /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /turf/simulated/floor/catwalk/airless, @@ -1092,8 +969,7 @@ /area/ruin/space/telecomms/computer) "sH" = ( /obj/structure/sign/nosmoking_2{ - pixel_x = -32; - pixel_y = 0 + pixel_x = -32 }, /turf/simulated/floor/bluegrid{ name = "Mainframe Base"; @@ -1112,7 +988,6 @@ on = 1 }, /obj/machinery/status_display{ - pixel_x = 0; pixel_y = 32 }, /obj/structure/table, @@ -1129,17 +1004,17 @@ dir = 4 }, /obj/machinery/status_display{ - pixel_x = 0; pixel_y = 32 }, /turf/simulated/floor/catwalk, /area/ruin/space/telecomms/powercontrol) "tm" = ( -/obj/structure/window/reinforced, +/obj/structure/lattice, /obj/structure/window/reinforced{ - dir = 1 + dir = 8 }, -/turf/space, +/obj/effect/abstract/cheese_trap, +/turf/template_noop, /area/space/nearstation/no_teleport) "to" = ( /obj/machinery/porta_turret/ai_turret/disable{ @@ -1156,9 +1031,7 @@ /area/ruin/space/telecomms) "tx" = ( /obj/item/radio/intercom{ - name = "station intercom (General)"; pixel_x = 29; - pixel_y = 0; broadcasting = 1 }, /obj/machinery/bluespace_beacon, @@ -1169,7 +1042,6 @@ /area/ruin/space/telecomms/tele) "tz" = ( /obj/structure/cable{ - d2 = 8; icon_state = "0-8" }, /obj/machinery/power/apc/directional/north{ @@ -1194,7 +1066,6 @@ dir = 1 }, /obj/machinery/status_display{ - pixel_x = 0; pixel_y = 32 }, /obj/item/salvage/ruin/nanotrasen{ @@ -1204,21 +1075,15 @@ /area/ruin/space/telecomms/computer) "tF" = ( /obj/item/radio/intercom{ - name = "station intercom (General)"; - pixel_x = 29; - pixel_y = 0 + pixel_x = 29 }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/computer) "tY" = ( /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -1233,9 +1098,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - level = 1 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/catwalk, /area/ruin/space/telecomms) "ul" = ( @@ -1263,10 +1126,7 @@ /area/ruin/space/telecomms/foyer) "uT" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/machinery/light{ dir = 1 @@ -1287,7 +1147,6 @@ /area/ruin/space/telecomms) "ve" = ( /obj/machinery/status_display{ - pixel_x = 0; pixel_y = 32 }, /turf/simulated/floor/bluegrid{ @@ -1323,10 +1182,7 @@ dir = 4 }, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/effect/decal/cleanable/blood/old, /obj/structure/window/reinforced{ @@ -1347,31 +1203,22 @@ /area/ruin/space/telecomms) "vZ" = ( /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4; - initialize_directions = 11; - level = 1 + initialize_directions = 11 }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) "wh" = ( /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/machinery/light{ @@ -1387,9 +1234,7 @@ "wA" = ( /obj/machinery/power/smes{ charge = 2.5e+006; - input_attempt = 1; - input_level = 200000; - inputting = 1 + input_level = 200000 }, /obj/structure/cable, /turf/simulated/floor/bluegrid{ @@ -1404,8 +1249,6 @@ dir = 8 }, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_pump{ @@ -1442,10 +1285,7 @@ /obj/structure/lattice, /obj/structure/grille, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /turf/simulated/floor/plating/airless, /area/space/nearstation/no_teleport) @@ -1454,8 +1294,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1; - level = 1 + dir = 1 }, /turf/simulated/floor/catwalk, /area/ruin/space/telecomms) @@ -1474,10 +1313,7 @@ dir = 4 }, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /turf/simulated/floor/catwalk, /area/ruin/space/telecomms) @@ -1519,12 +1355,11 @@ /area/ruin/space/telecomms) "yo" = ( /obj/structure/lattice, -/turf/space, +/obj/structure/grille/broken, +/turf/template_noop, /area/space/nearstation/no_teleport) "yq" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/plasteel, @@ -1541,10 +1376,7 @@ /area/ruin/space/telecomms) "yC" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/machinery/recharge_station/upgraded, /mob/living/simple_animal/hostile/hivebot/strong/malfborg, @@ -1577,18 +1409,13 @@ /area/space/nearstation/no_teleport) "yJ" = ( /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) "yN" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/machinery/door/airlock/hatch/syndicate/command/trapped, /obj/item/radio/intercom{ @@ -1606,18 +1433,12 @@ "yU" = ( /obj/structure/grille, /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/catwalk/airless, @@ -1630,17 +1451,20 @@ /area/ruin/space/telecomms/tele) "zk" = ( /obj/structure/lattice, -/obj/effect/abstract/cheese_trap, -/turf/space, -/area/space/nearstation/no_teleport) +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/template_noop, +/area/ruin/space/telecomms) "zq" = ( /obj/structure/barricade/sandbags, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) "zG" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /turf/simulated/wall/indestructible/riveted, @@ -1684,8 +1508,6 @@ /area/ruin/space/telecomms/chamber) "Ai" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; icon_state = "4-8" }, /obj/structure/table, @@ -1700,31 +1522,18 @@ /turf/simulated/floor/engine, /area/ruin/space/telecomms/computer) "Ay" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - level = 1 - }, -/obj/structure/lattice, -/turf/space, +/turf/template_noop, /area/space/nearstation/no_teleport) "Az" = ( /obj/structure/lattice, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/structure/grille, /turf/simulated/floor/plating/airless, /area/space/nearstation/no_teleport) "AJ" = ( /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -1747,10 +1556,7 @@ /area/ruin/space/telecomms) "AY" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/structure/window/reinforced{ dir = 4 @@ -1761,8 +1567,7 @@ /obj/structure/sign/securearea{ desc = "A warning sign which reads 'LETHAL TURRETS'. Enter at your own risk!"; name = "LETHAL TURRETS"; - pixel_x = 32; - pixel_y = 0 + pixel_x = 32 }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/foyer) @@ -1794,13 +1599,11 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8; - initialize_directions = 11; - level = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, /obj/structure/lattice, -/turf/space, +/turf/template_noop, /area/space/nearstation/no_teleport) "BW" = ( /obj/machinery/atmospherics/unary/tank/air{ @@ -1810,17 +1613,15 @@ /area/ruin/space/telecomms) "BZ" = ( /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) "Cq" = ( -/obj/machinery/camera/tracking_head/dvorak{ - dir = 8 +/obj/structure/window/reinforced{ + dir = 4 }, -/turf/space, +/turf/template_noop, /area/space/no_teleport) "Ct" = ( /obj/machinery/computer/mech_bay_power_console{ @@ -1844,19 +1645,12 @@ "CD" = ( /obj/structure/grille, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /turf/simulated/floor/catwalk/airless, @@ -1893,7 +1687,14 @@ /turf/simulated/floor/catwalk/airless, /area/ruin/space/telecomms/powercontrol) "CU" = ( -/turf/space, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/template_noop, /area/space/nearstation/no_teleport) "Dd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -1903,12 +1704,9 @@ /area/ruin/space/telecomms/computer) "De" = ( /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /obj/structure/cable{ - d2 = 8; icon_state = "0-8" }, /obj/machinery/computer/monitor{ @@ -1921,13 +1719,9 @@ /area/ruin/space/telecomms/tele) "Dr" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -1938,8 +1732,9 @@ /area/ruin/space/telecomms/foyer) "Dy" = ( /obj/structure/lattice, -/obj/structure/grille, -/turf/space, +/obj/structure/grille/broken, +/mob/living/simple_animal/hostile/malf_drone, +/turf/template_noop, /area/space/nearstation/no_teleport) "DT" = ( /obj/structure/window/reinforced{ @@ -1949,8 +1744,6 @@ dir = 4 }, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/catwalk, @@ -1960,14 +1753,15 @@ /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) "Ed" = ( -/turf/space, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/camera/tracking_head/dvorak, +/turf/template_noop, /area/space/no_teleport) "Ew" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/machinery/camera/tracking_head/dvorak, /turf/simulated/floor/bluegrid{ @@ -1981,16 +1775,18 @@ /obj/structure/window/reinforced{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, /obj/structure/lattice, -/turf/space, +/turf/template_noop, /area/space/nearstation/no_teleport) "EK" = ( +/obj/structure/lattice, /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/lattice, -/obj/effect/abstract/cheese_trap, -/turf/space, +/turf/template_noop, /area/space/nearstation/no_teleport) "EM" = ( /turf/simulated/floor/bluegrid{ @@ -2002,39 +1798,49 @@ /area/ruin/space/telecomms/chamber) "EO" = ( /obj/structure/window/reinforced, -/turf/space, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4; + initialize_directions = 11 + }, +/turf/template_noop, /area/space/nearstation/no_teleport) "EQ" = ( -/obj/structure/window/reinforced, /obj/structure/lattice, -/obj/machinery/light{ - dir = 1 +/obj/structure/window/reinforced{ + dir = 8 }, -/turf/space, -/area/ruin/space/telecomms) +/turf/template_noop, +/area/space/nearstation/no_teleport) "ES" = ( /obj/structure/cable{ - icon_state = "0-4"; - d2 = 4 + icon_state = "0-4" }, /obj/machinery/power/tracker, /turf/simulated/floor/catwalk/airless, /area/space/nearstation/no_teleport) "Ff" = ( -/obj/machinery/light{ +/obj/structure/window/reinforced{ dir = 8 }, -/turf/space, -/area/ruin/space/telecomms) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation/no_teleport) "Fg" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - level = 1 + dir = 4 }, /obj/structure/barricade/sandbags, /turf/simulated/floor/plasteel, @@ -2042,8 +1848,7 @@ "FA" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'SERVER ROOM'."; - name = "SERVER ROOM"; - pixel_y = 0 + name = "SERVER ROOM" }, /turf/simulated/wall/indestructible/riveted, /area/ruin/space/telecomms/chamber) @@ -2069,34 +1874,25 @@ /area/ruin/space/telecomms/chamber) "Ga" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/structure/grille, /turf/simulated/floor/plating/airless, /area/space/nearstation/no_teleport) "Gd" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/space, +/obj/structure/lattice, +/obj/structure/grille, +/turf/template_noop, /area/space/nearstation/no_teleport) "Gf" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/space, +/obj/machinery/light, +/turf/template_noop, /area/ruin/space/telecomms) "Go" = ( /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /turf/simulated/floor/catwalk/airless, @@ -2106,7 +1902,6 @@ dir = 10 }, /obj/machinery/status_display{ - pixel_x = 0; pixel_y = 32 }, /turf/simulated/floor/plasteel, @@ -2125,8 +1920,7 @@ "GE" = ( /obj/machinery/power/solar, /obj/structure/cable{ - icon_state = "0-4"; - d2 = 4 + icon_state = "0-4" }, /turf/simulated/floor/plasteel/airless{ icon_state = "solarpanel" @@ -2136,8 +1930,6 @@ /obj/structure/lattice, /obj/structure/grille, /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /turf/simulated/floor/plating/airless, @@ -2150,8 +1942,7 @@ /area/ruin/space/telecomms/foyer) "Hc" = ( /obj/structure/cable{ - icon_state = "0-4"; - d2 = 4 + icon_state = "0-4" }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 6; @@ -2165,31 +1956,22 @@ /turf/simulated/floor/catwalk, /area/ruin/space/telecomms) "Ho" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced{ +/obj/machinery/light{ dir = 8 }, -/turf/space, -/area/space/nearstation/no_teleport) +/turf/template_noop, +/area/ruin/space/telecomms) "Hr" = ( /turf/simulated/wall/r_wall, /area/ruin/space/telecomms/computer) "Ht" = ( /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/catwalk/airless, @@ -2200,27 +1982,18 @@ /area/ruin/space/telecomms) "Hw" = ( /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /turf/simulated/floor/catwalk/airless, /area/space/nearstation/no_teleport) "HK" = ( /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2230,8 +2003,6 @@ /area/ruin/space/telecomms/tele) "HP" = ( /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /obj/structure/table, @@ -2249,16 +2020,12 @@ /area/ruin/space/telecomms/computer) "HR" = ( /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) "HV" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/catwalk, @@ -2273,17 +2040,12 @@ /area/ruin/space/telecomms) "Ig" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /turf/simulated/floor/catwalk/airless, /area/space/nearstation/no_teleport) "IE" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -2305,18 +2067,12 @@ /area/ruin/space/telecomms/foyer) "IU" = ( /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/catwalk/airless, @@ -2334,28 +2090,24 @@ }, /area/ruin/space/telecomms/chamber) "Jz" = ( -/obj/structure/closet/malf/suits, +/obj/structure/closet/malf_suits, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) "JC" = ( /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) "JG" = ( -/obj/structure/window/reinforced, -/obj/machinery/light{ - dir = 1 +/obj/structure/window/reinforced{ + dir = 4 }, -/turf/space, -/area/ruin/space/telecomms) -"JO" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation/no_teleport) +"JO" = ( +/obj/structure/cable{ icon_state = "2-4" }, /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /turf/simulated/floor/plasteel, @@ -2389,13 +2141,9 @@ /area/ruin/space/telecomms/computer) "Kt" = ( /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /turf/simulated/floor/catwalk/airless, @@ -2406,19 +2154,13 @@ /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/computer) "KH" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 +/obj/machinery/camera/tracking_head/dvorak{ + dir = 4 }, -/turf/space, -/area/space/nearstation/no_teleport) +/turf/template_noop, +/area/space/no_teleport) "KQ" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; icon_state = "4-8" }, /obj/structure/closet/emcloset, @@ -2460,8 +2202,6 @@ /area/space/nearstation/no_teleport) "Lq" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /mob/living/silicon/decoy/telecomms, @@ -2474,13 +2214,10 @@ /area/ruin/space/telecomms/chamber) "LK" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - level = 1 + dir = 4 }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) @@ -2495,21 +2232,9 @@ /turf/simulated/floor/catwalk, /area/ruin/space/telecomms) "Ma" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, /obj/structure/lattice, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4; - initialize_directions = 11; - level = 1 - }, -/turf/space, -/area/space/nearstation/no_teleport) +/turf/template_noop, +/area/space/no_teleport) "Ml" = ( /obj/structure/cable, /obj/machinery/power/terminal{ @@ -2519,13 +2244,9 @@ /area/ruin/space/telecomms/powercontrol) "Mm" = ( /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /turf/simulated/floor/catwalk/airless, @@ -2544,9 +2265,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - level = 1 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/window/reinforced{ dir = 4 }, @@ -2562,18 +2281,12 @@ /area/ruin/space/telecomms/tele) "Nr" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /turf/simulated/floor/bluegrid{ @@ -2585,18 +2298,12 @@ /area/ruin/space/telecomms/chamber) "Nv" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /obj/structure/cable{ - d1 = 1; - d2 = 8; icon_state = "1-8" }, /turf/simulated/floor/bluegrid{ @@ -2614,13 +2321,9 @@ /area/ruin/space/telecomms) "NY" = ( /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /turf/simulated/floor/catwalk/airless, @@ -2640,23 +2343,16 @@ /area/ruin/space/telecomms) "Oi" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/catwalk/airless, /area/space/nearstation/no_teleport) "On" = ( /obj/structure/lattice, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/space, +/turf/template_noop, /area/space/nearstation/no_teleport) "OS" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/effect/turf_decal/box/white, @@ -2680,22 +2376,17 @@ /area/space/nearstation/no_teleport) "Px" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/structure/girder/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - level = 1 + dir = 9 }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/computer) "PA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - level = 1 + dir = 4 }, /turf/simulated/floor/catwalk, /area/ruin/space/telecomms/powercontrol) @@ -2704,8 +2395,6 @@ /area/ruin/space/telecomms/tele) "PU" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/tcoms, @@ -2720,17 +2409,11 @@ /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/foyer) "PZ" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/space, -/area/space/nearstation/no_teleport) +/turf/template_noop, +/area/space/no_teleport) "Qf" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/machinery/light/small{ dir = 1 @@ -2745,7 +2428,7 @@ /area/ruin/space/telecomms/tele) "Qg" = ( /obj/structure/table, -/obj/effect/spawner/random/bluespace_tap/cultural_uncommon, +/obj/effect/spawner/random/bluespace_tap/cultural_rare, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms) "Qx" = ( @@ -2761,21 +2444,22 @@ /obj/structure/window/reinforced{ dir = 4 }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8; + initialize_directions = 11 + }, /obj/structure/lattice, -/turf/space, +/turf/template_noop, /area/space/nearstation/no_teleport) "QP" = ( -/obj/structure/lattice, /obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/abstract/cheese_trap, -/turf/space, +/obj/structure/window/reinforced, +/turf/template_noop, /area/space/nearstation/no_teleport) "QR" = ( /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /obj/machinery/recharge_station/upgraded, @@ -2797,14 +2481,15 @@ }, /area/space/nearstation/no_teleport) "Ra" = ( +/obj/structure/window/reinforced, /obj/structure/window/reinforced{ - dir = 4 + dir = 1 }, -/obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 + dir = 5 }, -/turf/space, +/obj/structure/lattice, +/turf/template_noop, /area/space/nearstation/no_teleport) "Rh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2825,8 +2510,6 @@ /area/ruin/space/telecomms/tele) "Rv" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/bluegrid{ @@ -2838,15 +2521,12 @@ }, /area/ruin/space/telecomms/chamber) "Rw" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/obj/structure/window/reinforced, +/obj/machinery/light{ + dir = 1 }, -/obj/structure/lattice, -/turf/space, -/area/space/nearstation/no_teleport) +/turf/template_noop, +/area/ruin/space/telecomms) "RB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, @@ -2874,21 +2554,16 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - level = 1 - }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/catwalk, /area/ruin/space/telecomms) "Sn" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; - initialize_directions = 11; - level = 1 + initialize_directions = 11 }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) @@ -2907,8 +2582,6 @@ /obj/structure/lattice, /obj/structure/grille, /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /turf/simulated/floor/plating/airless, @@ -2927,11 +2600,14 @@ /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/computer) "SO" = ( -/obj/structure/window/reinforced, /obj/structure/window/reinforced{ - dir = 8 + dir = 4 + }, +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/turf/space, +/turf/template_noop, /area/space/nearstation/no_teleport) "Ta" = ( /obj/structure/chair/office/dark{ @@ -2955,18 +2631,12 @@ "TL" = ( /obj/structure/grille, /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/structure/cable{ - d1 = 1; - d2 = 4; icon_state = "1-4" }, /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /turf/simulated/floor/catwalk/airless, @@ -2990,15 +2660,12 @@ /turf/simulated/floor/catwalk, /area/ruin/space/telecomms) "TY" = ( -/obj/structure/lattice, -/turf/space, +/mob/living/simple_animal/hostile/malf_drone, +/turf/template_noop, /area/space/no_teleport) "Uw" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) @@ -3013,17 +2680,13 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - level = 1 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/telecomms_trap_tank, /obj/effect/abstract/cheese_trap, /turf/simulated/floor/catwalk, /area/ruin/space/telecomms) "UE" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -3035,15 +2698,18 @@ /area/ruin/space/telecomms/tele) "UH" = ( /obj/structure/window/reinforced{ - dir = 1 + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4; + initialize_directions = 11 }, /obj/structure/lattice, -/turf/space, +/turf/template_noop, /area/space/nearstation/no_teleport) "Vb" = ( /obj/structure/sign/nosmoking_2{ - pixel_x = 32; - pixel_y = 0 + pixel_x = 32 }, /obj/machinery/light{ dir = 4 @@ -3057,8 +2723,6 @@ /area/ruin/space/telecomms/chamber) "Vl" = ( /obj/structure/cable{ - d1 = 1; - d2 = 2; icon_state = "1-2" }, /obj/structure/grille, @@ -3071,21 +2735,18 @@ /turf/simulated/wall/r_wall, /area/space/nearstation/no_teleport) "Vp" = ( -/obj/structure/window/reinforced{ +/obj/machinery/light{ dir = 4 }, -/turf/space, -/area/space/no_teleport) +/turf/template_noop, +/area/ruin/space/telecomms) "Vv" = ( /obj/machinery/camera/tracking_head/dvorak, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/computer) "VO" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/machinery/light/small{ dir = 1 @@ -3096,13 +2757,11 @@ /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) "Wc" = ( +/obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 8 }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/space, +/turf/template_noop, /area/space/nearstation/no_teleport) "Wp" = ( /obj/machinery/teleport/station, @@ -3110,14 +2769,12 @@ /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) "Wq" = ( +/obj/structure/window/reinforced, /obj/structure/lattice, -/obj/structure/window/reinforced{ - dir = 8 - }, /obj/machinery/light{ - dir = 4 + dir = 1 }, -/turf/space, +/turf/template_noop, /area/ruin/space/telecomms) "WC" = ( /obj/machinery/porta_turret/ai_turret/disable{ @@ -3133,18 +2790,14 @@ /area/ruin/space/telecomms) "WO" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/machinery/firealarm/directional/north, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/foyer) "WR" = ( /obj/structure/cable{ - icon_state = "0-4"; - d2 = 4 + icon_state = "0-4" }, /obj/machinery/power/apc/directional/north{ malfhack = 1; @@ -3160,16 +2813,13 @@ /area/ruin/space/telecomms/chamber) "Xb" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1; - level = 1 + dir = 1 }, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/foyer) "Xf" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/space, +/obj/structure/window/reinforced, +/turf/template_noop, /area/space/nearstation/no_teleport) "XB" = ( /obj/structure/environmental_storytelling_holopad/core_room, @@ -3206,8 +2856,6 @@ /obj/structure/lattice, /obj/structure/grille, /obj/structure/cable{ - d1 = 2; - d2 = 4; icon_state = "2-4" }, /turf/simulated/floor/plating/airless, @@ -3247,15 +2895,16 @@ /turf/simulated/floor/plating/airless, /area/space/nearstation/no_teleport) "YQ" = ( -/obj/structure/lattice, /obj/structure/window/reinforced{ - dir = 4 + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 }, -/turf/space, +/turf/template_noop, /area/space/nearstation/no_teleport) "YW" = ( /obj/structure/cable{ - d2 = 2; icon_state = "0-2" }, /obj/machinery/power/apc/directional/east{ @@ -3306,10 +2955,7 @@ /area/ruin/space/telecomms/powercontrol) "Zt" = ( /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + icon_state = "4-8" }, /obj/machinery/camera/tracking_head/dvorak{ dir = 1 @@ -3326,8 +2972,7 @@ /area/ruin/space/telecomms/chamber) "ZB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - level = 1 + dir = 4 }, /obj/effect/spawner/random/oil/often, /turf/simulated/floor/catwalk, @@ -3337,15 +2982,12 @@ name = "Telecoms Solar Control" }, /obj/structure/cable{ - d2 = 8; icon_state = "0-8" }, /turf/simulated/floor/catwalk, /area/ruin/space/telecomms/powercontrol) "ZV" = ( /obj/structure/cable{ - d1 = 2; - d2 = 8; icon_state = "2-8" }, /turf/simulated/floor/bluegrid{ @@ -3436,6 +3078,8 @@ XP XP XP XP +"} +(2,1,1) = {" XP XP XP @@ -3447,13 +3091,6 @@ XP XP XP XP -"} -(2,1,1) = {" -XP -XP -XP -XP -XP XP XP XP @@ -3472,6 +3109,19 @@ XP XP XP XP +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd XP XP XP @@ -3509,6 +3159,8 @@ XP XP XP XP +"} +(3,1,1) = {" XP XP XP @@ -3538,9 +3190,20 @@ XP XP XP XP +Gd +PZ +On +PZ +PZ +PZ +PZ +PZ +PZ +PZ +On +PZ +Gd XP -"} -(3,1,1) = {" XP XP XP @@ -3577,6 +3240,8 @@ XP XP XP XP +"} +(4,1,1) = {" XP XP XP @@ -3606,6 +3271,19 @@ XP XP XP XP +Gd +PZ +oY +cJ +QZ +PZ +PZ +PZ +oY +cJ +QZ +PZ +Gd XP XP XP @@ -3631,8 +3309,6 @@ XP XP XP XP -"} -(4,1,1) = {" XP XP XP @@ -3645,6 +3321,8 @@ XP XP XP XP +"} +(5,1,1) = {" XP XP XP @@ -3674,6 +3352,19 @@ XP XP XP XP +Gd +PZ +oY +Hw +QZ +PZ +PZ +PZ +oY +Hw +QZ +PZ +Gd XP XP XP @@ -3711,6 +3402,8 @@ XP XP XP XP +"} +(6,1,1) = {" XP XP XP @@ -3723,8 +3416,6 @@ XP XP XP XP -"} -(5,1,1) = {" XP XP XP @@ -3742,6 +3433,19 @@ XP XP XP XP +Gd +PZ +oY +Hw +QZ +PZ +PZ +PZ +oY +Hw +QZ +PZ +Gd XP XP XP @@ -3779,6 +3483,8 @@ XP XP XP XP +"} +(7,1,1) = {" XP XP XP @@ -3808,6 +3514,19 @@ XP XP XP XP +Gd +PZ +oY +Hw +QZ +PZ +PZ +PZ +oY +Hw +QZ +PZ +Gd XP XP XP @@ -3815,8 +3534,6 @@ XP XP XP XP -"} -(6,1,1) = {" XP XP XP @@ -3847,6 +3564,8 @@ XP XP XP XP +"} +(8,1,1) = {" XP XP XP @@ -3876,6 +3595,19 @@ XP XP XP XP +Gd +PZ +oY +Hw +QZ +PZ +PZ +PZ +oY +Hw +QZ +PZ +Gd XP XP XP @@ -3907,14 +3639,14 @@ XP XP XP XP -"} -(7,1,1) = {" XP XP XP XP XP XP +"} +(9,1,1) = {" XP XP XP @@ -3944,6 +3676,19 @@ XP XP XP XP +Gd +PZ +oY +Hw +QZ +On +On +On +oY +Hw +QZ +PZ +Gd XP XP XP @@ -3981,6 +3726,8 @@ XP XP XP XP +"} +(10,1,1) = {" XP XP XP @@ -3999,8 +3746,6 @@ XP XP XP XP -"} -(8,1,1) = {" XP XP XP @@ -4012,6 +3757,19 @@ XP XP XP XP +Gd +PZ +oY +Hw +QZ +PZ +PZ +PZ +oY +Hw +QZ +PZ +Gd XP XP XP @@ -4049,6 +3807,8 @@ XP XP XP XP +"} +(11,1,1) = {" XP XP XP @@ -4078,6 +3838,19 @@ XP XP XP XP +Dy +PZ +oY +Hw +QZ +PZ +PZ +PZ +oY +Hw +QZ +PZ +Gd XP XP XP @@ -4091,8 +3864,6 @@ XP XP XP XP -"} -(9,1,1) = {" XP XP XP @@ -4117,6 +3888,8 @@ XP XP XP XP +"} +(12,1,1) = {" XP XP XP @@ -4146,6 +3919,19 @@ XP XP XP XP +Gd +PZ +oY +Hw +QZ +PZ +PZ +PZ +oY +Hw +QZ +PZ +Gd XP XP XP @@ -4184,7 +3970,10 @@ XP XP XP "} -(10,1,1) = {" +(13,1,1) = {" +XP +XP +XP XP XP XP @@ -4211,6 +4000,20 @@ XP XP XP XP +Gd +PZ +oY +Hw +QZ +PZ +PZ +PZ +oY +Hw +QZ +PZ +Gd +XP XP XP XP @@ -4247,6 +4050,8 @@ XP XP XP XP +"} +(14,1,1) = {" XP XP XP @@ -4275,9 +4080,20 @@ XP XP XP XP -"} -(11,1,1) = {" XP +Gd +PZ +oY +Hw +QZ +On +On +On +oY +Hw +QZ +PZ +yo XP XP XP @@ -4311,23 +4127,12 @@ XP XP XP XP -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy XP XP XP XP +"} +(15,1,1) = {" XP XP XP @@ -4357,6 +4162,19 @@ XP XP XP XP +Gd +PZ +oY +Hw +QZ +PZ +PZ +PZ +oY +Hw +QZ +PZ +Gd XP XP XP @@ -4367,8 +4185,6 @@ XP XP XP XP -"} -(12,1,1) = {" XP XP XP @@ -4396,6 +4212,8 @@ XP XP XP XP +"} +(16,1,1) = {" XP XP XP @@ -4403,19 +4221,6 @@ XP XP XP XP -Dy -Ed -yo -Ed -Ed -Ed -Ed -Ed -Ed -Ed -yo -Ed -Dy XP XP XP @@ -4438,6 +4243,19 @@ XP XP XP XP +Gd +PZ +oY +Hw +QZ +PZ +PZ +PZ +oY +Hw +QZ +PZ +Gd XP XP XP @@ -4459,8 +4277,6 @@ XP XP XP XP -"} -(13,1,1) = {" XP XP XP @@ -4477,6 +4293,8 @@ XP XP XP XP +"} +(17,1,1) = {" XP XP XP @@ -4495,19 +4313,6 @@ XP XP XP XP -Dy -Ed -oY -cJ -QZ -Ed -Ed -Ed -oY -cJ -QZ -Ed -Dy XP XP XP @@ -4519,6 +4324,19 @@ XP XP XP XP +Gd +PZ +oY +Hw +QZ +PZ +PZ +PZ +oY +Hw +QZ +PZ +Gd XP XP XP @@ -4551,13 +4369,13 @@ XP XP XP XP -"} -(14,1,1) = {" XP XP XP XP XP +"} +(18,1,1) = {" XP XP XP @@ -4587,25 +4405,19 @@ XP XP XP XP -Dy -Ed +Gd +PZ oY Hw QZ -Ed -Ed -Ed +PZ +PZ +PZ oY Hw QZ -Ed -Dy -XP -XP -XP -XP -XP -XP +PZ +Gd XP XP XP @@ -4644,12 +4456,7 @@ XP XP XP "} -(15,1,1) = {" -XP -XP -XP -XP -XP +(19,1,1) = {" XP XP XP @@ -4679,25 +4486,19 @@ XP XP XP XP -Dy -Ed +Gd +PZ oY Hw QZ -Ed -Ed -Ed +PZ +PZ +PZ oY Hw QZ -Ed -Dy -XP -XP -XP -XP -XP -XP +PZ +Gd XP XP XP @@ -4736,7 +4537,7 @@ XP XP XP "} -(16,1,1) = {" +(20,1,1) = {" XP XP XP @@ -4766,30 +4567,19 @@ XP XP XP XP -XP -XP -XP -XP -XP -Dy -Ed -oY -Hw -QZ -Ed -Ed -Ed -oY -Hw -QZ -Ed -Dy -XP -XP -XP -XP -XP -XP +Gd +PZ +PZ +du +Oi +Oi +Kt +Oi +Oi +sn +PZ +PZ +Gd XP XP XP @@ -4828,18 +4618,7 @@ XP XP XP "} -(17,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +(21,1,1) = {" XP XP XP @@ -4863,25 +4642,25 @@ XP XP XP XP -Dy -Ed -oY -Hw -QZ -Ed -Ed -Ed -oY -Hw -QZ -Ed -Dy XP XP XP XP XP XP +Gd +On +PZ +PZ +PZ +Ay +Ig +PZ +PZ +PZ +PZ +Gd +Gd XP XP XP @@ -4920,11 +4699,7 @@ XP XP XP "} -(18,1,1) = {" -XP -XP -XP -XP +(22,1,1) = {" XP XP XP @@ -4948,6 +4723,31 @@ XP XP XP XP +YA +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +yU +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +lW +pU XP XP XP @@ -4955,19 +4755,6 @@ XP XP XP XP -Dy -Ed -oY -Hw -QZ -yo -yo -yo -oY -Hw -QZ -Ed -Dy XP XP XP @@ -4992,6 +4779,8 @@ XP XP XP XP +"} +(23,1,1) = {" XP XP XP @@ -5011,11 +4800,36 @@ XP XP XP XP -"} -(19,1,1) = {" XP XP XP +YA +GH +ik +ik +ik +ik +ik +ik +ik +ik +ik +ik +yG +ik +ik +ik +ik +ik +ik +ik +ik +ik +yG +ik +ik +Sv +pU XP XP XP @@ -5046,20 +4860,9 @@ XP XP XP XP +"} +(24,1,1) = {" XP -Dy -Ed -oY -Hw -QZ -Ed -Ed -Ed -oY -Hw -QZ -Ed -Dy XP XP XP @@ -5080,6 +4883,41 @@ XP XP XP XP +YA +GH +ik +ik +FC +FC +FC +wX +FC +iD +FC +FC +wX +FC +FC +FC +FC +FC +FC +FC +FC +wX +FC +FC +FC +ik +ik +Sv +lW +Ga +Vl +mh +Lp +Lp +ES XP XP XP @@ -5104,10 +4942,7 @@ XP XP XP "} -(20,1,1) = {" -XP -XP -XP +(25,1,1) = {" XP XP XP @@ -5129,6 +4964,41 @@ XP XP XP XP +xa +ik +ik +FC +On +Ho +PZ +PZ +PZ +oE +PZ +PZ +PZ +PZ +FG +PZ +PZ +PZ +PZ +oE +PZ +PZ +KH +Ho +On +FC +ik +SA +SA +SA +Bq +uT +Lp +Lp +Ig XP XP XP @@ -5139,19 +5009,6 @@ XP XP XP XP -pS -Ed -oY -Hw -QZ -Ed -Ed -Ed -oY -Hw -QZ -Ed -Dy XP XP XP @@ -5165,6 +5022,8 @@ XP XP XP XP +"} +(26,1,1) = {" XP XP XP @@ -5186,27 +5045,41 @@ XP XP XP XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(21,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +xa +ik +FC +On +On +On +On +On +On +to +On +On +On +On +WC +On +On +On +On +kA +On +On +On +On +On +Ma +FC +SA +aN +HV +HV +kr +Oi +Oi +oe XP XP XP @@ -5230,20 +5103,9 @@ XP XP XP XP +"} +(27,1,1) = {" XP -Dy -Ed -oY -Hw -QZ -Ed -Ed -Ed -oY -Hw -QZ -Ed -Dy XP XP XP @@ -5264,6 +5126,41 @@ XP XP XP XP +xa +ik +FC +PZ +On +TY +PZ +PZ +PZ +oE +PZ +PZ +PZ +PZ +On +PZ +PZ +PZ +PZ +oE +PZ +PZ +PZ +TY +On +PZ +FC +SA +jo +Nb +Qx +CM +Pp +Lp +Ig XP XP XP @@ -5288,14 +5185,7 @@ XP XP XP "} -(22,1,1) = {" -XP -XP -XP -XP -XP -XP -XP +(28,1,1) = {" XP XP XP @@ -5317,25 +5207,47 @@ XP XP XP XP +xa +ik +FC +Ed +EK +Cq +PZ +iZ +iZ +an +iZ +iZ +iZ +iZ +JG +iZ +iZ +iZ +iZ +an +iZ +iZ +Ay +PZ +On +PZ +wX +SA +jo +Qx +SA +SA +SA +SA +mO XP XP XP XP XP XP -Dy -Ed -oY -Hw -QZ -Ed -Ed -Ed -oY -Hw -QZ -Ed -Dy XP XP XP @@ -5353,6 +5265,8 @@ XP XP XP XP +"} +(29,1,1) = {" XP XP XP @@ -5374,13 +5288,46 @@ XP XP XP XP +xa +ik +FC +Yw +sq +JQ +Ra +JR +uj +UD +oB +BQ +Zb +nL +ML +ML +AX +uj +uj +Ac +Ln +ei +pS +PZ +On +PZ +FC +SA +AJ +tY +mb +wH +Ml +SA +xa XP XP XP XP XP -"} -(23,1,1) = {" XP XP XP @@ -5399,6 +5346,8 @@ XP XP XP XP +"} +(30,1,1) = {" XP XP XP @@ -5415,24 +5364,46 @@ XP XP XP XP -Dy -Ed -oY -Hw -QZ -yo -yo -yo -oY -Hw -QZ -Ed -ax XP XP XP XP XP +xa +ik +FC +Hc +LW +sO +EO +Sm +YQ +tm +EF +UH +Ff +gw +zk +gw +gw +gw +gw +tm +QP +YN +pS +PZ +On +PZ +FC +qD +Bn +lr +Qx +ZB +dB +SA +xa XP XP XP @@ -5456,6 +5427,8 @@ XP XP XP XP +"} +(31,1,1) = {" XP XP XP @@ -5471,75 +5444,47 @@ XP XP XP XP -"} -(24,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -Dy -Ed -oY -Hw -QZ -Ed -Ed -Ed -oY -Hw -QZ -Ed -Dy -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP XP XP XP XP XP XP +xa +ik +FC +ou +ca +ca +DT +lB +ax +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Wq +YN +hq +On +On +Gf +FC +SA +sT +jo +Qx +PA +KQ +qD +xa XP XP XP @@ -5564,3713 +5509,1060 @@ XP XP XP "} -(25,1,1) = {" +(32,1,1) = {" XP +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +yo +Gd +Gd +Gd +Gd +xa +ik +wX +TU +lH +Hu +CU +xF +pS +Zu +gi +EM +EM +EM +sH +EM +EM +EM +EM +Zu +Xf +YN +pS +PZ +On +FC +FC +SA +ot +lr +Qx +PA +Ai +SA +xa +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +yo +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd XP +"} +(33,1,1) = {" XP +Gd +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +On +PZ +xa +ik +FC +BW +fv +HW +lo +xF +pS +Zu +ve +bJ +Lh +bJ +Sr +cz +il +CG +EM +Zu +Xf +yr +pS +Lk +oG +PQ +PQ +SA +Zl +ZQ +YW +lp +HP +SA +xa +Gd +Gd +PZ +PZ +PZ +PZ +PZ +Ay +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +Gd XP +"} +(34,1,1) = {" XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -Dy -Ed -oY -Hw -QZ -Ed -Ed -Ed -oY -Hw -QZ -Ed -Dy -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(26,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -Dy -Ed -oY -Hw -QZ -Ed -Ed -Ed -oY -Hw -QZ -Ed -Dy -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(27,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -Dy -Ed -oY -Hw -QZ -Ed -Ed -Ed -oY -Hw -QZ -Ed -Dy -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(28,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -Dy -Ed -oY -Hw -QZ -Ed -Ed -Ed -oY -Hw -QZ -Ed -Dy -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(29,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -Dy -Ed -Ed -du -Oi -Oi -Kt -Oi -Oi -sn -Ed -Ed -Dy -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(30,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -Dy -yo -Ed -Ed -Ed -CU -Ig -Ed -Ed -Ed -Ed -Dy -Dy -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(31,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -YA -lW -lW -lW -lW -lW -lW -lW -lW -lW -lW -lW -yU -lW -lW -lW -lW -lW -lW -lW -lW -lW -lW -lW -pU -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(32,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -YA -GH -ik -ik -ik -ik -ik -ik -ik -ik -ik -ik -yG -ik -ik -ik -ik -ik -ik -ik -ik -ik -yG -ik -ik -Sv -pU -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(33,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -YA -GH -ik -ik -FC -FC -FC -wX -FC -iD -FC -FC -wX -FC -FC -FC -FC -FC -FC -FC -FC -wX -FC -FC -FC -ik -ik -Sv -lW -Ga -Vl -mh -Lp -Lp -ES -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(34,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -xa -ik -ik -FC -yo -Ff -Ed -Ed -Ed -zk -Ed -Ed -Ed -Ed -FG -Ed -Ed -Ed -Ed -zk -Ed -Ed -iZ -Ff -yo -FC -ik -SA -SA -SA -Bq -uT -Lp -Lp -Ig -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(35,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -xa -ik -FC -yo -yo -yo -yo -yo -yo -to -yo -yo -yo -yo -WC -yo -yo -yo -yo -kA -yo -yo -yo -yo -yo -TY -FC -SA -aN -HV -HV -kr -Oi -Oi -oe -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(36,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -xa -ik -FC -Ed -yo -an -Ed -Ed -Ed -zk -Ed -Ed -Ed -Ed -yo -Ed -Ed -Ed -Ed -zk -Ed -Ed -Ed -an -yo -Ed -FC -SA -jo -Nb -Qx -CM -Pp -Lp -Ig -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(37,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -xa -ik -FC -gw -YQ -Vp -Ed -Gd -Gd -EK -Gd -Gd -Gd -Gd -QN -Gd -Gd -Gd -Gd -EK -Gd -Gd -CU -Ed -yo -Ed -wX -SA -jo -Qx -SA -SA -SA -SA -mO -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(38,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -xa -ik -FC -Yw -sq -JQ -oE -JR -uj -UD -oB -BQ -Zb -nL -ML -ML -AX -uj -uj -Ac -Ln -ei -Xf -Ed -yo -Ed -FC -SA -AJ -tY -mb -wH -Ml -SA -xa -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(39,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -xa -ik -FC -Hc -LW -sO -Ma -Sm -Wc -QP -Rw -gg -Ay -PZ -Wq -PZ -PZ -PZ -PZ -QP -fs -YN -Xf -Ed -yo -Ed -FC -qD -Bn -lr -Qx -ZB -dB -SA -xa -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(40,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -xa -ik -FC -ou -ca -ca -DT -lB -lo -Zu -Zu -Zu -Zu -Zu -Zu -Zu -Zu -Zu -Zu -Zu -EQ -YN -UH -yo -yo -bE -FC -SA -sT -jo -Qx -PA -KQ -qD -xa -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(41,1,1) = {" -XP -XP -XP -XP -XP -XP -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -ax -Dy -Dy -Dy -Dy -xa -ik -wX -TU -lH -Hu -KH -xF -Xf -Zu -gi -EM -EM -EM -sH -EM -EM -EM -EM -Zu -EO -YN -Xf -Ed -yo -FC -FC -SA -ot -lr -Qx -PA -Ai -SA -xa -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -ax -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -XP -XP -XP -XP -XP -XP -XP -"} -(42,1,1) = {" -XP -XP -XP -XP -XP -XP -Dy -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -yo -Ed -xa -ik -FC -BW -fv -HW -tm -xF -Xf -Zu -ve -bJ -Lh -bJ -Sr -cz -il -CG -EM -Zu -EO -yr -Xf -Lk -oG -PQ -PQ -SA -Zl -ZQ -YW -lp -HP -SA -xa -Dy -Dy -Ed -Ed -Ed -Ed -Ed -CU -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Dy -XP -XP -XP -XP -XP -XP -XP -"} -(43,1,1) = {" -XP -XP -XP -XP -XP -XP -Dy -Ed -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -yo -Ed -xa -ik -FC -FC -On -PZ -EO -vK -Xf -Zu -EM -bJ -bP -bJ -Tw -eE -il -TT -EM -Zu -uM -IL -uM -Sx -yJ -BZ -PQ -PQ -PQ -PQ -PQ -ky -Yr -PQ -Sv -pU -Ed -Ed -yo -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ed -Dy -XP -XP -XP -XP -XP -XP -XP -"} -(44,1,1) = {" -XP -XP -XP -XP -XP -XP -Dy -yo -qP -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -mh -yo -xa -ik -ik -ux -Hr -eH -Hr -yN -Hr -Zu -WR -bJ -bJ -bJ -il -il -il -il -EM -Zu -eJ -nD -eJ -eA -DV -Uw -PQ -PQ -XJ -PQ -iE -LK -vJ -PQ -PQ -Sv -pU -yo -rD -IU -IU -IU -IU -IU -IU -IU -IU -IU -IU -IU -IU -IU -IU -IU -oe -yo -Dy -XP -XP -XP -XP -XP -XP -XP -"} -(45,1,1) = {" -XP -XP -XP -XP -XP -XP -Dy -Ed -li -li -li -li -li -li -li -li -li -li -li -li -li -li -li -li -Ig -Ed -xa -yG -ik -ux -Ky -Pl -Dd -Px -wY -Zu -qe -il -il -Ct -EM -bO -il -il -EM -Zu -eb -nD -Ri -Ux -PQ -Qf -PQ -PQ -PQ -sM -mc -LK -mc -dD -PQ -PQ -Az -Ed -Ig -li -li -li -li -li -li -li -li -li -li -li -li -li -li -li -li -Ed -Dy -XP -XP -XP -XP -XP -XP -XP -"} -(46,1,1) = {" -XP -XP -XP -XP -XP -XP -Dy -Ed -Ed -Ed -Ed -Ed -Ed -yo -Ed -Ed -Ed -Ed -yo -Ed -Ed -Ed -Ed -Ed -Ig -Ed -xa -ik -ik -ux -eR -Pl -dv -np -Pl -Zu -Ew -il -fc -nh -EM -nh -um -il -vp -Zu -WO -nD -Ri -eA -xv -Uw -UF -kU -Jz -gm -zq -Fg -zq -iE -hU -PQ -xa -Ed -Ig -Ed -Ed -Ed -Ed -Ed -yo -Ed -Ed -Ed -Ed -yo -Ed -Ed -Ed -Ed -Ed -Ed -Dy -XP -XP -XP -XP -XP -XP -XP -"} -(47,1,1) = {" -XP -XP -XP -XP -XP -XP -Dy -Ed -Ed -an -Ed -Ed -Ed -yo -Ed -Ed -Ed -Ed -yo -Ed -Ed -Ed -Ed -Ed -NY -Oi -gr -ik -ik -ux -tD -xG -Pl -JO -yq -zG -wh -Rv -OS -Nr -Lq -Nv -aa -Rv -nQ -zG -Dr -ph -UE -PU -Sn -cH -gJ -IE -IE -vZ -qO -HK -iE -iE -Wp -XJ -CD -Oi -Go -Ed -Ed -Ed -Ed -Ed -yo -Ed -Ed -Ed -Ed -yo -Ed -Ed -Ed -Ed -Ed -an -Dy -XP -XP -XP -XP -XP -XP -XP -"} -(48,1,1) = {" -XP -XP -XP -XP -XP -XP -Dy -Ed -Ed -Ed -Ed -Ed -Ed -yo -Ed -Ed -Ed -Ed -yo -Ed -Ed -Ed -Ed -Ed -Ig -Ed -xa -ik -ik -ux -Zd -Ta -rd -np -Pl -Zu -EM -il -Jm -gG -EM -gG -pa -il -Zt -Qz -Xb -oz -Ri -eA -Rt -Uw -UF -za -iE -Uw -iE -iE -iE -No -bb -PQ -xa -Ed -Ig -Ed -Ed -Ed -Ed -Ed -yo -Ed -Ed -Ed -Ed -yo -Ed -Ed -Ed -Ed -Ed -Ed -ax -XP -XP -XP -XP -XP -XP -XP -"} -(49,1,1) = {" -XP -XP -XP -XP -XP -XP -Dy -Ed -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ig -Ed -xa -ik -ik -ux -wW -pV -Pl -dR -Pl -Zu -EM -il -il -nI -EM -FN -il -il -qe -Zu -Gt -GQ -Ri -eA -Yr -VO -PQ -XJ -PQ -tz -vu -vu -vu -CC -PQ -PQ -xa -Ed -Ig -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -GE -Ed -Dy -XP -XP -XP -XP -XP -XP -XP -"} -(50,1,1) = {" -XP -XP -XP -XP -XP -XP -Dy -yo -qP -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -Ht -sn -yo -xa -ik -ik -ux -Ad -tF -iy -Zu -mZ -FA -EM -XB -il -il -il -il -il -il -qe -Zu -Bf -nD -Bf -eA -iE -AY -PQ -ik -PQ -PQ -bI -tx -bI -PQ -PQ -YA -GH -yo -du -IU -IU -IU -IU -IU -IU -IU -IU -IU -IU -IU -IU -IU -IU -IU -oe -yo -Dy -XP -XP -XP -XP -XP -XP -XP -"} -(51,1,1) = {" -XP -XP -XP -XP -XP -XP -Dy -Ed -li -li -li -li -li -li -li -li -li -li -li -li -li -li -li -li -yo -Ed -xa -ik -iD -ux -ux -ux -ux -Zu -ME -Zj -EM -il -Af -il -Gz -CI -il -QR -kT -Zu -uM -yD -uM -eA -HR -De -PQ -ik -YC -PQ -PQ -PQ -XJ -PQ -YA -GH -Ed -Ed -yo -li -li -li -li -li -li -li -li -li -li -li -li -li -li -li -li -Ed -Dy -XP -XP -XP -XP -XP -XP -XP -"} -(52,1,1) = {" -XP -XP -XP -XP -XP -XP -Dy -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -CU -Ed -yo -Ed -xa -ik -iD -pE -sv -ia -kl -Zu -Zu -FA -EM -il -dn -il -Gz -Gz -il -yC -rT -Zu -EO -sh -Xf -Lk -oW -PQ -PQ -ik -YA -lW -lW -lW -lW -lW -GH -Dy -Dy -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Ed -Dy -XP -XP -XP -XP -XP -XP -XP -"} -(53,1,1) = {" -XP -XP -XP -XP -XP -XP -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -ax -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -xa -ik -ux -ux -Aj -Hr -ux -ux -HQ -Zu -fq -EM -EM -EM -Vb -EM -EM -ZV -wA -Zu -EO -rL -Xf -Ed -yo -FC -FC -ik -xa -Dy -yo -yo -Dy -Dy -Dy -Dy -Dy -yo -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -ax -Dy -Dy -Dy -Dy -Dy -Dy -Dy -XP -XP -XP -XP -XP -XP -XP -"} -(54,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -xa -ik -ux -Pl -Pl -Pl -qo -Pl -si -Zu -Zu -Zu -Zu -Zu -Zu -Zu -Zu -Zu -Zu -Zu -JG -YN -Xf -Ed -yo -bE -FC -ik -xa -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(55,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -xa -ik -ux -Pl -Pl -Pl -SH -Pl -ux -QN -QN -QN -Ra -BT -fa -Gd -Gd -Gd -Gd -QN -hq -YN -Xf -Ed -yo -Ed -FC -ik -xa -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(56,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -xa -Le -ux -Pl -Pl -Pl -Kc -RB -xL -YF -nL -nL -vd -Od -xj -nL -nL -nL -nL -nL -nL -vU -Xf -Ed -yo -Ed -wX -ik -xa -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(57,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -xa -ik -ux -Vv -Pl -Pl -Pl -Pl -ux -EF -PZ -PZ +Gd PZ -SO -rL -Ho +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +On PZ +xa +ik +FC +FC +EQ +gw +Xf +vK +pS +Zu +EM +bJ +bP +bJ +Tw +eE +il +TT +EM +Zu +uM +IL +uM +Sx +yJ +BZ +PQ +PQ +PQ +PQ +PQ +ky +Yr +PQ +Sv +pU PZ PZ On +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE PZ -PZ -CU -Ed -yo -Ed -FC -ik -xa -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +Gd XP "} -(58,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +(35,1,1) = {" XP +Gd +On +qP +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +mh +On xa ik -ux -Pl -Pl -Pl -Pl -Pl -ux -yo -Ed -yh -yh -yh -yl -yh -yh -yh -Ed -yo -Ed -Ed -Ed -an -yo -Ed -FC ik -xa -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +ux +Hr +eH +Hr +yN +Hr +Zu +WR +bJ +bJ +bJ +il +il +il +il +EM +Zu +eJ +nD +eJ +eA +DV +Uw +PQ +PQ +XJ +PQ +iE +LK +vJ +PQ +PQ +Sv +pU +On +rD +IU +IU +IU +IU +IU +IU +IU +IU +IU +IU +IU +IU +IU +IU +IU +oe +On +Gd XP "} -(59,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +(36,1,1) = {" XP +Gd +PZ +li +li +li +li +li +li +li +li +li +li +li +li +li +li +li +li +Ig +PZ +xa +yG +ik +ux +Ky +Pl +Dd +Px +wY +Zu +qe +il +il +Ct +EM +bO +il +il +EM +Zu +eb +nD +Ri +Ux +PQ +Qf +PQ +PQ +PQ +sM +mc +LK +mc +dD +PQ +PQ +Az +PZ +Ig +li +li +li +li +li +li +li +li +li +li +li +li +li +li +li +li +PZ +Gd XP +"} +(37,1,1) = {" XP +Gd +PZ +PZ +PZ +PZ +PZ +PZ +On +PZ +PZ +PZ +PZ +On +PZ +PZ +PZ +PZ +PZ +Ig +PZ xa ik +ik ux +eR Pl +dv +np Pl -Pl -Pl -ul -ux -WC -yo -yh -RW -Qg -Rh -JC -mD -yh -yo -qn -yo -yo -yo -yo -yo -yo -FC -ik +Zu +Ew +il +fc +nh +EM +nh +um +il +vp +Zu +WO +nD +Ri +eA +xv +Uw +UF +kU +Jz +gm +zq +Fg +zq +iE +hU +PQ xa -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +PZ +Ig +PZ +PZ +PZ +PZ +PZ +On +PZ +PZ +PZ +PZ +On +PZ +PZ +PZ +PZ +PZ +PZ +Gd XP "} -(60,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +(38,1,1) = {" XP +Gd +PZ +PZ +TY +PZ +PZ +PZ +On +PZ +PZ +PZ +PZ +On +PZ +PZ +PZ +PZ +PZ +NY +Oi +gr +ik +ik +ux +tD +xG +Pl +JO +yq +zG +wh +Rv +OS +Nr +Lq +Nv +aa +Rv +nQ +zG +Dr +ph +UE +PU +Sn +cH +gJ +IE +IE +vZ +qO +HK +iE +iE +Wp +XJ +CD +Oi +Go +PZ +PZ +PZ +PZ +PZ +On +PZ +PZ +PZ +PZ +On +PZ +PZ +PZ +PZ +PZ +TY +Gd XP +"} +(39,1,1) = {" XP +Gd +PZ +PZ +PZ +PZ +PZ +PZ +On +PZ +PZ +PZ +PZ +On +PZ +PZ +PZ +PZ +PZ +Ig +PZ xa ik -ux -ux -si -ux -ux -iR -ux -yo -Gf -yh -kj -JC -qE -qF -mD -yh -Ed -yo -Gf -Ed -Cq -Ed -yo -FC -ik ik +ux +Zd +Ta +rd +np +Pl +Zu +EM +il +Jm +gG +EM +gG +pa +il +Zt +Qz +Xb +oz +Ri +eA +Rt +Uw +UF +za +iE +Uw +iE +iE +iE +No +bb +PQ xa -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +PZ +Ig +PZ +PZ +PZ +PZ +PZ +On +PZ +PZ +PZ +PZ +On +PZ +PZ +PZ +PZ +PZ +PZ +yo XP "} -(61,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +(40,1,1) = {" XP -Sv -pU -ik -ik -ik -LS -ik -Vn -ik -FC -wX -FC -Nz -nS -gR -mN -qM -FC -FC -FC -FC -FC -wX -FC -FC +Gd +PZ +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +Ig +PZ +xa ik ik -YA -GH -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +ux +wW +pV +Pl +dR +Pl +Zu +EM +il +il +nI +EM +FN +il +il +qe +Zu +Gt +GQ +Ri +eA +Yr +VO +PQ +XJ +PQ +tz +vu +vu +vu +CC +PQ +PQ +xa +PZ +Ig +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +GE +PZ +Gd XP "} -(62,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +(41,1,1) = {" XP -Sv -pU -ik -ik -yG -ik -Vn -ik -ik -ik -ik -FC -FC -FC -wX -FC -ik -ik -ik -ik -ik -ik +Gd +On +qP +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +Ht +sn +On +xa ik ik +ux +Ad +tF +iy +Zu +mZ +FA +EM +XB +il +il +il +il +il +il +qe +Zu +Bf +nD +Bf +eA +iE +AY +PQ ik +PQ +PQ +bI +tx +bI +PQ +PQ YA GH -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +On +du +IU +IU +IU +IU +IU +IU +IU +IU +IU +IU +IU +IU +IU +IU +IU +oe +On +Gd XP "} -(63,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +(42,1,1) = {" XP -Sv -lW -lW -lW -lW -bR -lW -lW -pU -ik -ik -ik -ik +Gd +PZ +li +li +li +li +li +li +li +li +li +li +li +li +li +li +li +li +On +PZ +xa ik +iD +ux +ux +ux +ux +Zu +ME +Zj +EM +il +Af +il +Gz +CI +il +QR +kT +Zu +uM +yD +uM +eA +HR +De +PQ ik -yG +YC +PQ +PQ +PQ +XJ +PQ YA -lW -lW -lW -lW -lW -lW -lW GH -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +PZ +PZ +On +li +li +li +li +li +li +li +li +li +li +li +li +li +li +li +li +PZ +Gd XP "} -(64,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +(43,1,1) = {" XP -mH -Dy -Dy -Sv -lW +Gd +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +Ay +PZ +On +PZ +xa +ik +iD +pE +sv +ia +kl +Zu +Zu +FA +EM +il +dn +il +Gz +Gz +il +yC +rT +Zu +Xf +sh +pS +Lk +oW +PQ +PQ +ik +YA lW lW -TL lW lW lW GH -Dy -Dy -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -"} -(65,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +Gd +Gd +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +PZ +Gd XP +"} +(44,1,1) = {" XP +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +yo +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +xa +ik +ux +ux +Aj +Hr +ux +ux +HQ +Zu +fq +EM +EM +EM +Vb +EM +EM +ZV +wA +Zu +Xf +rL +pS +PZ +On +FC +FC +ik +xa +Gd +On +On +Gd +Gd +Gd +Gd +Gd +On +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +yo +Gd +Gd +Gd +Gd +Gd +Gd +Gd XP +"} +(45,1,1) = {" XP XP XP @@ -9278,20 +6570,6 @@ XP XP XP XP -YO -Dy -Dy -Ed -yo -Ed -CU -Ig -Ed -Ed -yo -Ed -Dy -Dy XP XP XP @@ -9306,6 +6584,35 @@ XP XP XP XP +xa +ik +ux +Pl +Pl +Pl +qo +Pl +si +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Rw +YN +pS +PZ +On +Gf +FC +ik +xa XP XP XP @@ -9336,11 +6643,7 @@ XP XP XP "} -(66,1,1) = {" -XP -XP -XP -XP +(46,1,1) = {" XP XP XP @@ -9362,6 +6665,35 @@ XP XP XP XP +xa +ik +ux +Pl +Pl +Pl +SH +Pl +ux +JG +JG +JG +SO +QN +BT +iZ +iZ +iZ +iZ +JG +fs +YN +pS +PZ +On +PZ +FC +ik +xa XP XP XP @@ -9371,19 +6703,6 @@ XP XP XP XP -Dy -Ed -yo -rD -Oi -Oi -Mm -Oi -Oi -mh -yo -Ed -Dy XP XP XP @@ -9404,6 +6723,8 @@ XP XP XP XP +"} +(47,1,1) = {" XP XP XP @@ -9425,10 +6746,37 @@ XP XP XP XP +xa +Le +ux +Pl +Pl +Pl +Kc +RB +xL +YF +nL +nL +vd +Od +xj +nL +nL +nL +nL +nL +nL +vU +pS +PZ +On +PZ +wX +ik +xa XP XP -"} -(67,1,1) = {" XP XP XP @@ -9456,6 +6804,8 @@ XP XP XP XP +"} +(48,1,1) = {" XP XP XP @@ -9463,19 +6813,6 @@ XP XP XP XP -Dy -Ed -oY -kV -QZ -Ed -Ed -Ed -oY -kV -QZ -Ed -Dy XP XP XP @@ -9490,6 +6827,35 @@ XP XP XP XP +xa +ik +ux +Vv +Pl +Pl +Pl +Pl +ux +gg +gw +gw +gw +Wc +rL +bE +gw +gw +gw +EQ +gw +gw +Ay +PZ +On +PZ +FC +ik +xa XP XP XP @@ -9520,11 +6886,7 @@ XP XP XP "} -(68,1,1) = {" -XP -XP -XP -XP +(49,1,1) = {" XP XP XP @@ -9546,6 +6908,35 @@ XP XP XP XP +xa +ik +ux +Pl +Pl +Pl +Pl +Pl +ux +On +PZ +yh +yh +yh +yl +yh +yh +yh +PZ +On +PZ +PZ +PZ +TY +On +PZ +FC +ik +xa XP XP XP @@ -9555,19 +6946,6 @@ XP XP XP XP -Dy -Ed -oY -kV -QZ -Ed -Ed -Ed -oY -kV -QZ -Ed -Dy XP XP XP @@ -9588,6 +6966,8 @@ XP XP XP XP +"} +(50,1,1) = {" XP XP XP @@ -9609,10 +6989,37 @@ XP XP XP XP +xa +ik +ux +Pl +Pl +Pl +Pl +ul +ux +WC +On +yh +RW +Qg +Rh +JC +mD +yh +On +qn +On +On +On +On +On +On +FC +ik +xa XP XP -"} -(69,1,1) = {" XP XP XP @@ -9640,6 +7047,8 @@ XP XP XP XP +"} +(51,1,1) = {" XP XP XP @@ -9647,19 +7056,6 @@ XP XP XP XP -Dy -Ed -oY -kV -QZ -Ed -Ed -Ed -oY -kV -QZ -Ed -Dy XP XP XP @@ -9674,6 +7070,35 @@ XP XP XP XP +xa +ik +ux +ux +si +ux +ux +iR +ux +On +Vp +yh +kj +JC +qE +qF +mD +yh +PZ +On +Vp +PZ +fa +PZ +On +FC +ik +ik +xa XP XP XP @@ -9704,29 +7129,7 @@ XP XP XP "} -(70,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +(52,1,1) = {" XP XP XP @@ -9739,19 +7142,6 @@ XP XP XP XP -Dy -Ed -oY -kV -QZ -Ed -Ed -Ed -oY -kV -QZ -Ed -ax XP XP XP @@ -9761,6 +7151,35 @@ XP XP XP XP +Sv +pU +ik +ik +ik +LS +ik +Vn +ik +FC +wX +FC +Nz +nS +gR +mN +qM +FC +FC +FC +FC +FC +wX +FC +FC +ik +ik +YA +GH XP XP XP @@ -9790,13 +7209,13 @@ XP XP XP XP +"} +(53,1,1) = {" XP XP XP XP XP -"} -(71,1,1) = {" XP XP XP @@ -9814,6 +7233,33 @@ XP XP XP XP +Sv +pU +ik +ik +yG +ik +Vn +ik +ik +ik +ik +FC +FC +FC +wX +FC +ik +ik +ik +ik +ik +ik +ik +ik +ik +YA +GH XP XP XP @@ -9831,19 +7277,6 @@ XP XP XP XP -Dy -Ed -oY -kV -QZ -Ed -Ed -Ed -oY -kV -QZ -Ed -Dy XP XP XP @@ -9857,6 +7290,8 @@ XP XP XP XP +"} +(54,1,1) = {" XP XP XP @@ -9880,6 +7315,31 @@ XP XP XP XP +Sv +lW +lW +lW +lW +bR +lW +lW +pU +ik +ik +ik +ik +ik +ik +yG +YA +lW +lW +lW +lW +lW +lW +lW +GH XP XP XP @@ -9887,8 +7347,6 @@ XP XP XP XP -"} -(72,1,1) = {" XP XP XP @@ -9913,6 +7371,8 @@ XP XP XP XP +"} +(55,1,1) = {" XP XP XP @@ -9923,19 +7383,6 @@ XP XP XP XP -Dy -Ed -oY -kV -QZ -yo -yo -yo -oY -kV -QZ -Ed -Dy XP XP XP @@ -9954,6 +7401,20 @@ XP XP XP XP +mH +Gd +Gd +Sv +lW +lW +lW +TL +lW +lW +lW +GH +Gd +Gd XP XP XP @@ -9979,8 +7440,6 @@ XP XP XP XP -"} -(73,1,1) = {" XP XP XP @@ -9993,6 +7452,8 @@ XP XP XP XP +"} +(56,1,1) = {" XP XP XP @@ -10015,25 +7476,26 @@ XP XP XP XP -Dy -an -oY -kV -QZ -Ed -Ed -Ed -oY -kV -QZ -Ed -Dy XP XP XP XP XP XP +YO +Gd +Gd +PZ +On +PZ +Ay +Ig +PZ +PZ +On +PZ +Gd +Gd XP XP XP @@ -10072,18 +7534,7 @@ XP XP XP "} -(74,1,1) = {" -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP -XP +(57,1,1) = {" XP XP XP @@ -10107,25 +7558,25 @@ XP XP XP XP -Dy -Ed -oY -kV -QZ -Ed -Ed -Ed -oY -kV -QZ -Ed -Dy XP XP XP XP XP XP +Gd +PZ +On +rD +Oi +Oi +Mm +Oi +Oi +mh +On +PZ +Gd XP XP XP @@ -10164,12 +7615,7 @@ XP XP XP "} -(75,1,1) = {" -XP -XP -XP -XP -XP +(58,1,1) = {" XP XP XP @@ -10199,25 +7645,19 @@ XP XP XP XP -Dy -Ed +Gd +PZ oY kV QZ -Ed -Ed -Ed +PZ +PZ +PZ oY kV QZ -Ed -Dy -XP -XP -XP -XP -XP -XP +PZ +Gd XP XP XP @@ -10256,12 +7696,7 @@ XP XP XP "} -(76,1,1) = {" -XP -XP -XP -XP -XP +(59,1,1) = {" XP XP XP @@ -10291,25 +7726,19 @@ XP XP XP XP -Dy -Ed +Gd +PZ oY kV QZ -Ed -Ed -Ed +PZ +PZ +PZ oY kV QZ -Ed -Dy -XP -XP -XP -XP -XP -XP +PZ +Gd XP XP XP @@ -10348,12 +7777,7 @@ XP XP XP "} -(77,1,1) = {" -XP -XP -XP -XP -XP +(60,1,1) = {" XP XP XP @@ -10383,25 +7807,19 @@ XP XP XP XP -Dy -Ed +Gd +PZ oY kV QZ -yo -yo -yo +PZ +PZ +PZ oY kV QZ -Ed -Dy -XP -XP -XP -XP -XP -XP +PZ +Gd XP XP XP @@ -10440,12 +7858,7 @@ XP XP XP "} -(78,1,1) = {" -XP -XP -XP -XP -XP +(61,1,1) = {" XP XP XP @@ -10475,25 +7888,19 @@ XP XP XP XP -Dy -Ed +Gd +PZ oY kV QZ -Ed -Ed -Ed +PZ +PZ +PZ oY kV QZ -Ed -Dy -XP -XP -XP -XP -XP -XP +PZ +yo XP XP XP @@ -10532,12 +7939,7 @@ XP XP XP "} -(79,1,1) = {" -XP -XP -XP -XP -XP +(62,1,1) = {" XP XP XP @@ -10567,19 +7969,20 @@ XP XP XP XP -Dy -Ed +Gd +PZ oY kV QZ -Ed -Ed -Ed +PZ +PZ +PZ oY kV QZ -Ed -Dy +PZ +Gd +XP XP XP XP @@ -10616,6 +8019,9 @@ XP XP XP XP +"} +(63,1,1) = {" +XP XP XP XP @@ -10623,8 +8029,6 @@ XP XP XP XP -"} -(80,1,1) = {" XP XP XP @@ -10646,6 +8050,22 @@ XP XP XP XP +Gd +PZ +oY +kV +QZ +On +On +On +oY +kV +QZ +PZ +Gd +XP +XP +XP XP XP XP @@ -10659,19 +8079,6 @@ XP XP XP XP -ax -Ed -oY -kV -QZ -Ed -Ed -Ed -oY -kV -QZ -Ed -Dy XP XP XP @@ -10693,6 +8100,8 @@ XP XP XP XP +"} +(64,1,1) = {" XP XP XP @@ -10715,8 +8124,6 @@ XP XP XP XP -"} -(81,1,1) = {" XP XP XP @@ -10724,6 +8131,19 @@ XP XP XP XP +Gd +TY +oY +kV +QZ +PZ +PZ +PZ +oY +kV +QZ +PZ +Gd XP XP XP @@ -10751,19 +8171,6 @@ XP XP XP XP -Dy -Ed -oY -kV -QZ -Ed -Ed -Ed -oY -kV -QZ -Ed -ax XP XP XP @@ -10774,6 +8181,8 @@ XP XP XP XP +"} +(65,1,1) = {" XP XP XP @@ -10803,12 +8212,23 @@ XP XP XP XP +Gd +PZ +oY +kV +QZ +PZ +PZ +PZ +oY +kV +QZ +PZ +Gd XP XP XP XP -"} -(82,1,1) = {" XP XP XP @@ -10842,20 +8262,9 @@ XP XP XP XP +"} +(66,1,1) = {" XP -Dy -Ed -oY -Mm -QZ -Ed -Ed -Ed -oY -Mm -QZ -Ed -Dy XP XP XP @@ -10884,6 +8293,19 @@ XP XP XP XP +Gd +PZ +oY +kV +QZ +PZ +PZ +PZ +oY +kV +QZ +PZ +Gd XP XP XP @@ -10899,8 +8321,6 @@ XP XP XP XP -"} -(83,1,1) = {" XP XP XP @@ -10923,6 +8343,8 @@ XP XP XP XP +"} +(67,1,1) = {" XP XP XP @@ -10935,19 +8357,6 @@ XP XP XP XP -Dy -Ed -Ed -yo -Ed -Ed -Ed -Ed -Ed -yo -Ed -Ed -Dy XP XP XP @@ -10965,6 +8374,19 @@ XP XP XP XP +Gd +PZ +oY +kV +QZ +PZ +PZ +PZ +oY +kV +QZ +PZ +Gd XP XP XP @@ -10991,8 +8413,6 @@ XP XP XP XP -"} -(84,1,1) = {" XP XP XP @@ -11004,6 +8424,8 @@ XP XP XP XP +"} +(68,1,1) = {" XP XP XP @@ -11027,25 +8449,25 @@ XP XP XP XP -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy -Dy XP XP XP XP XP XP +Gd +PZ +oY +kV +QZ +On +On +On +oY +kV +QZ +PZ +Gd XP XP XP @@ -11084,7 +8506,8 @@ XP XP XP "} -(85,1,1) = {" +(69,1,1) = {" +XP XP XP XP @@ -11113,6 +8536,19 @@ XP XP XP XP +Gd +PZ +oY +kV +QZ +PZ +PZ +PZ +oY +kV +QZ +PZ +Gd XP XP XP @@ -11150,6 +8586,8 @@ XP XP XP XP +"} +(70,1,1) = {" XP XP XP @@ -11175,12 +8613,23 @@ XP XP XP XP -"} -(86,1,1) = {" XP XP XP XP +Gd +PZ +oY +kV +QZ +PZ +PZ +PZ +oY +kV +QZ +PZ +Gd XP XP XP @@ -11218,6 +8667,8 @@ XP XP XP XP +"} +(71,1,1) = {" XP XP XP @@ -11247,6 +8698,19 @@ XP XP XP XP +yo +PZ +oY +kV +QZ +PZ +PZ +PZ +oY +kV +QZ +PZ +Gd XP XP XP @@ -11267,8 +8731,6 @@ XP XP XP XP -"} -(87,1,1) = {" XP XP XP @@ -11286,6 +8748,8 @@ XP XP XP XP +"} +(72,1,1) = {" XP XP XP @@ -11315,6 +8779,19 @@ XP XP XP XP +Gd +PZ +oY +kV +QZ +PZ +PZ +PZ +oY +kV +QZ +PZ +yo XP XP XP @@ -11352,6 +8829,8 @@ XP XP XP XP +"} +(73,1,1) = {" XP XP XP @@ -11359,8 +8838,6 @@ XP XP XP XP -"} -(88,1,1) = {" XP XP XP @@ -11383,6 +8860,19 @@ XP XP XP XP +Gd +PZ +oY +Mm +QZ +PZ +PZ +PZ +oY +Mm +QZ +PZ +Gd XP XP XP @@ -11420,6 +8910,8 @@ XP XP XP XP +"} +(74,1,1) = {" XP XP XP @@ -11449,10 +8941,21 @@ XP XP XP XP +Gd +PZ +PZ +On +PZ +PZ +PZ +PZ +PZ +On +PZ +PZ +Gd XP XP -"} -(89,1,1) = {" XP XP XP @@ -11488,6 +8991,8 @@ XP XP XP XP +"} +(75,1,1) = {" XP XP XP @@ -11517,6 +9022,19 @@ XP XP XP XP +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd +Gd XP XP XP @@ -11543,8 +9061,6 @@ XP XP XP XP -"} -(90,1,1) = {" XP XP XP @@ -11556,6 +9072,8 @@ XP XP XP XP +"} +(76,1,1) = {" XP XP XP From 2c956722b22c8683dca19d5391003b85cfdc28d6 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Fri, 6 Dec 2024 19:47:51 -0500 Subject: [PATCH 25/31] Repaths a couple map things --- .../map_files/RandomRuins/SpaceRuins/deepstorage.dmm | 12 ++++++------ .../RandomRuins/SpaceRuins/telecomns_returns.dmm | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm index e93fa6b8204e..62b02b9e105c 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm @@ -982,7 +982,7 @@ }, /area/ruin/space/deepstorage) "dR" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/machine_frame, /turf/simulated/floor/catwalk, /area/ruin/space/deepstorage) "dT" = ( @@ -4475,7 +4475,7 @@ /area/ruin/space/deepstorage) "Br" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/machine_frame, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "black" @@ -4702,7 +4702,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/constructable_frame, +/obj/structure/machine_frame, /turf/simulated/floor/mineral/titanium, /area/ruin/space/deepstorage) "CD" = ( @@ -4831,9 +4831,9 @@ dir = 1 }, /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/item/reagent_containers/iv_bag/blood/OMinus, +/obj/item/reagent_containers/iv_bag/blood/o_minus, +/obj/item/reagent_containers/iv_bag/blood/o_minus, +/obj/item/reagent_containers/iv_bag/blood/o_minus, /obj/item/reagent_containers/iv_bag/blood/random, /obj/item/reagent_containers/iv_bag/blood/random, /obj/item/reagent_containers/iv_bag/blood/random, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm b/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm index fbc307b56605..442cfe68ff0f 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/telecomns_returns.dmm @@ -77,7 +77,7 @@ }, /area/ruin/space/telecomms/chamber) "bP" = ( -/obj/effect/spawner/lootdrop/telecomms_core_table, +/obj/effect/spawner/random/telecomms_core_table, /obj/machinery/ai_slipper, /obj/structure/table/glass/reinforced/plastitanium, /turf/simulated/floor/plasteel{ @@ -278,7 +278,7 @@ /turf/space, /area/space/nearstation/no_teleport) "fc" = ( -/obj/machinery/constructable_frame/machine_frame, +/obj/structure/machine_frame, /turf/simulated/floor/bluegrid{ icon_state = "dark"; name = "Mainframe Floor"; @@ -538,7 +538,7 @@ }, /area/ruin/space/telecomms/chamber) "kU" = ( -/obj/structure/closet/malf/suits, +/obj/structure/closet/malf_suits, /obj/effect/spawner/random/cobweb/left/frequent, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) @@ -2334,7 +2334,7 @@ }, /area/ruin/space/telecomms/chamber) "Jz" = ( -/obj/structure/closet/malf/suits, +/obj/structure/closet/malf_suits, /turf/simulated/floor/plasteel, /area/ruin/space/telecomms/tele) "JC" = ( From 70933fc1e9e9a14387fdf743bd641ae3ab44b5e2 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:49:04 -0500 Subject: [PATCH 26/31] Engineering event documentation and cleanup --- .../power/engines/supermatter/engineering_event.dm | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/code/modules/power/engines/supermatter/engineering_event.dm b/code/modules/power/engines/supermatter/engineering_event.dm index e33149e8be81..ab0db7f5b6a6 100644 --- a/code/modules/power/engines/supermatter/engineering_event.dm +++ b/code/modules/power/engines/supermatter/engineering_event.dm @@ -1,22 +1,25 @@ /datum/engi_event var/name = "Unknown Engi Event (Report this to coders)" + /// The severity of the event var/threat_level + /// How long the event lasts var/duration -/datum/engi_event/New() - . = ..() - +/// Starts an event /datum/engi_event/proc/start_event() + on_start() return +/// To be executed once an event has been started /datum/engi_event/proc/on_start() - on_start() alert_engi() if(duration) addtimer(CALLBACK(src, PROC_REF(on_end)), duration) +/// Send an alert to engineering about the event /datum/engi_event/proc/alert_engi() return +/// What happens when an event ends. /datum/engi_event/proc/on_end() return From 4fe6a4cf060ae2a72fa1268c33c2052c5ca48833 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:53:25 -0500 Subject: [PATCH 27/31] Product documentation, tap location, formatting --- code/modules/station_goals/bluespace_tap.dm | 5 +++++ code/modules/station_goals/bluespace_tap_events.dm | 14 ++++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 0ac80c400b1f..a7663e1575d0 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -31,10 +31,15 @@ //needed for the vending part of it /datum/data/bluespace_tap_product + /// Name of the product var/product_name = "generic" + /// The path to a list containing the common drops var/product_path_common = null + /// The path to a list containing the uncommon drops var/product_path_uncommon = null + /// The path to a list containing the rare drops var/product_path_rare = null + /// How much the product costs to produce var/product_cost = 100 //cost in mining points to generate /datum/data/bluespace_tap_product/New(name, path_common, path_uncommon, path_rare, cost) diff --git a/code/modules/station_goals/bluespace_tap_events.dm b/code/modules/station_goals/bluespace_tap_events.dm index f468931b6950..836539c123fd 100644 --- a/code/modules/station_goals/bluespace_tap_events.dm +++ b/code/modules/station_goals/bluespace_tap_events.dm @@ -1,12 +1,10 @@ /datum/engi_event/bluespace_tap_event name = "Unknown Anomaly (Report this to coders)" var/obj/machinery/power/bluespace_tap/tap - var/turf/tap_turf /datum/engi_event/bluespace_tap_event/New(obj/machinery/power/bluespace_tap/_tap) . = ..() tap = _tap - tap_turf = get_turf(tap) if(!tap) stack_trace("a /datum/bluespace_tap_event was called without an involved bluespace tap.") return @@ -16,7 +14,7 @@ /datum/engi_event/bluespace_tap_event/start_event() tap.investigate_log("event [src] has been triggered", "bluespace_tap") - . = ..() + return ..() // gas events /datum/engi_event/bluespace_tap_event/gas @@ -49,7 +47,7 @@ air.set_agent_b(250) air.set_temperature(T20C) - tap_turf.blind_release_air(air) + get_turf(tap).blind_release_air(air) // dirty /datum/engi_event/bluespace_tap_event/dirty @@ -60,8 +58,8 @@ /datum/engi_event/bluespace_tap_event/dirty/on_start() tap.dirty = TRUE - var/list/gunk = list("carbon","flour","blood") - var/datum/reagents/R = new/datum/reagents(50) + var/list/gunk = list("carbon", "flour", "blood") + var/datum/reagents/R = new /datum/reagents(50) R.my_atom = tap R.add_reagent(pick(gunk), 50) @@ -93,7 +91,7 @@ switch(shock_type) if("single") var/list/shock_mobs = list() - for(var/C in view(tap_turf, 5)) // We only want to shock a single random mob in range, not every one. + for(var/C in view(get_turf(tap), 5)) // We only want to shock a single random mob in range, not every one. if(isliving(C)) shock_mobs += C if(length(shock_mobs)) @@ -103,7 +101,7 @@ tap.Beam(L, icon_state = "lightning[rand(1, 12)]", icon = 'icons/effects/effects.dmi', time = 5) if("mass") name = "E-2" - for(var/C in view(tap_turf, 5)) // Zap everyone + for(var/C in view(get_turf(tap), 5)) // Zap everyone if(isliving(C)) var/mob/living/L = C L.electrocute_act(rand(5, 25), "electrical arc") From a0aaa40459a890185cb59dac897ef6a83128c120 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:55:15 -0500 Subject: [PATCH 28/31] Nulled var on destroy, documentation --- code/modules/station_goals/bluespace_tap_events.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/station_goals/bluespace_tap_events.dm b/code/modules/station_goals/bluespace_tap_events.dm index 836539c123fd..5b62102bb918 100644 --- a/code/modules/station_goals/bluespace_tap_events.dm +++ b/code/modules/station_goals/bluespace_tap_events.dm @@ -1,5 +1,6 @@ /datum/engi_event/bluespace_tap_event name = "Unknown Anomaly (Report this to coders)" + /// Which bluespace tap started the event var/obj/machinery/power/bluespace_tap/tap /datum/engi_event/bluespace_tap_event/New(obj/machinery/power/bluespace_tap/_tap) @@ -16,6 +17,10 @@ tap.investigate_log("event [src] has been triggered", "bluespace_tap") return ..() +/datum/engi_event/Destroy(force, ...) + tap = null + return ..() + // gas events /datum/engi_event/bluespace_tap_event/gas name = "Gas Event" From 108db34a11d4b68ae34634c45552f458949beae9 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:58:28 -0500 Subject: [PATCH 29/31] Handles not finding a valid spawn location --- code/modules/station_goals/bluespace_tap.dm | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index a7663e1575d0..18cfb6ab7fe9 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -428,11 +428,18 @@ do_sparks(2, FALSE, src) var/spawn_location = find_spawn_location() - spawn_item(product, spawn_location) + if(!spawn_location) + // If there is no valid space, spawn the item on the BSH harvester itself + spawn_item(get_turf(src)) + else + spawn_item(product, spawn_location) if(prob(25) && double_chance) // Spawn second item in random spot on station - places it where NADs can respawn spawn_location = find_spawn_location(TRUE) + if(!spawn_location) + // If there is no valid space, do not spawn the item + return spawn_item(product, spawn_location) /// Handles a motherlode - each product is spawned 5 times at both the machine and around the station From 9db79b8709b085f24848124afa4da3324b993b38 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Tue, 17 Dec 2024 18:02:06 -0500 Subject: [PATCH 30/31] Error fixes --- code/modules/station_goals/bluespace_tap_events.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/station_goals/bluespace_tap_events.dm b/code/modules/station_goals/bluespace_tap_events.dm index 5b62102bb918..f173fb42bef3 100644 --- a/code/modules/station_goals/bluespace_tap_events.dm +++ b/code/modules/station_goals/bluespace_tap_events.dm @@ -17,7 +17,7 @@ tap.investigate_log("event [src] has been triggered", "bluespace_tap") return ..() -/datum/engi_event/Destroy(force, ...) +/datum/engi_event/bluespace_tap_event/Destroy(force, ...) tap = null return ..() @@ -52,7 +52,8 @@ air.set_agent_b(250) air.set_temperature(T20C) - get_turf(tap).blind_release_air(air) + var/turf/tap_turf = get_turf(tap) + tap_turf.blind_release_air(air) // dirty /datum/engi_event/bluespace_tap_event/dirty From 817db89ed68a14011aceb264db782a3a803e0445 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sun, 5 Jan 2025 06:18:36 -0500 Subject: [PATCH 31/31] Fixes runtime if no NAD spawn points. --- code/modules/station_goals/bluespace_tap.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 18cfb6ab7fe9..ef69d3f31efc 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -463,6 +463,8 @@ spawn_location = pick(open_turfs) spawn_item(product, spawn_location) + if(!random_spawns) + continue spawn_location = pick(random_spawns) spawn_location = pick(spawn_location.AdjacentTurfs(open_only = TRUE)) if(spawn_location.density)